scene.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { defineStore } from 'pinia';
  2. import { getApp } from '/@/hooks/userApp';
  3. export interface FloorsType {
  4. id: string,
  5. subgroup?: string,
  6. name: string
  7. segment?: any[]
  8. tagging?: any[]
  9. ['vertex-xy']?: any[]
  10. }
  11. interface SceneState {
  12. tags: any[],
  13. floors: FloorsType[],
  14. metadata: KankanMetaDataType
  15. }
  16. export const useSceneStore = defineStore({
  17. id: 'scene',
  18. state: (): SceneState => ({
  19. tags: [],
  20. floors: [],
  21. metadata: {} as KankanMetaDataType
  22. }),
  23. getters: {
  24. musicURL(): Nullable<string> {
  25. const musicURl = this.metadata.music
  26. if (musicURl) {
  27. if (/^0\d$/.test(musicURl)) {
  28. return (window as any).resource.getStaticURL(`static/music/${musicURl}.mp3`)
  29. } else {
  30. const app = getApp();
  31. return app.resource.getUserResourceURL(this.metadata.musicFile.replace(/(.+)\.(.+)/, 'music-user.$2'))
  32. }
  33. }
  34. return null
  35. },
  36. loadingLogoFile(): Nullable<string> {
  37. if (this.metadata.loadingLogo == 'user') {
  38. const app = getApp();
  39. return app.resource.getUserResourceURL(this.metadata.loadingLogoFile)
  40. }
  41. return null
  42. }
  43. },
  44. actions: {
  45. load(metadata: KankanMetaDataType): void {
  46. this.metadata = metadata
  47. },
  48. loadFloorData(floors: FloorsType[]) {
  49. if (floors?.length) {
  50. this.floors = floors.map(item => {
  51. return { id: item.subgroup, name: item.name }
  52. }) as FloorsType[]
  53. }
  54. },
  55. }
  56. })