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 about: Layer;
 | 
			
		||||
    private control: Layer;
 | 
			
		||||
    private rmg: RandomMapGenerator;
 | 
			
		||||
    // private rmg: RandomMapGenerator;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    animatedSprite: AnimatedSprite;
 | 
			
		||||
| 
						 | 
				
			
			@ -33,18 +33,18 @@ export default class MainMenu extends Scene {
 | 
			
		|||
    //TODO 
 | 
			
		||||
    
 | 
			
		||||
    startScene(): void{
 | 
			
		||||
        this.config = new ConfigManager();
 | 
			
		||||
        this.save = new SaveManager();
 | 
			
		||||
        console.log(this.config.getVolume());
 | 
			
		||||
        this.config.setVolume(100);
 | 
			
		||||
        console.log(this.config.getVolume());
 | 
			
		||||
        console.log(this.save.getLevel());
 | 
			
		||||
        this.save.setLevel(10);
 | 
			
		||||
        // this.config = new ConfigManager();
 | 
			
		||||
        // this.save = new SaveManager();
 | 
			
		||||
        // console.log(this.config.getVolume());
 | 
			
		||||
        // this.config.setVolume(100);
 | 
			
		||||
        // console.log(this.config.getVolume());
 | 
			
		||||
        // console.log(this.save.getLevel());
 | 
			
		||||
        // 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.getMap();
 | 
			
		||||
        // this.rmg = new RandomMapGenerator("shattered_sword_assets/jsons/forest_template.json", 114514);
 | 
			
		||||
        // this.rmg.getMap();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
import Vec2 from "../../Wolfie2D/DataTypes/Vec2";
 | 
			
		||||
import Debug from "../../Wolfie2D/Debug/Debug";
 | 
			
		||||
import { GameEventType } from "../../Wolfie2D/Events/GameEventType";
 | 
			
		||||
import RandomMapGenerator from "../Tools/RandomMapGenerator";
 | 
			
		||||
import GameLevel from "./GameLevel";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -10,8 +11,10 @@ export default class Tutorial extends GameLevel{
 | 
			
		|||
    loadScene(): void {
 | 
			
		||||
        // Load resources
 | 
			
		||||
        // this.load.tilemap("forest1", "shattered_sword_assets/tilemaps/Tutorial.json");
 | 
			
		||||
        let map = localStorage.getItem("map");
 | 
			
		||||
        this.load.tilemapFromObject("forest1", JSON.parse(map));
 | 
			
		||||
        // let map = localStorage.getItem("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")
 | 
			
		||||
        //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 MapTemplate, { Entrance, RoomTemplate } from "./DataTypes/MapTemplate";
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -89,9 +89,9 @@ export default class RandomMapGenerator {
 | 
			
		|||
        this.rooms.push(room);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (!this.hasExit) 
 | 
			
		||||
            throw new Error("Fail to generate a room with exit!");
 | 
			
		||||
 | 
			
		||||
        // if (!this.hasExit) 
 | 
			
		||||
        //     throw new Error("Fail to generate a map with exit!");
 | 
			
		||||
        this.fillData();
 | 
			
		||||
        return this.map;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,6 +100,61 @@ export default class RandomMapGenerator {
 | 
			
		|||
        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 {
 | 
			
		||||
        this.rooms.forEach((room) => {
 | 
			
		||||
            if (room.topLeft.x < bottomRight.x &&
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user