public static Map FromTileset(TileSet tileset) { var size = new Size(1, 1); var tileShape = Game.modData.Manifest.TileShape; var tileRef = new TerrainTile(tileset.Templates.First().Key, (byte)0); var makeMapTiles = Exts.Lazy(() => { var ret = new CellLayer <TerrainTile>(tileShape, size); ret.Clear(tileRef); return(ret); }); var map = new Map() { Title = "Name your map here", Description = "Describe your map here", Author = "Your name here", MapSize = new int2(size), Tileset = tileset.Id, Options = new MapOptions(), MapResources = Exts.Lazy(() => new CellLayer <ResourceTile>(tileShape, size)), MapTiles = makeMapTiles, Actors = Exts.Lazy(() => new Dictionary <string, ActorReference>()), Smudges = Exts.Lazy(() => new List <SmudgeReference>()) }; map.PostInit(); return(map); }
/// <summary> /// Initializes a new map created by the editor or importer. /// The map will not receive a valid UID until after it has been saved and reloaded. /// </summary> public Map(ModData modData, TileSet tileset, int width, int height) { this.modData = modData; var size = new Size(width, height); Grid = modData.Manifest.Get <MapGrid>(); var tileRef = new TerrainTile(tileset.Templates.First().Key, 0); Title = "Name your map here"; Author = "Your name here"; MapSize = new int2(size); Tileset = tileset.Id; // Empty rules that can be added to by the importers. // Will be dropped on save if nothing is added to it RuleDefinitions = new MiniYaml(""); Tiles = new CellLayer <TerrainTile>(Grid.Type, size); Resources = new CellLayer <ResourceTile>(Grid.Type, size); Height = new CellLayer <byte>(Grid.Type, size); if (Grid.MaximumTerrainHeight > 0) { Height.CellEntryChanged += UpdateProjection; Tiles.CellEntryChanged += UpdateProjection; } Tiles.Clear(tileRef); PostInit(); }
public byte GetTerrainIndex(CPos cell) { const short InvalidCachedTerrainIndex = -1; // Lazily initialize a cache for terrain indexes. if (cachedTerrainIndexes == null) { cachedTerrainIndexes = new CellLayer <short>(this); cachedTerrainIndexes.Clear(InvalidCachedTerrainIndex); // Invalidate the entry for a cell if anything could cause the terrain index to change. Action <CPos> invalidateTerrainIndex = c => cachedTerrainIndexes[c] = InvalidCachedTerrainIndex; CustomTerrain.CellEntryChanged += invalidateTerrainIndex; Tiles.CellEntryChanged += invalidateTerrainIndex; } var uv = cell.ToMPos(this); var terrainIndex = cachedTerrainIndexes[uv]; // PERF: Cache terrain indexes per cell on demand. if (terrainIndex == InvalidCachedTerrainIndex) { var custom = CustomTerrain[uv]; terrainIndex = cachedTerrainIndexes[uv] = custom != byte.MaxValue ? custom : Rules.TileSet.GetTerrainIndex(Tiles[uv]); } return((byte)terrainIndex); }
/// <summary> /// Initializes a new map created by the editor or importer. /// The map will not recieve a valid UID until after it has been saved and reloaded. /// </summary> public Map(TileSet tileset, int width, int height) { var size = new Size(width, height); Grid = Game.ModData.Manifest.Get <MapGrid>(); var tileRef = new TerrainTile(tileset.Templates.First().Key, (byte)0); Title = "Name your map here"; Description = "Describe your map here"; Author = "Your name here"; MapSize = new int2(size); Tileset = tileset.Id; Videos = new MapVideos(); Options = new MapOptions(); MapResources = Exts.Lazy(() => new CellLayer <ResourceTile>(Grid.Type, size)); MapTiles = Exts.Lazy(() => { var ret = new CellLayer <TerrainTile>(Grid.Type, size); ret.Clear(tileRef); if (Grid.MaximumTerrainHeight > 0) { ret.CellEntryChanged += UpdateProjection; } return(ret); }); MapHeight = Exts.Lazy(() => { var ret = new CellLayer <byte>(Grid.Type, size); ret.Clear(0); if (Grid.MaximumTerrainHeight > 0) { ret.CellEntryChanged += UpdateProjection; } return(ret); }); SpawnPoints = Exts.Lazy(() => new CPos[0]); PostInit(); }
public static Map FromTileset(TileSet tileset) { var size = new Size(1, 1); var tileShape = Game.ModData.Manifest.TileShape; var tileRef = new TerrainTile(tileset.Templates.First().Key, (byte)0); var makeMapTiles = Exts.Lazy(() => { var ret = new CellLayer <TerrainTile>(tileShape, size); ret.Clear(tileRef); return(ret); }); var makeMapHeight = Exts.Lazy(() => { var ret = new CellLayer <byte>(tileShape, size); ret.Clear(0); return(ret); }); var map = new Map() { Title = "Name your map here", Description = "Describe your map here", Author = "Your name here", MapSize = new int2(size), Tileset = tileset.Id, Videos = new MapVideos(), Options = new MapOptions(), MapResources = Exts.Lazy(() => new CellLayer <ResourceTile>(tileShape, size)), MapTiles = makeMapTiles, MapHeight = makeMapHeight, SpawnPoints = Exts.Lazy(() => new CPos[0]) }; map.PostInit(); return(map); }
/// <summary> /// Initializes a new map created by the editor or importer. /// The map will not recieve a valid UID until after it has been saved and reloaded. /// </summary> public Map(TileSet tileset, int width, int height) { containsTest = Contains; var size = new Size(width, height); var tileShape = Game.ModData.Manifest.TileShape; var tileRef = new TerrainTile(tileset.Templates.First().Key, (byte)0); Title = "Name your map here"; Description = "Describe your map here"; Author = "Your name here"; MapSize = new int2(size); Tileset = tileset.Id; Videos = new MapVideos(); Options = new MapOptions(); MapResources = Exts.Lazy(() => new CellLayer <ResourceTile>(tileShape, size)); MapTiles = Exts.Lazy(() => { var ret = new CellLayer <TerrainTile>(tileShape, size); ret.Clear(tileRef); return(ret); }); MapHeight = Exts.Lazy(() => { var ret = new CellLayer <byte>(tileShape, size); ret.Clear(0); return(ret); }); SpawnPoints = Exts.Lazy(() => new CPos[0]); TileShape = tileShape; MaximumTerrainHeight = Game.ModData.Manifest.MaximumTerrainHeight; PostInit(); }