loading count
This commit is contained in:
parent
2a6862a78c
commit
3a8d722c99
|
@ -15,6 +15,7 @@ import { IMAGE_URL, PROMOBG, SERVER_URL, } from '../../constants'
|
||||||
import { usePromoSidebar } from '../../stores/promo_sidebar';
|
import { usePromoSidebar } from '../../stores/promo_sidebar';
|
||||||
import { usePromoScene } from '../../stores/promo_scene';
|
import { usePromoScene } from '../../stores/promo_scene';
|
||||||
import { useClickable } from '../../stores/clickable';
|
import { useClickable } from '../../stores/clickable';
|
||||||
|
import { useLoading } from '../../stores/loading';
|
||||||
import { mobileAndTabletCheck } from '../../helpers';
|
import { mobileAndTabletCheck } from '../../helpers';
|
||||||
|
|
||||||
const props = defineProps(['source', 'loaded', 'loaded_pan'])
|
const props = defineProps(['source', 'loaded', 'loaded_pan'])
|
||||||
|
@ -27,6 +28,7 @@ const envVars = reactive({}) as EnvVars
|
||||||
const sidebar = usePromoSidebar();
|
const sidebar = usePromoSidebar();
|
||||||
const sidebar_scene = usePromoScene();
|
const sidebar_scene = usePromoScene();
|
||||||
const clickable = useClickable()
|
const clickable = useClickable()
|
||||||
|
const loading_store = useLoading()
|
||||||
|
|
||||||
const { controls, camera, scene, raycaster, renderer } = useTresContext()
|
const { controls, camera, scene, raycaster, renderer } = useTresContext()
|
||||||
const { pause, resume } = useLoop()
|
const { pause, resume } = useLoop()
|
||||||
|
@ -57,6 +59,7 @@ setInterval(() => {
|
||||||
const loadModels = async () => {
|
const loadModels = async () => {
|
||||||
const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`)
|
const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`)
|
||||||
const raw_data = await res.json() as scene3D
|
const raw_data = await res.json() as scene3D
|
||||||
|
loading_store.status = 'other'
|
||||||
|
|
||||||
envVars.focus = raw_data.max_distance * 0.5
|
envVars.focus = raw_data.max_distance * 0.5
|
||||||
if (raw_data.env) {
|
if (raw_data.env) {
|
||||||
|
@ -70,7 +73,7 @@ const loadModels = async () => {
|
||||||
envVars.clear_color = PROMOBG
|
envVars.clear_color = PROMOBG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loading_store.status = 'env'
|
||||||
const data = raw_data.elements
|
const data = raw_data.elements
|
||||||
if (!controls.value) return;
|
if (!controls.value) return;
|
||||||
|
|
||||||
|
@ -89,7 +92,9 @@ const loadModels = async () => {
|
||||||
const sidebar_items = [] as PromoScene[]
|
const sidebar_items = [] as PromoScene[]
|
||||||
clickable_items.value = []
|
clickable_items.value = []
|
||||||
|
|
||||||
|
loading_store.status = 'model'
|
||||||
for (let index = 0; index < data.length; index++) {
|
for (let index = 0; index < data.length; index++) {
|
||||||
|
loading_store.count = index
|
||||||
const element = data[index];
|
const element = data[index];
|
||||||
const item = {} as model3DType
|
const item = {} as model3DType
|
||||||
|
|
||||||
|
@ -132,6 +137,7 @@ const loadModels = async () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!models.value.find(el => el.name == 'ground')) {
|
if (!models.value.find(el => el.name == 'ground')) {
|
||||||
|
loading_store.status = 'ground'
|
||||||
const mesh = {
|
const mesh = {
|
||||||
color: c.offsetHSL(0, 0.5, -0.33),
|
color: c.offsetHSL(0, 0.5, -0.33),
|
||||||
displacementScale: envVars.focus * 0.33,
|
displacementScale: envVars.focus * 0.33,
|
||||||
|
@ -157,6 +163,7 @@ const loadModels = async () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let index = 0; index < clickable.list.length; index++) {
|
for (let index = 0; index < clickable.list.length; index++) {
|
||||||
|
loading_store.status = 'clickable'
|
||||||
const element = clickable.list[index];
|
const element = clickable.list[index];
|
||||||
const find_element = seekByName(scene.value, element.object_name)
|
const find_element = seekByName(scene.value, element.object_name)
|
||||||
if (!find_element) continue
|
if (!find_element) continue
|
||||||
|
@ -187,6 +194,7 @@ const loadModels = async () => {
|
||||||
sidebar_scene.name = raw_data.name;
|
sidebar_scene.name = raw_data.name;
|
||||||
sidebar_scene.setData(sidebar_items)
|
sidebar_scene.setData(sidebar_items)
|
||||||
|
|
||||||
|
loading_store.status = 'ищчуы'
|
||||||
const box = new Box3();
|
const box = new Box3();
|
||||||
models.value.forEach(element => {
|
models.value.forEach(element => {
|
||||||
if (element.name !== 'ground') {
|
if (element.name !== 'ground') {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import type { Ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
import { Vector3 } from 'three';
|
import { Vector3 } from 'three';
|
||||||
import { TresCanvas } from '@tresjs/core';
|
import { TresCanvas, useLoader } from '@tresjs/core';
|
||||||
import { OrbitControls, Stats } from '@tresjs/cientos'
|
import { OrbitControls, Stats } from '@tresjs/cientos'
|
||||||
import '@tresjs/leches/styles'
|
import '@tresjs/leches/styles'
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import LoadModels from './load_models.vue'
|
||||||
import Sidebar from './sidebar.vue'
|
import Sidebar from './sidebar.vue'
|
||||||
import { usePromoSidebar } from '../../stores/promo_sidebar';
|
import { usePromoSidebar } from '../../stores/promo_sidebar';
|
||||||
import { PROMOBG } from '../../constants';
|
import { PROMOBG } from '../../constants';
|
||||||
|
import { useLoading } from '../../stores/loading';
|
||||||
|
|
||||||
const minPan = ref(new Vector3(-2, -2, -2))
|
const minPan = ref(new Vector3(-2, -2, -2))
|
||||||
const maxPan = ref(new Vector3(2, 2, 2))
|
const maxPan = ref(new Vector3(2, 2, 2))
|
||||||
|
@ -29,6 +30,7 @@ const loadedPan = (max: any, min: any) => {
|
||||||
minPan.value = min
|
minPan.value = min
|
||||||
}
|
}
|
||||||
const sidebar = usePromoSidebar()
|
const sidebar = usePromoSidebar()
|
||||||
|
const loading_store = useLoading()
|
||||||
|
|
||||||
const camera = ref()
|
const camera = ref()
|
||||||
const cameraPosition = ref([1, 1, 1]) as unknown as Ref<Vector3>
|
const cameraPosition = ref([1, 1, 1]) as unknown as Ref<Vector3>
|
||||||
|
@ -66,10 +68,14 @@ const sidebarFunc = () => {
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
|
<div v-if="models_loading"
|
||||||
|
style="position: absolute; z-index: 10; font-size: 6rem; top: 50%; left: 50%;">
|
||||||
|
{{loading_store.getStatus()}}
|
||||||
|
</div>
|
||||||
<div :class="[{ 'loading': models_loading }, 'canvas-wrapper']">
|
<div :class="[{ 'loading': models_loading }, 'canvas-wrapper']">
|
||||||
<TresCanvas window-size :alpha="false" power-preference="high-performance" :clear-color="PROMOBG"
|
<TresCanvas window-size :alpha="false" power-preference="high-performance" :clear-color="PROMOBG"
|
||||||
:shadows="false">
|
:shadows="false">
|
||||||
<Stats v-if=false />
|
<Stats />
|
||||||
<TresPerspectiveCamera :position="cameraPosition" ref="camera" />
|
<TresPerspectiveCamera :position="cameraPosition" ref="camera" />
|
||||||
<OrbitControls v-bind="controlsState" @change="onChange" make-default />
|
<OrbitControls v-bind="controlsState" @change="onChange" make-default />
|
||||||
<Suspense>
|
<Suspense>
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
import { defineStore } from 'pinia'
|
||||||
|
interface state {
|
||||||
|
loading: boolean,
|
||||||
|
status: string,
|
||||||
|
count?: number
|
||||||
|
}
|
||||||
|
const lines = {
|
||||||
|
model: "Загружаем модель",
|
||||||
|
ground: "Готовим землю",
|
||||||
|
env: "Настраиваем окружение",
|
||||||
|
clickable: "Расставляем кликабельные элементы",
|
||||||
|
boxes: "Считаем коробки",
|
||||||
|
other: "Делаем еще что-то важное",
|
||||||
|
}
|
||||||
|
export const useLoading = defineStore('loading', {
|
||||||
|
state: () => {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
status: ""
|
||||||
|
} as state
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
getStatus() {
|
||||||
|
if (this.status == 'model') {
|
||||||
|
return lines[this.status] + ' ' + this.count
|
||||||
|
}
|
||||||
|
return lines[this.status]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in New Issue