import * as PIXI from 'pixi.js';
|
|
|
export default class Player {
|
|
constructor(dom, themeMode) {
|
this.themeMode = themeMode;
|
|
this.app = generateApp(dom, themeMode);
|
dom.appendChild(this.app.view);
|
|
globalThis.__PIXI_APP__ = this.app;
|
|
this.mapContainer = generateMapContainer('mapContainer');
|
|
const bunny = PIXI.Sprite.from('https://pixijs.com/assets/bunny.png');
|
bunny.anchor.set(0.5);
|
bunny.x = this.app.screen.width / 2;
|
bunny.y = this.app.screen.height / 2;
|
this.app.stage.addChild(bunny);
|
this.app.ticker.add((delta) => {
|
bunny.rotation += 0.1 * delta;
|
});
|
}
|
|
resize(width, height) {
|
console.log(width, height);
|
this.app.renderer.resize(width, height);
|
this.mapContainer.children.forEach((child) => {
|
child.x = width / 2;
|
child.y = height / 2;
|
});
|
}
|
|
destroy() {
|
this.app.destroy(true, { children: true });
|
}
|
|
}
|
|
const generateApp = (dom, themeMode) => {
|
const app = new PIXI.Application({
|
background: themeMode === 'dark' ? '#2f3542' : '#f1f2f6',
|
antialias: true,
|
// resizeTo: dom,
|
})
|
app.stage.eventMode = 'static';
|
app.stage.hitArea = app.screen;
|
app.view.addEventListener('contextmenu', (event) => {
|
event.preventDefault();
|
});
|
|
app.view.style.display = 'block';
|
app.view.style.margin = '0';
|
app.view.style.padding = '0';
|
app.view.style.border = 'none';
|
|
return app;
|
}
|
|
const generateMapContainer = (name) => {
|
const mapContainer = new PIXI.Container();
|
mapContainer.sortableChildren = true;
|
mapContainer.name = name;
|
mapContainer.data = {};
|
return mapContainer;
|
}
|