Spaces:
Sleeping
Sleeping
| import { Infer, ObjectType, v } from 'convex/values'; | |
| // `layer[position.x][position.y]` is the tileIndex or -1 if empty. | |
| const tileLayer = v.array(v.array(v.number())); | |
| export type TileLayer = Infer<typeof tileLayer>; | |
| const animatedSprite = { | |
| x: v.number(), | |
| y: v.number(), | |
| w: v.number(), | |
| h: v.number(), | |
| layer: v.number(), | |
| sheet: v.string(), | |
| animation: v.string(), | |
| }; | |
| export type AnimatedSprite = ObjectType<typeof animatedSprite>; | |
| export const serializedWorldMap = { | |
| width: v.number(), | |
| height: v.number(), | |
| tileSetUrl: v.string(), | |
| // Width & height of tileset image, px. | |
| tileSetDimX: v.number(), | |
| tileSetDimY: v.number(), | |
| // Tile size in pixels (assume square) | |
| tileDim: v.number(), | |
| bgTiles: v.array(v.array(v.array(v.number()))), | |
| decorTiles: v.array(v.array(v.array(v.number()))), | |
| objectTiles: v.array(tileLayer), | |
| bgTilesN: v.array(v.array(v.array(v.number()))), | |
| decorTilesN: v.array(v.array(v.array(v.number()))), | |
| objectTilesN: v.array(tileLayer), | |
| animatedSprites: v.array(v.object(animatedSprite)), | |
| }; | |
| export type SerializedWorldMap = ObjectType<typeof serializedWorldMap>; | |
| export class WorldMap { | |
| width: number; | |
| height: number; | |
| tileSetUrl: string; | |
| tileSetDimX: number; | |
| tileSetDimY: number; | |
| tileDim: number; | |
| bgTiles: TileLayer[]; | |
| decorTiles: TileLayer[]; | |
| objectTiles: TileLayer[]; | |
| bgTilesN: TileLayer[]; | |
| decorTilesN: TileLayer[]; | |
| objectTilesN: TileLayer[]; | |
| animatedSprites: AnimatedSprite[]; | |
| constructor(serialized: SerializedWorldMap) { | |
| this.width = serialized.width; | |
| this.height = serialized.height; | |
| this.tileSetUrl = serialized.tileSetUrl; | |
| this.tileSetDimX = serialized.tileSetDimX; | |
| this.tileSetDimY = serialized.tileSetDimY; | |
| this.tileDim = serialized.tileDim; | |
| this.bgTiles = serialized.bgTiles; | |
| this.decorTiles = serialized.decorTiles; | |
| this.objectTiles = serialized.objectTiles; | |
| this.bgTilesN = serialized.bgTilesN; | |
| this.decorTilesN = serialized.decorTilesN; | |
| this.objectTilesN = serialized.objectTilesN; | |
| this.animatedSprites = serialized.animatedSprites; | |
| } | |
| serialize(): SerializedWorldMap { | |
| return { | |
| width: this.width, | |
| height: this.height, | |
| tileSetUrl: this.tileSetUrl, | |
| tileSetDimX: this.tileSetDimX, | |
| tileSetDimY: this.tileSetDimY, | |
| tileDim: this.tileDim, | |
| bgTiles: this.bgTiles, | |
| objectTiles: this.objectTiles, | |
| decorTiles:this.decorTiles, | |
| bgTilesN: this.bgTilesN, | |
| objectTilesN: this.objectTilesN, | |
| decorTilesN:this.decorTilesN, | |
| animatedSprites: this.animatedSprites, | |
| }; | |
| } | |
| } | |