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