Dungeon Boss
This commit is contained in:
parent
0232ab5eac
commit
efa24ec4b3
|
|
@ -29,6 +29,10 @@ export class NNDungeon extends Phaser.Scene {
|
||||||
frameWidth: 100,
|
frameWidth: 100,
|
||||||
frameHeight: 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('gulchMusic', 'assets/music/gulch.mp3');
|
||||||
this.load.audio('gunShot', 'assets/sounds/gun-shot.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
|
// Load the map and tileset
|
||||||
const NNDungeonMap = this.make.tilemap({ key: 'NNDungeonMap' });
|
const NNDungeonMap = this.make.tilemap({ key: 'NNDungeonMap' });
|
||||||
const dungeonTiles = NNDungeonMap.addTilesetImage('dungeon-tiles', 'dungeon-tiles');
|
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)
|
const mainLayer = NNDungeonMap.createLayer('main', dungeonTiles, 0, 0)
|
||||||
.setCollisionByProperty({ collides: true });
|
.setCollisionByProperty({ collides: true });
|
||||||
const objectsLayer = NNDungeonMap.createLayer('objects', dungeonTiles, 0, 0)
|
const objectsLayer = NNDungeonMap.createLayer('objects', dungeonTiles, 0, 0)
|
||||||
.setCollisionByProperty({ collides: true });
|
.setCollisionByProperty({ collides: true });
|
||||||
const enemiesLayer = NNDungeonMap.getObjectLayer('enemies');
|
const enemiesLayer = NNDungeonMap.getObjectLayer('enemies');
|
||||||
|
const interactiveLayer = NNDungeonMap.getObjectLayer('interactive');
|
||||||
//const zoneLayer = gulchMap.getObjectLayer('zone');
|
//const zoneLayer = gulchMap.getObjectLayer('zone');
|
||||||
|
|
||||||
// Add a player
|
// Add a player
|
||||||
this.player = new Player(this, 2400, 3450);
|
this.player = new Player(this, 2400, 3450);
|
||||||
|
//this.player = new Player(this, 3550, 350);
|
||||||
this.player.healthBars(true, 1, 3);
|
this.player.healthBars(true, 1, 3);
|
||||||
|
|
||||||
// zoneLayer.objects.forEach(object => {
|
// 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
|
// Add Enemies
|
||||||
this.enemies = this.physics.add.group({
|
this.enemies = this.physics.add.group({
|
||||||
classType: NNBoy,
|
classType: NNBoy,
|
||||||
runChildUpdate: true
|
runChildUpdate: true
|
||||||
});
|
});
|
||||||
enemiesLayer.objects.forEach(object => {
|
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) {
|
if (object.properties) {
|
||||||
object.properties.forEach(prop => {
|
object.properties.forEach(prop => {
|
||||||
if (prop.name === 'patrolX') {
|
if (prop.name === 'patrolX') {
|
||||||
|
|
@ -83,9 +104,9 @@ export class NNDungeon extends Phaser.Scene {
|
||||||
if (prop.name === 'patrolY') {
|
if (prop.name === 'patrolY') {
|
||||||
let to = object.y + prop.value;
|
let to = object.y + prop.value;
|
||||||
if (to < object.y) {
|
if (to < object.y) {
|
||||||
a99Boy.setPatrolY(to, object.y);
|
a99Boy.setPatrolY(to-100, object.y-100);
|
||||||
} else {
|
} else {
|
||||||
a99Boy.setPatrolY(object.y, to);
|
a99Boy.setPatrolY(object.y-100, to-100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (prop.name === 'fire') {
|
if (prop.name === 'fire') {
|
||||||
|
|
@ -102,6 +123,12 @@ export class NNDungeon extends Phaser.Scene {
|
||||||
a99Boy.bottleReload = 2000;
|
a99Boy.bottleReload = 2000;
|
||||||
a99Boy.bottleReloadVariance = 500;
|
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.player, objectsLayer);
|
||||||
this.physics.add.collider(this.enemies, mainLayer);
|
this.physics.add.collider(this.enemies, mainLayer);
|
||||||
this.physics.add.collider(this.enemies, objectsLayer);
|
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) => {
|
this.physics.add.collider(this.player, this.enemies, (player, enemy) => {
|
||||||
player.takeDamage();
|
player.takeDamage();
|
||||||
});
|
});
|
||||||
|
|
@ -126,6 +154,27 @@ export class NNDungeon extends Phaser.Scene {
|
||||||
// console.log('Hit');
|
// 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
|
// Collision between bullets and enemies
|
||||||
this.physics.add.collider(this.bullets, this.enemies, (bullet, enemy) => {
|
this.physics.add.collider(this.bullets, this.enemies, (bullet, enemy) => {
|
||||||
// Handle collision here (e.g., damage the enemy or destroy the bullet)
|
// Handle collision here (e.g., damage the enemy or destroy the bullet)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue