added item chests, audio and deployment
Signed-off-by: Pascal Syma <pascal@syma.dev>
This commit is contained in:
@@ -49,8 +49,13 @@ export default class GUI extends Phaser.Scene {
|
||||
|
||||
new Player(this, s, 'char' + charKey).play('idle' + charKey, true)
|
||||
.setInteractive()
|
||||
.on('pointerover', () => {
|
||||
this.sound.play('menu_hover', {volume: 0.3});
|
||||
})
|
||||
.on('pointerdown', () => {
|
||||
|
||||
this.sound.play('menu_click', {volume: 0.5});
|
||||
|
||||
if (this.textures.exists('char'))
|
||||
this.textures.removeKey('char');
|
||||
|
||||
|
||||
+73
-13
@@ -5,13 +5,13 @@
|
||||
|
||||
import Player from "../entities/Player";
|
||||
import Bat from "../entities/Enemys/Bat";
|
||||
import Item from "../entities/Item";
|
||||
import Storage from "../Storage";
|
||||
import Win from "../entities/Win";
|
||||
import TextElement from "../TextElement";
|
||||
import DamageEntity from "../entities/Enemys/DamageEntity";
|
||||
import Zombie from "../entities/Enemys/Zombie";
|
||||
import Skeleton from "../entities/Enemys/Skeleton";
|
||||
import Chest from "../entities/Chest";
|
||||
|
||||
export default class Game extends Phaser.Scene {
|
||||
|
||||
@@ -24,7 +24,7 @@ export default class Game extends Phaser.Scene {
|
||||
default: 'arcade',
|
||||
arcade: {
|
||||
gravity: {y: 300},
|
||||
debug: true
|
||||
// debug: true
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -196,6 +196,40 @@ export default class Game extends Phaser.Scene {
|
||||
frameRate: 15
|
||||
});
|
||||
|
||||
this.anims.create({
|
||||
key: 'chest_open',
|
||||
frames: this.anims.generateFrameNumbers('chest', {start: 0, end: 3}),
|
||||
frameRate: 10
|
||||
});
|
||||
|
||||
this.anims.create({
|
||||
key: 'item_heal',
|
||||
frames: this.anims.generateFrameNumbers('heal', {start: 0, end: 7}),
|
||||
frameRate: 10,
|
||||
repeat: -1
|
||||
});
|
||||
|
||||
this.anims.create({
|
||||
key: 'item_slow',
|
||||
frames: this.anims.generateFrameNumbers('slow', {start: 0, end: 10}),
|
||||
frameRate: 10,
|
||||
repeat: -1
|
||||
});
|
||||
|
||||
this.anims.create({
|
||||
key: 'item_speed',
|
||||
frames: this.anims.generateFrameNumbers('speed', {start: 0, end: 7}),
|
||||
frameRate: 10,
|
||||
repeat: -1
|
||||
});
|
||||
|
||||
this.anims.create({
|
||||
key: 'item_storm',
|
||||
frames: this.anims.generateFrameNumbers('storm', {start: 0, end: 11}),
|
||||
frameRate: 10,
|
||||
repeat: -1
|
||||
});
|
||||
|
||||
|
||||
const mapKey = "map";
|
||||
const mapTilesetKey = "tiles";
|
||||
@@ -216,7 +250,8 @@ export default class Game extends Phaser.Scene {
|
||||
const spawnPoint = map.findObject("Player/Enemys", obj => obj.name === "player");
|
||||
|
||||
this.enemys = this.add.group();
|
||||
this.items = this.add.group();
|
||||
this.environment = this.add.group();
|
||||
this.interactables = this.add.group();
|
||||
|
||||
map.objects[0].objects.filter(obj => obj.name === "bat").forEach(s => {
|
||||
let bat = new Bat(this, s);
|
||||
@@ -232,12 +267,12 @@ export default class Game extends Phaser.Scene {
|
||||
});
|
||||
|
||||
map.objects[0].objects.filter(obj => obj.type === "dmg").forEach(s => {
|
||||
this.enemys.add(new DamageEntity(this, s))
|
||||
this.environment.add(new DamageEntity(this, s))
|
||||
});
|
||||
|
||||
map.objects[0].objects.filter(obj => obj.name === "item").forEach(s => {
|
||||
let item = new Item(this, s);
|
||||
this.items.add(item)
|
||||
map.objects[0].objects.filter(obj => obj.name === "chest").forEach(s => {
|
||||
let chest = new Chest(this, s);
|
||||
this.interactables.add(chest)
|
||||
});
|
||||
|
||||
this.wins = this.add.group();
|
||||
@@ -283,8 +318,19 @@ export default class Game extends Phaser.Scene {
|
||||
this.player.hit(e.getData('dmg'));
|
||||
})
|
||||
|
||||
this.physics.add.overlap(this.player, this.wins, (p, w) => {
|
||||
console.log("win!");
|
||||
this.physics.add.overlap(this.player, this.enemys, (p, e) => {
|
||||
if (e.getData('active'))
|
||||
this.player.hit(e.getData('dmg'));
|
||||
})
|
||||
|
||||
this.physics.add.overlap(this.player, this.environment, (p, e) => {
|
||||
if (e.getData('active'))
|
||||
this.player.hit(e.getData('dmg'));
|
||||
})
|
||||
|
||||
this.physics.add.overlap(this.enemys, this.environment, (p, e) => {
|
||||
if (e.getData('active'))
|
||||
p.hit(e.getData('dmg'));
|
||||
})
|
||||
|
||||
let controls = Storage.get().controls;
|
||||
@@ -299,9 +345,9 @@ export default class Game extends Phaser.Scene {
|
||||
this.keyAction2 = this.input.keyboard.addKey(controls.use_right.bind);
|
||||
this.keyEsc = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.ESC);
|
||||
|
||||
this.physics.add.overlap(this.player, this.items, (p, i) => {
|
||||
if (this.keyPickup.isDown && i.canPickup()) {
|
||||
p.pickup(i);
|
||||
this.physics.add.overlap(this.player, this.interactables, (p, i) => {
|
||||
if (this.keyPickup.isDown && i.canInteract()) {
|
||||
p.interact(i);
|
||||
this.keyPickup.reset();
|
||||
}
|
||||
})
|
||||
@@ -311,12 +357,26 @@ export default class Game extends Phaser.Scene {
|
||||
console.log(s);
|
||||
new TextElement(this, s);
|
||||
});
|
||||
|
||||
this.hearts = [];
|
||||
for (let i = 0; i < this.player.getData('hp'); i++) {
|
||||
this.hearts.push(this.add.image(i * 16, 0, 'heart')
|
||||
.setScrollFactor(0, 0)
|
||||
.setOrigin(0, 0));
|
||||
}
|
||||
|
||||
this.music = this.sound.add('background_start', {volume: 0.5})
|
||||
.once('complete', () => {
|
||||
this.music = this.sound.add('background_loop', {loop: true, volume: 0.5});
|
||||
this.music.play();
|
||||
})
|
||||
this.music.play();
|
||||
}
|
||||
|
||||
update(time, delta) {
|
||||
if (this.keyEsc.isDown) {
|
||||
this.scene.pause();
|
||||
|
||||
this.music.pause();
|
||||
this.input.keyboard.keys.forEach(k => k.reset());
|
||||
this.scene.launch('GUI', {key: 'Pause'}).bringToTop('GUI');
|
||||
return;
|
||||
|
||||
+23
-1
@@ -21,6 +21,17 @@ import batDie from "../assets/BatDie.png";
|
||||
import item_01 from "../assets/items/itemshard_01.png";
|
||||
import item_02 from "../assets/items/itemshard_02.png";
|
||||
import item_03 from "../assets/items/itemshard_03.png";
|
||||
import heal from "../assets/items/heal.png";
|
||||
import slow from "../assets/items/slow.png";
|
||||
import speed from "../assets/items/speed.png";
|
||||
import storm from "../assets/items/storm.png";
|
||||
import heart from "../assets/heart.png";
|
||||
import chest from "../assets/chest.png";
|
||||
|
||||
import menu_click from "../assets/audio/menu_click.wav";
|
||||
import menu_hover from "../assets/audio/menu_hover.wav";
|
||||
import background_start from "../assets/audio/background_start.wav";
|
||||
import background_loop from "../assets/audio/background_loop.wav";
|
||||
|
||||
export default class Preload extends Phaser.Scene {
|
||||
|
||||
@@ -34,6 +45,7 @@ export default class Preload extends Phaser.Scene {
|
||||
this.load.image("item_01", item_01);
|
||||
this.load.image("item_02", item_02);
|
||||
this.load.image("item_03", item_03);
|
||||
this.load.image("heart", heart);
|
||||
this.load.spritesheet('charA', charA, {frameWidth: 79, frameHeight: 63, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('charB', charB, {frameWidth: 79, frameHeight: 63, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('charC', charC, {frameWidth: 79, frameHeight: 63, margin: 1, spacing: 2});
|
||||
@@ -44,11 +56,21 @@ export default class Preload extends Phaser.Scene {
|
||||
this.load.spritesheet('buttontiles', buttontiles, {frameWidth: 16, frameHeight: 16, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('batFly', batFly, {frameWidth: 48, frameHeight: 32/*, margin: 1, spacing: 2*/});
|
||||
this.load.spritesheet('batDie', batDie, {frameWidth: 48, frameHeight: 32/*, margin: 1, spacing: 2*/});
|
||||
this.load.spritesheet('chest', chest, {frameWidth: 32, frameHeight: 32, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('heal', heal, {frameWidth: 16, frameHeight: 16, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('storm', storm, {frameWidth: 16, frameHeight: 16, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('speed', speed, {frameWidth: 16, frameHeight: 16, margin: 1, spacing: 2});
|
||||
this.load.spritesheet('slow', slow, {frameWidth: 16, frameHeight: 16, margin: 1, spacing: 2});
|
||||
this.load.tilemapTiledJSON("map", map);
|
||||
this.load.tilemapTiledJSON("menu", menu);
|
||||
|
||||
this.load.atlas({key: 'skeleton', textureURL: skeletonSprite, atlasURL: skeletonAtlas});
|
||||
|
||||
this.load.audio('menu_click', menu_click);
|
||||
this.load.audio('menu_hover', menu_hover);
|
||||
this.load.audio('background_start', background_start);
|
||||
this.load.audio('background_loop', background_loop);
|
||||
|
||||
}
|
||||
|
||||
create() {
|
||||
@@ -113,4 +135,4 @@ export default class Preload extends Phaser.Scene {
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user