Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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();
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        /// <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();
        }