108 lines
3.6 KiB
JavaScript
108 lines
3.6 KiB
JavaScript
import { WaveManager } from '../support/waveManager.js';
|
|
import { TowerManager } from '../support/towerManager.js';
|
|
|
|
export class Level extends Phaser.Scene {
|
|
constructor() {
|
|
super({ key: 'Level' });
|
|
}
|
|
|
|
init(data) {
|
|
|
|
}
|
|
|
|
preload() {
|
|
this.load.tilemapTiledJSON('level1', 'assets/level1.json');
|
|
this.load.image('terrain', 'assets/terrain.png');
|
|
this.load.spritesheet('basic-enemies', 'assets/basic-enemies.png', {
|
|
frameWidth: 50,
|
|
frameHeight: 50
|
|
});
|
|
this.load.spritesheet('towers', 'assets/towers.png', {
|
|
frameHeight: 150,
|
|
frameWidth: 150
|
|
});
|
|
}
|
|
|
|
create() {
|
|
this.levelMap = this.make.tilemap({ key: 'level1' });
|
|
const terrainTiles = this.levelMap.addTilesetImage('terrain', 'terrain');
|
|
this.mainLayer = this.levelMap.createLayer('main', terrainTiles)
|
|
.setCollisionByProperty({ collides: true });
|
|
this.platformsLayer = this.levelMap.createLayer('platforms', terrainTiles);
|
|
|
|
// Add camera zoom functionality
|
|
this.cameras.main.setBounds(0, 0, 2000, 2000);
|
|
this.addControls();
|
|
|
|
this.waveManager = new WaveManager(this, 1, 1);
|
|
this.towerManager = new TowerManager(this);
|
|
|
|
this.scene.launch('UIScene');
|
|
this.UIScene = this.scene.get('UIScene');
|
|
|
|
this.enemies = this.physics.add.group();
|
|
this.towers = this.physics.add.group();
|
|
|
|
this.physics.add.collider(this.enemies, this.mainLayer);
|
|
this.physics.add.collider(this.enemies, this.platformsLayer);
|
|
}
|
|
|
|
gridToLocation(num, offset = 0) {
|
|
return num * 200 + 100 + offset;
|
|
}
|
|
|
|
update(time, delta) {
|
|
this.waveManager.update(time, delta);
|
|
this.towerManager.update(time, delta);
|
|
}
|
|
|
|
addControls() {
|
|
// this.input.on('wheel', (pointer, gameObjects, deltaX, deltaY) => {
|
|
// const zoomSpeed = 0.1;
|
|
// if (deltaY < 0) {
|
|
// // Zoom in
|
|
// this.cameras.main.zoom += zoomSpeed;
|
|
// } else if (deltaY > 0) {
|
|
// // Zoom out
|
|
// this.cameras.main.zoom -= zoomSpeed;
|
|
// }
|
|
|
|
// // Limit zoom range to prevent extreme zoom levels
|
|
// this.cameras.main.zoom = Phaser.Math.Clamp(this.cameras.main.zoom, 0.5, 2);
|
|
|
|
// // Zoom toward mouse position
|
|
// const worldPoint = this.input.activePointer.positionToCamera(this.cameras.main);
|
|
// this.cameras.main.centerOn(worldPoint.x, worldPoint.y);
|
|
// });
|
|
|
|
// Add camera panning functionality
|
|
this.input.on('pointerdown', (pointer) => {
|
|
if (pointer.button === 0) { // Left mouse button
|
|
this.isPanning = true;
|
|
this.panStartX = pointer.x;
|
|
this.panStartY = pointer.y;
|
|
}
|
|
});
|
|
|
|
this.input.on('pointermove', (pointer) => {
|
|
if (this.isPanning && pointer.isDown) {
|
|
const dx = pointer.x - this.panStartX;
|
|
const dy = pointer.y - this.panStartY;
|
|
|
|
// Pan the camera
|
|
this.cameras.main.scrollX -= dx;
|
|
this.cameras.main.scrollY -= dy;
|
|
|
|
// Update start position for next move
|
|
this.panStartX = pointer.x;
|
|
this.panStartY = pointer.y;
|
|
}
|
|
});
|
|
|
|
this.input.on('pointerup', (pointer) => {
|
|
if (pointer.button === 0) { // Left mouse button
|
|
this.isPanning = false;
|
|
}
|
|
});
|
|
}
|
|
} |