diff --git a/src/entities/portal.js b/src/entities/portal.js new file mode 100644 index 0000000..15acb31 --- /dev/null +++ b/src/entities/portal.js @@ -0,0 +1,54 @@ +var asdf = require("asdf-games"); +// eslint-disable-next-line no-unused-vars +const { Texture, TileSprite, entity } = asdf; + +var texture = new Texture("./res/tilemap.png"); + +class Portal extends TileSprite { + constructor(pos, player, type, action) { + super(texture, 32, 32); + this.pos = pos; + this.scale = { x: 1, y: 1 }; + this.player = player; + this.action = action; + + switch (type) { + case "Door": + this.frame = { x: 1, y: 7 }; + this.hitBox = { + x: 1, + y: 1, + w: 30, + h: 30 + }; + break; + case "Ladder": + this.frame = { x: 2, y: 7 }; + this.hitBox = { + x: 4, + y: 0, + w: 24, + h: 32 + }; + break; + case "Stairs": + this.frame = { x: 4, y: 7 }; + this.hitBox = { + x: 1, + y: 1, + w: 30, + h: 30 + }; + break; + } + } + + update(dt) { + super.update(dt); + if (entity.hit(this, this.player)) { + this.action(); + } + } +} + +module.exports = Portal; \ No newline at end of file diff --git a/src/levels/1-1.js b/src/levels/1-1.js index 69e05eb..421a80f 100644 --- a/src/levels/1-1.js +++ b/src/levels/1-1.js @@ -1,6 +1,6 @@ const tileSize = 32; -var level = { +let level = { tiles: [ 1, 2, 2, 2, 2, 6, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 6, 4, 21, 22, 23, 21, 7, 0, 4, 22, 23, 21, 22, 23, 21, 22, 23, 21, 22, 23, 21, 22, 23, 21, 22, 23, 21, 22, 23, 21, 7, @@ -27,9 +27,10 @@ var level = { y: 64 }, entities: [ - { type: "Mage", pos: { x: 8 * tileSize, y: 2 * tileSize }}, + { type: "Mage", pos: { x: 9 * tileSize, y: 2 * tileSize }}, { type: "Mage", pos: { x: 1 * tileSize, y: 8 * tileSize }}, - { type: "Chest", pos: { x: 4 * tileSize, y: 2 * tileSize }, action: (player) => { player.pos = {x:512,y:256}; } } + { type: "Chest", pos: { x: 4 * tileSize, y: 2 * tileSize }, action: (player) => { player.pos = {x:512,y:256}; } }, + { type: "Portal", pos: { x: 8 * tileSize, y: 2 * tileSize }, texture: "Ladder", action: (player) => { player.pos = {x:512,y:256}; }} ] }; diff --git a/src/levels/level.js b/src/levels/level.js index 5aaa1f8..ce799e7 100644 --- a/src/levels/level.js +++ b/src/levels/level.js @@ -8,9 +8,11 @@ const tileSize = 32; const Mage = require("../entities/mage.js"); const Chest = require("../entities/chest.js"); +const Portal = require("../entities/portal.js"); class Level extends TileMap { - constructor (level, keys, player) { + constructor (level, keys, player) { + console.log(level); // Convert id array to tile array var levelTiles = level.tiles.map(function(e) { @@ -29,18 +31,19 @@ class Level extends TileMap { // Handle Entities for (let index = 0; index < level.entities.length; index++) { - const e = level.entities[index]; - var entity; + let e = level.entities[index]; switch (e.type) { case "Mage": - entity = new Mage(e.pos, this.player, this); + e.entity = new Mage(e.pos, this.player, this); break; case "Chest": - entity = new Chest(e.pos, this.player, this.keys, () => { return e.action(this.player); }); + e.entity = new Chest(e.pos, this.player, this.keys, () => { return e.action(this.player); }); + break; + case "Portal": + e.entity = new Portal(e.pos, this.player, e.texture, () => { return e.action(this.player); }); break; } - console.log(e); - this.children.push(entity); + this.children.push(e.entity); } }