Omnibus's picture
Upload 131 files
4ee4376
import Phaser from 'phaser';
import * as CONST from '../constants';
export default class viewport {
constructor(options) {
this.scene = options.scene;
this.camera = this.scene.cameras.main;
this.camera.name = CONST.CAMERA_NAME;
this.worldView = this.camera.worldView;
this.objectsRendered = 0;
this.viewportPaddingMultiplier = 1.5;
this.worldPoint = {
x: 0,
y: 0
};
let keys = this.scene.input.keyboard.addKeys({
'up': Phaser.Input.Keyboard.KeyCodes.W,
'down': Phaser.Input.Keyboard.KeyCodes.S,
'left': Phaser.Input.Keyboard.KeyCodes.A,
'right': Phaser.Input.Keyboard.KeyCodes.D,
'zoomIn': Phaser.Input.Keyboard.KeyCodes.Q,
'zoomOut': Phaser.Input.Keyboard.KeyCodes.E,
});
let controlConfig = {
camera: this.camera,
up: keys.up,
down: keys.down,
left: keys.left,
right: keys.right,
zoomIn: keys.zoomIn,
zoomOut: keys.zoomOut,
acceleration: 0.04,
drag: 0.0005,
maxSpeed: 1
};
this.controls = new Phaser.Cameras.Controls.SmoothedKeyControl(controlConfig);
this.camera.scrollX = -1531;
this.camera.scrollY = 140;
this.camera.zoom = 1;
}
onPointerMove (pointer) {
let { x, y } = this.camera.getWorldPoint(pointer.x, pointer.y);
this.worldPoint.x = x;
this.worldPoint.y = y;
}
update (delta) {
this.controls.update(delta);
if (this.controls._speedX !== 0 || this.controls._speedY !== 0 || this.controls._zoom !== 0)
this.cullObjects();
}
cullObjects () {
let cells = this.scene.city.map.cells;
let view = Phaser.Geom.Rectangle.Clone(this.worldView);
let cx = view.centerX;
let cy = view.centerY;
Phaser.Geom.Rectangle.Scale(view, this.viewportPaddingMultiplier);
Phaser.Geom.Rectangle.CenterOn(view, cx, cy);
for (let x = 0; x < CONST.MAP_SIZE; x++)
for (let y = 0; y < CONST.MAP_SIZE; y++)
if (Phaser.Geom.Rectangle.Contains(view, cells[x][y].position.center.x, cells[x][y].position.center.y))
cells[x][y].show();
else
cells[x][y].hide();
this.objectsRendered = 0;
this.scene.children.list.forEach((gameObject) => {
if (gameObject.visible) this.objectsRendered++;
});
}
}