ActualCanvas.vue 3,5 КБ
Newer Older
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
1
<template>
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
2
  <div id="phaser-container" style="min-height: 100vh"></div>
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
3
4
5
</template>

<script lang="ts">
avathar's avatar
avathar включено в состав коммита
6
7
8
import 'phaser';
// import 'phaser3-rex-plugins/templates/ui/ui-plugin';
// import 'phaser3-rex-plugins/templates/ui/ui-components';
avathar's avatar
avathar включено в состав коммита
9
import CreateScrollablePanel from './CreateScrollablePanel';
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
10
11
12
import { useKanvasoStore } from 'src/stores/kanvaso';
import { mapActions, mapState } from 'pinia';
import { objekto } from './mock';
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
13
14
import PreloadScene from './PreloadScene';
import BootScene from './BootScene';
avathar's avatar
avathar включено в состав коммита
15
16
17
18
19
import { KanvasojKanvaso, TreeNode } from 'src/types/stores/kanvaso';

declare const window: {
  objekto: TreeNode;
} & Window;
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
20

Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
21
class EndlessCanvas extends Phaser.Scene {
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
22
  rexUI: any;
avathar's avatar
avathar включено в состав коммита
23
24
  constructor() {
    super({
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
25
      key: 'endless-canvas',
avathar's avatar
avathar включено в состав коммита
26
27
    });
  }
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
28

avathar's avatar
avathar включено в состав коммита
29
30
31
32
33
34
35
  preload() {
    this.load.scenePlugin(
      'rexuiplugin',
      'rexuiplugin.min.js',
      'rexUI',
      'rexUI',
    );
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
36
    this.load.image('icon', 'phaser/stretching_icon.png');
avathar's avatar
avathar включено в состав коммита
37
  }
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
38

avathar's avatar
avathar включено в состав коммита
39
  create(): void {
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
40
    this.cameras.main.setBackgroundColor('#abcdef');
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
41

avathar's avatar
avathar включено в состав коммита
42
43
44
45
46
47
    if (window.objekto) {
      const topPanel = CreateScrollablePanel(this, window.objekto)
        .setPosition(400, 300)
        .layout();
      // .drawBounds(this.add.graphics(), 0xff0000)}
    }
avathar's avatar
avathar включено в состав коммита
48
  }
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
49
50
51
}

const config: Phaser.Types.Core.GameConfig = {
avathar's avatar
avathar включено в состав коммита
52
53
  type: Phaser.AUTO,
  parent: 'phaser-container',
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
54
55
  width: window.innerWidth - 205,
  height: window.innerHeight,
avathar's avatar
avathar включено в состав коммита
56
57
58
59
  scale: {
    mode: Phaser.Scale.FIT,
    autoCenter: Phaser.Scale.CENTER_BOTH,
  },
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
60
  scene: EndlessCanvas,
avathar's avatar
avathar включено в состав коммита
61
62
63
64
  plugins: {
    // scene: [
    //   {
    //     key: 'rexUI',
avathar's avatar
avathar включено в состав коммита
65
66
    //     //@ts-ignore
    //     plugin: RexPlugins,
avathar's avatar
avathar включено в состав коммита
67
68
69
70
71
    //     mapping: 'rexUI',
    //   },
    //   // ...
    // ],
  },
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
72
73
};

Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
74
75
export default {
  name: 'YourComponentName',
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
  data() {
    return {
      wsSubscribe: null,
    };
  },
  computed: {
    ...mapState(useKanvasoStore, ['getTree']),
    ...mapState(useKanvasoStore, {
      project: 'getKanvaso',
      kanvasoTree: 'getTree',
    }),
    // ...mapState(useCurrentUserStore, { userId: 'getUserId' }),

    currentProject() {
      return this.project ? this.project[0]?.node : null;
    },
    projectUuid() {
      return this.$route?.params?.uuid || '';
    },
  },
  watch: {
    getTree(val) {
      window.objekto = val;
    },
  },
  methods: {
    ...mapActions(useKanvasoStore, [
      'onGetKanvasoFull',
      'onEditKanvasoObjekto',
      'onEditKanvaso',
      'onEditKanvasoLigilo',
      'onGetKanvasoObjekto',
      'onKanvasoSubscribe',
    ]),
  },
  async mounted() {
avathar's avatar
avathar включено в состав коммита
112
113
114
115
116
117
    interface KanvasojKanvasoResult {
      data?: {
        kanvasojKanvaso?: KanvasojKanvaso;
      };
    }

Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
118
    await this.onGetKanvasoFull({ uuid: this.projectUuid })
avathar's avatar
avathar включено в состав коммита
119
120
121
      .then((result: KanvasojKanvasoResult) => {
        if (!result.data.kanvasojKanvaso.edges.length) {
          throw new Error(result.toString());
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
122
123
124
        }
        this.onKanvasoSubscribe({
          kanvasoj: [this.currentProject.objId],
avathar's avatar
avathar включено в состав коммита
125
        }).then((data: any) => {
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
126
127
128
          this.wsSubscribe = data;
        });
      })
avathar's avatar
avathar включено в состав коммита
129
      .catch((err: any) => {
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
130
131
132
        console.log('error get kanvaso full :>> ', err);
        this.$router.replace({ name: 'projects' });
      });
avathar's avatar
avathar включено в состав коммита
133
    await this.onGetKanvasoObjekto({ kanvaso_Uuid: this.projectUuid });
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
134
135
136
137
138
139

    const resizeHandler = () => {
      game.scale.resize(window.innerWidth, window.innerHeight);
    };

    window.addEventListener('resize', resizeHandler);
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
140
    const game = new Phaser.Game(config);
avathar's avatar
avathar включено в состав коммита
141
  },
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
142
143
  beforeUnmount() {
    this.wsSubscribe.unsubscribe();
avathar's avatar
avathar включено в состав коммита
144
    delete window.objekto;
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
145
  },
avathar's avatar
avathar включено в состав коммита
146
};
Medvedev Anton's avatar
Medvedev Anton включено в состав коммита
147
</script>