Dungeon Boss
This commit is contained in:
parent
0232ab5eac
commit
efa24ec4b3
|
|
@ -29,6 +29,10 @@ export class NNDungeon extends Phaser.Scene {
|
|||
frameWidth: 100,
|
||||
frameHeight: 100
|
||||
});
|
||||
this.load.spritesheet('99Dungeon-tiles', 'assets/dungeon-tiles.png', {
|
||||
frameWidth: 100,
|
||||
frameHeight: 100
|
||||
});
|
||||
|
||||
this.load.audio('gulchMusic', 'assets/music/gulch.mp3');
|
||||
this.load.audio('gunShot', 'assets/sounds/gun-shot.mp3');
|
||||
|
|
@ -44,16 +48,18 @@ export class NNDungeon extends Phaser.Scene {
|
|||
// Load the map and tileset
|
||||
const NNDungeonMap = this.make.tilemap({ key: 'NNDungeonMap' });
|
||||
const dungeonTiles = NNDungeonMap.addTilesetImage('dungeon-tiles', 'dungeon-tiles');
|
||||
//const NNTiles = NNDungeonMap.addTilesetImage('99boy-tiles', '99boy-tiles');
|
||||
const NNTiles = NNDungeonMap.addTilesetImage('99boy-tiles', '99boy-tiles');
|
||||
const mainLayer = NNDungeonMap.createLayer('main', dungeonTiles, 0, 0)
|
||||
.setCollisionByProperty({ collides: true });
|
||||
const objectsLayer = NNDungeonMap.createLayer('objects', dungeonTiles, 0, 0)
|
||||
.setCollisionByProperty({ collides: true });
|
||||
const enemiesLayer = NNDungeonMap.getObjectLayer('enemies');
|
||||
const interactiveLayer = NNDungeonMap.getObjectLayer('interactive');
|
||||
//const zoneLayer = gulchMap.getObjectLayer('zone');
|
||||
|
||||
// Add a player
|
||||
this.player = new Player(this, 2400, 3450);
|
||||
//this.player = new Player(this, 3550, 350);
|
||||
this.player.healthBars(true, 1, 3);
|
||||
|
||||
// zoneLayer.objects.forEach(object => {
|
||||
|
|
@ -63,13 +69,28 @@ export class NNDungeon extends Phaser.Scene {
|
|||
// }
|
||||
// });
|
||||
|
||||
// Add Interactive
|
||||
this.interactive = this.physics.add.group();
|
||||
interactiveLayer.objects.forEach(object => {
|
||||
if (object.gid) {
|
||||
let inter = this.interactive.create(object.x+50, object.y-50, '99Dungeon-tiles', object.gid-1);
|
||||
inter.properties = object.properties;
|
||||
} else {
|
||||
let inter = this.physics.add.existing(this.add.rectangle(object.x, object.y, object.width, object.height));
|
||||
this.interactive.add(inter);
|
||||
if (object.properties) {
|
||||
inter.properties = object.properties;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Add Enemies
|
||||
this.enemies = this.physics.add.group({
|
||||
classType: NNBoy,
|
||||
runChildUpdate: true
|
||||
});
|
||||
enemiesLayer.objects.forEach(object => {
|
||||
let a99Boy = this.enemies.create(object.x-50, object.y-50, '99boy-tiles', object.gid-101);
|
||||
let a99Boy = this.enemies.create(object.x-50, object.y-50, '99boy-tiles', object.gid-201);
|
||||
if (object.properties) {
|
||||
object.properties.forEach(prop => {
|
||||
if (prop.name === 'patrolX') {
|
||||
|
|
@ -83,9 +104,9 @@ export class NNDungeon extends Phaser.Scene {
|
|||
if (prop.name === 'patrolY') {
|
||||
let to = object.y + prop.value;
|
||||
if (to < object.y) {
|
||||
a99Boy.setPatrolY(to, object.y);
|
||||
a99Boy.setPatrolY(to-100, object.y-100);
|
||||
} else {
|
||||
a99Boy.setPatrolY(object.y, to);
|
||||
a99Boy.setPatrolY(object.y-100, to-100);
|
||||
}
|
||||
}
|
||||
if (prop.name === 'fire') {
|
||||
|
|
@ -102,6 +123,12 @@ export class NNDungeon extends Phaser.Scene {
|
|||
a99Boy.bottleReload = 2000;
|
||||
a99Boy.bottleReloadVariance = 500;
|
||||
}
|
||||
if (prop.name === 'NNBoss' && prop.value === true) {
|
||||
a99Boy.setScale(2.5);
|
||||
}
|
||||
if (prop.name === 'health') {
|
||||
a99Boy.health = prop.value;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -119,6 +146,7 @@ export class NNDungeon extends Phaser.Scene {
|
|||
this.physics.add.collider(this.player, objectsLayer);
|
||||
this.physics.add.collider(this.enemies, mainLayer);
|
||||
this.physics.add.collider(this.enemies, objectsLayer);
|
||||
this.physics.add.collider(this.player, this.interactive, touchInteractive);
|
||||
this.physics.add.collider(this.player, this.enemies, (player, enemy) => {
|
||||
player.takeDamage();
|
||||
});
|
||||
|
|
@ -126,6 +154,27 @@ export class NNDungeon extends Phaser.Scene {
|
|||
// console.log('Hit');
|
||||
// });
|
||||
|
||||
function touchInteractive(player, interactive) {
|
||||
interactive.properties.forEach(prop => {
|
||||
if (prop.name === 'key' && prop.value === true) {
|
||||
player.addItemToInventory('key');
|
||||
interactive.destroy();
|
||||
}
|
||||
if (prop.name === 'lock' && prop.value === true) {
|
||||
if (player.hasItem('key')) {
|
||||
player.removeItemFromInventory('key');
|
||||
let checkTiles = objectsLayer.getTilesWithin(interactive.x/100-5, interactive.y/100-5, 15, 15);
|
||||
checkTiles.forEach(frameTile => {
|
||||
if (frameTile.properties.lockedDoor === true) {
|
||||
objectsLayer.removeTileAt(frameTile.x, frameTile.y);
|
||||
}
|
||||
interactive.destroy();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Collision between bullets and enemies
|
||||
this.physics.add.collider(this.bullets, this.enemies, (bullet, enemy) => {
|
||||
// Handle collision here (e.g., damage the enemy or destroy the bullet)
|
||||
|
|
|
|||
Loading…
Reference in New Issue