fix: wrong format of forest template
feat: some functions in RMG
This commit is contained in:
		
							parent
							
								
									feb9fb824f
								
							
						
					
					
						commit
						e74b36585f
					
				|  | @ -1,5 +1,3 @@ | ||||||
| { |  | ||||||
| 	"maptemplate": [ |  | ||||||
| { | { | ||||||
|    "columns":8, |    "columns":8, | ||||||
|    "tileheight":16, |    "tileheight":16, | ||||||
|  | @ -11,7 +9,7 @@ | ||||||
|    "margin":0, |    "margin":0, | ||||||
|    "spacing":0, |    "spacing":0, | ||||||
|    "name":"forest_tileset", |    "name":"forest_tileset", | ||||||
| 	        "image":"forest_tileset.png", |    "image":"shattered_sword_assets/tilemaps/forest_tileset.png", | ||||||
|    "entrance": { |    "entrance": { | ||||||
|       "width": 30, |       "width": 30, | ||||||
|       "height": 20, |       "height": 20, | ||||||
|  | @ -425,7 +423,6 @@ | ||||||
|          ] |          ] | ||||||
|       } |       } | ||||||
|    ], |    ], | ||||||
| 			"background": 0 |    "background": 0, | ||||||
| 		} |    "minroom": 10 | ||||||
| 	] |  | ||||||
| } | } | ||||||
							
								
								
									
										30
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										30
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							|  | @ -9,6 +9,7 @@ | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "license": "ISC", |       "license": "ISC", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|  |         "random-seed": "^0.3.0", | ||||||
|         "typescript-require": "^0.3.0" |         "typescript-require": "^0.3.0" | ||||||
|       }, |       }, | ||||||
|       "devDependencies": { |       "devDependencies": { | ||||||
|  | @ -2660,6 +2661,11 @@ | ||||||
|       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", |       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/json-stringify-safe": { | ||||||
|  |       "version": "5.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", | ||||||
|  |       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" | ||||||
|  |     }, | ||||||
|     "node_modules/jsonify": { |     "node_modules/jsonify": { | ||||||
|       "version": "0.0.0", |       "version": "0.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", |       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", | ||||||
|  | @ -3635,6 +3641,17 @@ | ||||||
|         "node": ">=0.4.x" |         "node": ">=0.4.x" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/random-seed": { | ||||||
|  |       "version": "0.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/random-seed/-/random-seed-0.3.0.tgz", | ||||||
|  |       "integrity": "sha1-2UXy4fOPSejViRNDG4v2u5N1Vs0=", | ||||||
|  |       "dependencies": { | ||||||
|  |         "json-stringify-safe": "^5.0.1" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">= 0.6.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/randombytes": { |     "node_modules/randombytes": { | ||||||
|       "version": "2.1.0", |       "version": "2.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", |       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", | ||||||
|  | @ -7275,6 +7292,11 @@ | ||||||
|       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", |       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "json-stringify-safe": { | ||||||
|  |       "version": "5.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", | ||||||
|  |       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" | ||||||
|  |     }, | ||||||
|     "jsonify": { |     "jsonify": { | ||||||
|       "version": "0.0.0", |       "version": "0.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", |       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", | ||||||
|  | @ -8075,6 +8097,14 @@ | ||||||
|       "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", |       "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "random-seed": { | ||||||
|  |       "version": "0.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/random-seed/-/random-seed-0.3.0.tgz", | ||||||
|  |       "integrity": "sha1-2UXy4fOPSejViRNDG4v2u5N1Vs0=", | ||||||
|  |       "requires": { | ||||||
|  |         "json-stringify-safe": "^5.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "randombytes": { |     "randombytes": { | ||||||
|       "version": "2.1.0", |       "version": "2.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", |       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", | ||||||
|  |  | ||||||
|  | @ -19,6 +19,7 @@ | ||||||
|     "watchify": "^3.11.1" |     "watchify": "^3.11.1" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "random-seed": "^0.3.0", | ||||||
|     "typescript-require": "^0.3.0" |     "typescript-require": "^0.3.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -20,6 +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; | ||||||
|      |      | ||||||
| 
 | 
 | ||||||
|     animatedSprite: AnimatedSprite; |     animatedSprite: AnimatedSprite; | ||||||
|  | @ -42,10 +43,10 @@ export default class MainMenu extends Scene { | ||||||
| 
 | 
 | ||||||
|         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(); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         new RandomMapGenerator("shattered_sword_assets/jsons/forest_template.json"); |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|         // Scene has started, so start playing music
 |         // Scene has started, so start playing music
 | ||||||
|         //this.emitter.fireEvent(GameEventType.PLAY_SOUND, {key: "menu", loop: true, holdReference: true});
 |         //this.emitter.fireEvent(GameEventType.PLAY_SOUND, {key: "menu", loop: true, holdReference: true});
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import { TiledTilemapData } from "../../Wolfie2D/DataTypes/Tilesets/TiledData"; | import { TiledTilemapData } from "../../Wolfie2D/DataTypes/Tilesets/TiledData"; | ||||||
| import Vec2 from "../../Wolfie2D/DataTypes/Vec2"; | import Vec2 from "../../Wolfie2D/DataTypes/Vec2"; | ||||||
| import MapTemplate, { Entrance } from "./DataTypes/MapTemplate"; | import MapTemplate, { Entrance, RoomTemplate } from "./DataTypes/MapTemplate"; | ||||||
| 
 | 
 | ||||||
| export default class RandomMapGenerator { | export default class RandomMapGenerator { | ||||||
|     private template: MapTemplate; |     private template: MapTemplate; | ||||||
|  | @ -9,17 +9,104 @@ export default class RandomMapGenerator { | ||||||
|     private minY: number; |     private minY: number; | ||||||
|     private maxY: number; |     private maxY: number; | ||||||
|     private map: TiledTilemapData; |     private map: TiledTilemapData; | ||||||
|  |     private roomWithLeftEntrance: Array<RoomTemplate>; | ||||||
|  |     private roomWithLeftEntranceWeight: number; | ||||||
|  |     private roomWithRightEntrance: Array<RoomTemplate>; | ||||||
|  |     private roomWithRightEntranceWeight: number; | ||||||
|  |     private roomWithUpEntrance: Array<RoomTemplate>; | ||||||
|  |     private roomWithUpEntranceWeight: number; | ||||||
|  |     private roomWithDownEntrance: Array<RoomTemplate>; | ||||||
|  |     private roomWithDownEntranceWeight: number; | ||||||
|  |     private rooms: Array<Room> | ||||||
|  |     private gen: any; | ||||||
| 
 | 
 | ||||||
|     constructor(JSONFilePath: string) { |     constructor(JSONFilePath: string, seed: any) { | ||||||
|         let xhr = new XMLHttpRequest(); |         let xhr = new XMLHttpRequest(); | ||||||
|         xhr.overrideMimeType("application/json"); |         xhr.overrideMimeType("application/json"); | ||||||
|         xhr.open('GET', JSONFilePath, false); |         xhr.open('GET', JSONFilePath, false); | ||||||
|         xhr.send(null); |         xhr.send(null); | ||||||
|         this.template = JSON.parse(xhr.responseText); |         this.template = JSON.parse(xhr.responseText); | ||||||
|  |         this.roomWithLeftEntrance = new Array(); | ||||||
|  |         this.roomWithRightEntrance = new Array(); | ||||||
|  |         this.roomWithUpEntrance = new Array(); | ||||||
|  |         this.roomWithDownEntrance = new Array(); | ||||||
|  |         this.minX = this.minY = this.maxX = this.maxY = | ||||||
|  |             this.roomWithLeftEntranceWeight = this.roomWithRightEntranceWeight = | ||||||
|  |             this.roomWithUpEntranceWeight = this.roomWithDownEntranceWeight = 0; | ||||||
|  | 
 | ||||||
|  |         this.map = new TiledTilemapData(); | ||||||
|  |         this.rooms = new Array(); | ||||||
|  |         let gen = require('random-seed'); | ||||||
|  |         this.gen = new gen(seed); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         this.template.rooms.forEach((room) => { | ||||||
|  |             let left = false, right = false, up = false, down = false; | ||||||
|  |             room.entrances.forEach((entrance) => { | ||||||
|  |                 let facing = this.getEntranceFacing(entrance, room.width); | ||||||
|  |                 switch (facing) { | ||||||
|  |                     case Facing.LEFT: | ||||||
|  |                         left = true; | ||||||
|  |                         break; | ||||||
|  |                     case Facing.RIGHT: | ||||||
|  |                         right = true; | ||||||
|  |                         break; | ||||||
|  |                     case Facing.UP: | ||||||
|  |                         up = true; | ||||||
|  |                         break; | ||||||
|  |                     case Facing.DOWN: | ||||||
|  |                         down = true; | ||||||
|  |                         break; | ||||||
|  |                     default: | ||||||
|  |                         break; | ||||||
|  |                 } | ||||||
|  |             }) | ||||||
|  |             if (left) { | ||||||
|  |                 this.roomWithLeftEntrance.push(room); | ||||||
|  |                 this.roomWithLeftEntranceWeight += room.weight; | ||||||
|  |             } | ||||||
|  |             if (right) { | ||||||
|  |                 this.roomWithRightEntrance.push(room); | ||||||
|  |                 this.roomWithRightEntranceWeight += room.weight; | ||||||
|  |             } | ||||||
|  |             if (up) { | ||||||
|  |                 this.roomWithUpEntrance.push(room); | ||||||
|  |                 this.roomWithUpEntranceWeight += room.weight; | ||||||
|  |             } | ||||||
|  |             if (down) { | ||||||
|  |                 this.roomWithDownEntrance.push(room); | ||||||
|  |                 this.roomWithDownEntranceWeight += room.weight; | ||||||
|  |             } | ||||||
|  |         }) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     printRoom() { |     getMap(): TiledTilemapData { | ||||||
|         console.log(this.template); |         this.maxX = this.template.entrance.width - 1; | ||||||
|  |         this.maxY = this.template.entrance.height - 1; | ||||||
|  | 
 | ||||||
|  |         let room = this.copyRoom(this.template.entrance, 0, 0); | ||||||
|  |          | ||||||
|  |         console.log(room); | ||||||
|  |         return this.map; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private getEntranceFacing(entrance: Entrance, width: number): Facing { | ||||||
|  |         if (entrance.x === 0) | ||||||
|  |             return Facing.LEFT; | ||||||
|  |         else if (entrance.x === width - 1) | ||||||
|  |             return Facing.RIGHT | ||||||
|  |         else if (entrance.y === 0) | ||||||
|  |             return Facing.UP; | ||||||
|  |         return Facing.DOWN; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private copyRoom(old: RoomTemplate, posX: number, posY: number): Room { | ||||||
|  |         let room = new Room(); | ||||||
|  |         room.topLeft = new Vec2(posX, posY); | ||||||
|  |         room.bottomRight = new Vec2(posX + old.width - 1, posY + old.height - 1); | ||||||
|  |         room.topLayer = [...old.topLayer]; | ||||||
|  |         room.bottomLayer = [...old.bottomLayer]; | ||||||
|  |         return room; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -29,3 +116,10 @@ class Room { | ||||||
|     topLayer: Array<number>; |     topLayer: Array<number>; | ||||||
|     bottomLayer: Array<number>; |     bottomLayer: Array<number>; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | enum Facing { | ||||||
|  |     LEFT = "left", | ||||||
|  |     RIGHT = "right", | ||||||
|  |     UP = "up", | ||||||
|  |     DOWN = "down" | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user