feat: implemented some functions in RandomMapGenerator
This commit is contained in:
parent
d3b2a7324b
commit
1679695b10
|
@ -20,7 +20,7 @@ export default class MainMenu extends Scene {
|
||||||
private mainMenu: Layer;
|
private mainMenu: Layer;
|
||||||
private about: Layer;
|
private about: Layer;
|
||||||
private control: Layer;
|
private control: Layer;
|
||||||
private rmg: RandomMapGenerator;
|
// private rmg: RandomMapGenerator;
|
||||||
|
|
||||||
|
|
||||||
animatedSprite: AnimatedSprite;
|
animatedSprite: AnimatedSprite;
|
||||||
|
@ -33,18 +33,18 @@ export default class MainMenu extends Scene {
|
||||||
//TODO
|
//TODO
|
||||||
|
|
||||||
startScene(): void{
|
startScene(): void{
|
||||||
this.config = new ConfigManager();
|
// this.config = new ConfigManager();
|
||||||
this.save = new SaveManager();
|
// this.save = new SaveManager();
|
||||||
console.log(this.config.getVolume());
|
// console.log(this.config.getVolume());
|
||||||
this.config.setVolume(100);
|
// this.config.setVolume(100);
|
||||||
console.log(this.config.getVolume());
|
// console.log(this.config.getVolume());
|
||||||
console.log(this.save.getLevel());
|
// console.log(this.save.getLevel());
|
||||||
this.save.setLevel(10);
|
// this.save.setLevel(10);
|
||||||
|
|
||||||
console.log(this.save.getLevel());
|
// console.log(this.save.getLevel());
|
||||||
|
|
||||||
this.rmg = new RandomMapGenerator("shattered_sword_assets/jsons/forest_template.json", 114514);
|
// this.rmg = new RandomMapGenerator("shattered_sword_assets/jsons/forest_template.json", 114514);
|
||||||
this.rmg.getMap();
|
// this.rmg.getMap();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
|
import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
|
||||||
import Debug from "../../Wolfie2D/Debug/Debug";
|
import Debug from "../../Wolfie2D/Debug/Debug";
|
||||||
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
|
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
|
||||||
|
import RandomMapGenerator from "../Tools/RandomMapGenerator";
|
||||||
import GameLevel from "./GameLevel";
|
import GameLevel from "./GameLevel";
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,8 +11,10 @@ export default class Tutorial extends GameLevel{
|
||||||
loadScene(): void {
|
loadScene(): void {
|
||||||
// Load resources
|
// Load resources
|
||||||
// this.load.tilemap("forest1", "shattered_sword_assets/tilemaps/Tutorial.json");
|
// this.load.tilemap("forest1", "shattered_sword_assets/tilemaps/Tutorial.json");
|
||||||
let map = localStorage.getItem("map");
|
// let map = localStorage.getItem("map");
|
||||||
this.load.tilemapFromObject("forest1", JSON.parse(map));
|
let rmg = new RandomMapGenerator("shattered_sword_assets/jsons/forest_template.json", 114514);
|
||||||
|
let map = rmg.getMap();
|
||||||
|
this.load.tilemapFromObject("forest1", map);
|
||||||
|
|
||||||
this.load.spritesheet("player", "shattered_sword_assets/spritesheets/Hiro.json")
|
this.load.spritesheet("player", "shattered_sword_assets/spritesheets/Hiro.json")
|
||||||
//load music here
|
//load music here
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { TiledTilemapData } from "../../Wolfie2D/DataTypes/Tilesets/TiledData";
|
import { TiledLayerData, TiledTilemapData } from "../../Wolfie2D/DataTypes/Tilesets/TiledData";
|
||||||
import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
|
import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
|
||||||
import MapTemplate, { Entrance, RoomTemplate } from "./DataTypes/MapTemplate";
|
import MapTemplate, { Entrance, RoomTemplate } from "./DataTypes/MapTemplate";
|
||||||
|
|
||||||
|
@ -89,9 +89,9 @@ export default class RandomMapGenerator {
|
||||||
this.rooms.push(room);
|
this.rooms.push(room);
|
||||||
|
|
||||||
|
|
||||||
if (!this.hasExit)
|
// if (!this.hasExit)
|
||||||
throw new Error("Fail to generate a room with exit!");
|
// throw new Error("Fail to generate a map with exit!");
|
||||||
|
this.fillData();
|
||||||
return this.map;
|
return this.map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,6 +100,61 @@ export default class RandomMapGenerator {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fillData() {
|
||||||
|
let width = this.maxX - this.minX + 1;
|
||||||
|
let height = this.maxY - this.minY + 1;
|
||||||
|
this.map.layers = new Array(2);
|
||||||
|
this.map.layers[0] = new TiledLayerData;
|
||||||
|
this.map.layers[1] = new TiledLayerData;
|
||||||
|
this.map.width = this.map.layers[0].width = this.map.layers[1].width = width;
|
||||||
|
this.map.height = this.map.layers[0].height = this.map.layers[1].height = height;
|
||||||
|
this.map.tileheight = this.template.tileheight;
|
||||||
|
this.map.tilewidth = this.template.tilewidth;
|
||||||
|
this.map.orientation = "orthogonal";
|
||||||
|
this.map.layers[0].x = this.map.layers[0].y = this.map.layers[1].x = this.map.layers[1].y = 0;
|
||||||
|
this.map.layers[0].opacity = this.map.layers[1].opacity = 1;
|
||||||
|
this.map.layers[0].visible = this.map.layers[1].visible = true;
|
||||||
|
this.map.layers[0].type = this.map.layers[1].type = "tilelayer";
|
||||||
|
this.map.layers[0].name = "Floor";
|
||||||
|
this.map.layers[1].name = "Wall";
|
||||||
|
this.map.layers[0].properties = [{
|
||||||
|
name: "Collidable",
|
||||||
|
type: "bool",
|
||||||
|
value: false
|
||||||
|
}]
|
||||||
|
this.map.layers[1].properties = [{
|
||||||
|
name: "Collidable",
|
||||||
|
type: "bool",
|
||||||
|
value: true
|
||||||
|
}]
|
||||||
|
this.map.tilesets = [{
|
||||||
|
columns: this.template.columns,
|
||||||
|
tilewidth: this.template.tilewidth,
|
||||||
|
tileheight: this.template.tileheight,
|
||||||
|
tilecount: this.template.tilecount,
|
||||||
|
firstgid: this.template.firstgid,
|
||||||
|
imageheight: this.template.imageheight,
|
||||||
|
imagewidth: this.template.imagewidth,
|
||||||
|
margin: this.template.margin,
|
||||||
|
spacing: this.template.spacing,
|
||||||
|
name: this.template.name,
|
||||||
|
image: this.template.image
|
||||||
|
}]
|
||||||
|
|
||||||
|
this.map.layers[0].data = new Array(width * height).fill(this.template.background);
|
||||||
|
this.map.layers[1].data = new Array(width * height);
|
||||||
|
|
||||||
|
this.rooms.forEach((room) => {
|
||||||
|
let roomWidth = room.bottomRight.x - room.topLeft.x + 1;
|
||||||
|
let roomHeight = room.bottomRight.y - room.topLeft.y + 1;
|
||||||
|
for (let i = 0; i < roomHeight; i++)
|
||||||
|
for (let j = 0; j < roomWidth; j++) {
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
private isValidRoom(topLeft: Vec2, bottomRight: Vec2): boolean {
|
private isValidRoom(topLeft: Vec2, bottomRight: Vec2): boolean {
|
||||||
this.rooms.forEach((room) => {
|
this.rooms.forEach((room) => {
|
||||||
if (room.topLeft.x < bottomRight.x &&
|
if (room.topLeft.x < bottomRight.x &&
|
||||||
|
|
Loading…
Reference in New Issue
Block a user