bx-1316-refactoring #14

Merged
ksenia_mikhailova merged 46 commits from bx-1316-refactoring into dev 2024-08-28 15:06:52 +03:00
1 changed files with 21 additions and 11 deletions
Showing only changes of commit e7ae7243af - Show all commits

View File

@ -4,10 +4,7 @@ import {
Box3, Color, DoubleSide, Group, Mesh, PlaneGeometry, Box3, Color, DoubleSide, Group, Mesh, PlaneGeometry,
MeshStandardMaterial, MeshStandardMaterialParameters, MeshStandardMaterial, MeshStandardMaterialParameters,
Vector2, Vector3, Vector2, Vector3,
Object3D, CircleGeometry, MeshBasicMaterial,
MeshPhongMaterial,
CircleGeometry,
MeshBasicMaterial,
} from 'three'; } from 'three';
import { useTresContext, useSeek, useTexture, useLoop } from '@tresjs/core'; import { useTresContext, useSeek, useTexture, useLoop } from '@tresjs/core';
@ -28,6 +25,7 @@ const models = ref<model3DType[]>([])
const clickable_items = ref<any[]>([]) const clickable_items = ref<any[]>([])
const clickable_refs = ref<any[]>([]) const clickable_refs = ref<any[]>([])
const envVars = reactive({}) as EnvVars const envVars = reactive({}) as EnvVars
const def_distance = reactive({ max: 10, min: 1 })
const sidebar = usePromoSidebar(); const sidebar = usePromoSidebar();
const sidebar_scene = usePromoScene(); const sidebar_scene = usePromoScene();
@ -70,6 +68,9 @@ const loadModels = async () => {
const raw_data = await res.json() as scene3D const raw_data = await res.json() as scene3D
loading_store.status = 'other' loading_store.status = 'other'
def_distance.max = raw_data.max_distance
def_distance.min = raw_data.min_distance
envVars.focus = raw_data.max_distance * 0.5 envVars.focus = raw_data.max_distance * 0.5
if (raw_data.env) { if (raw_data.env) {
Object.assign(envVars, raw_data.env) Object.assign(envVars, raw_data.env)
@ -189,11 +190,13 @@ const loadModels = async () => {
const p = raw_data.min_distance * 0.05 const p = raw_data.min_distance * 0.05
const point = new Mesh( const point_mesh = new Mesh(
new CircleGeometry(p, 32), new CircleGeometry(p, 32),
new MeshBasicMaterial({ map: pointerTexture.map }) new MeshBasicMaterial({ map: pointerTexture.map })
) )
point.rotateX(-0.5 * Math.PI) point_mesh.rotateX(-0.5 * Math.PI)
const point = new Group()
point.add(point_mesh)
point.position.set(world_position.x, p * 3, world_position.z * 2) point.position.set(world_position.x, p * 3, world_position.z * 2)
point.name = `${element.id}_clickable` point.name = `${element.id}_clickable`
point.updateMatrixWorld() point.updateMatrixWorld()
@ -237,7 +240,9 @@ const loadModels = async () => {
const { onAfterRender } = useLoop() const { onAfterRender } = useLoop()
onAfterRender(() => { onAfterRender(() => {
clickable_refs.value.map(el => { clickable_refs.value.map(el => {
el.value[0].lookAt(camera.value?.position) if (el.value[0] && el.value[0].children) {
el.value[0].children[0].lookAt(camera.value?.position)
}
}) })
if (controls.value) { if (controls.value) {
if (timer.value == 0) { if (timer.value == 0) {
@ -253,7 +258,6 @@ const openSidebar = (id: number) => {
const target = clickable.list.find(el => el.id == id) const target = clickable.list.find(el => el.id == id)
if (!target) return if (!target) return
const el = seekByName(scene.value, `${id}_clickable`); const el = seekByName(scene.value, `${id}_clickable`);
console.log(el)
if (el) { if (el) {
(controls.value as any).maxDistance = 10; (controls.value as any).maxDistance = 10;
(controls.value as any).minDistance = 1; (controls.value as any).minDistance = 1;
@ -261,8 +265,6 @@ const openSidebar = (id: number) => {
el.getWorldPosition(target_vector); el.getWorldPosition(target_vector);
(controls.value as any).target = target_vector; (controls.value as any).target = target_vector;
console.log(target_vector)
// (camera.value as any).lookAt(el)
} }
} }
@ -276,6 +278,13 @@ watch(() => props.source, () => {
loadModels() loadModels()
}) })
watch(() => sidebar.is_open, () => {
if (sidebar.is_open == false) {
(controls.value as any).minDistance = mobileAndTabletCheck() ? def_distance.min * 0.5 : def_distance.min;
(controls.value as any).maxDistance = def_distance.max;
}
})
onMounted(() => { onMounted(() => {
document.addEventListener('click', clickEvent) document.addEventListener('click', clickEvent)
@ -317,7 +326,8 @@ const clickEvent = (event: MouseEvent) => {
pointer.y = y pointer.y = y
raycaster.value.setFromCamera(new Vector2(pointer.x, pointer.y), camera.value); raycaster.value.setFromCamera(new Vector2(pointer.x, pointer.y), camera.value);
const intersects = raycaster.value.intersectObjects(seekAllByName(scene.value, '_clickable')); const clickable_objects = seekAllByName(scene.value, '_clickable');
const intersects = raycaster.value.intersectObjects(clickable_objects);
const names = intersects.map(el => (el.object.parent ? el.object.parent.name : el.object.name) ?? false).filter(Boolean) const names = intersects.map(el => (el.object.parent ? el.object.parent.name : el.object.name) ?? false).filter(Boolean)
if (names.length) { if (names.length) {
openSidebar(parseInt(names[0].replace('_clickable', ''))) openSidebar(parseInt(names[0].replace('_clickable', '')))