From 9aa1495dd00ccd2dd9f7c2c758da069ce4754dd6 Mon Sep 17 00:00:00 2001 From: Renge Date: Sun, 10 Apr 2022 19:46:13 -0400 Subject: [PATCH 1/2] feat: implemented getPlayer and getEnemies, not tested --- .../Tools/RandomMapGenerator.ts | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/shattered_sword/Tools/RandomMapGenerator.ts b/src/shattered_sword/Tools/RandomMapGenerator.ts index 81f3106..4deefbb 100644 --- a/src/shattered_sword/Tools/RandomMapGenerator.ts +++ b/src/shattered_sword/Tools/RandomMapGenerator.ts @@ -23,6 +23,8 @@ export default class RandomMapGenerator { private minRoom: number; private roomPlaced: number; private exitFacing: Facing; + private enemies: Array; + private player: Vec2; constructor(JSONFilePath: string, seed: any) { let xhr = new XMLHttpRequest(); @@ -40,6 +42,8 @@ export default class RandomMapGenerator { this.map = new TiledTilemapData(); this.rooms = new Array(); + this.enemies = new Array(); + this.player = new Vec2(); let gen = require('random-seed'); this.gen = new gen(seed); this.hasExit = false; @@ -104,6 +108,14 @@ export default class RandomMapGenerator { return this.map; } + getPlayer(): Vec2 { + return this.player; + } + + getEnemies(): Array { + return this.enemies; + } + private putNextRoom(position: Vec2, facing: Facing): boolean { switch (facing) { case Facing.LEFT: @@ -245,7 +257,16 @@ export default class RandomMapGenerator { this.map.layers[0].data[(room.topLeft.y + i) * width + room.topLeft.x + j] = room.bottomLayer[i * roomWidth + j]; this.map.layers[1].data[(room.topLeft.y + i) * width + room.topLeft.x + j] = room.topLayer[i * roomWidth + j]; } + if (room.enemies) + for (let index = 0; index < room.enemies.length; index++) { + const enemy = room.enemies[index]; + enemy.position.x -= this.minX; + enemy.position.y -= this.minY; + this.enemies.push(enemy); + } } + this.player.x -= this.minX; + this.player.y -= this.minY; } private isValidRoom(topLeft: Vec2, bottomRight: Vec2): boolean { @@ -332,6 +353,22 @@ export default class RandomMapGenerator { room.bottomRight = new Vec2(posX + old.width - 1, posY + old.height - 1); room.topLayer = [...old.topLayer]; room.bottomLayer = [...old.bottomLayer]; + room.enemies = new Array(); + if (old.sprites) { + for (let index = 0; index < old.sprites.length; index++) { + const sprite = old.sprites[index]; + if (sprite.type == 'player') { + this.player.x = sprite.x; + this.player.y = sprite.y; + } + else { + let tmp = new Enemy(); + tmp.type = sprite.type; + tmp.position = new Vec2(posX + sprite.x, posY + sprite.y); + room.enemies.push(tmp); + } + } + } if (posX < this.minX) this.minX = posX; if (posY < this.minY) @@ -349,6 +386,12 @@ class Room { bottomRight: Vec2; topLayer: Array; bottomLayer: Array; + enemies: Array +} + +export class Enemy { + type: String; + position: Vec2; } enum Facing { From faeec383ba2448fba566707d3c1151901187b708 Mon Sep 17 00:00:00 2001 From: Renge Date: Sun, 10 Apr 2022 19:50:14 -0400 Subject: [PATCH 2/2] fix: fix some bugs in prev commit --- src/shattered_sword/Tools/RandomMapGenerator.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/shattered_sword/Tools/RandomMapGenerator.ts b/src/shattered_sword/Tools/RandomMapGenerator.ts index 4deefbb..41d229b 100644 --- a/src/shattered_sword/Tools/RandomMapGenerator.ts +++ b/src/shattered_sword/Tools/RandomMapGenerator.ts @@ -357,15 +357,17 @@ export default class RandomMapGenerator { if (old.sprites) { for (let index = 0; index < old.sprites.length; index++) { const sprite = old.sprites[index]; - if (sprite.type == 'player') { + if (sprite.type === 'player') { this.player.x = sprite.x; this.player.y = sprite.y; } else { - let tmp = new Enemy(); - tmp.type = sprite.type; - tmp.position = new Vec2(posX + sprite.x, posY + sprite.y); - room.enemies.push(tmp); + if (this.gen.random() <= sprite.possibility) { + let tmp = new Enemy(); + tmp.type = sprite.type; + tmp.position = new Vec2(posX + sprite.x, posY + sprite.y); + room.enemies.push(tmp); + } } } }