Beispiel #1
0
        private static void WrapFloorWithWallTiles(TileMap <TileType> result)
        {
            int2[] directions = new int2[]
            {
                new int2(0, 1),
                new int2(1, 1),
                new int2(1, 0),
                new int2(1, -1),
                new int2(0, -1),
                new int2(-1, -1),
                new int2(-1, 0),
                new int2(-1, 1)
            };

            int2[] floorTiles = result.GetPresentTiles();

            for (int i = 0; i < floorTiles.Length; i++)
            {
                for (int j = 0; j < directions.Length; j++)
                {
                    int2 targetTile = floorTiles[i] + directions[j];

                    if (result[targetTile] != TileType.Floor)
                    {
                        Zone zone = result.Layout.FindZoneByPosition(targetTile);

                        if (zone != null)
                        {
                            zone.tiles.Add(targetTile);
                            result.Add(targetTile, TileType.Wall);
                        }
                    }
                }
            }
        }
Beispiel #2
0
    public void PassTileMapWithTiles()
    {
        TileMap <TileType> originalMap = new TileMap <TileType>();
        Zone zoneA = new Zone();

        zoneA.tiles.Add(new int2(0, 0));
        zoneA.tiles.Add(new int2(9, 7));
        zoneA.tiles.Add(new int2(34, 58));
        originalMap.Layout.Add(zoneA);
        originalMap.Add(new int2(0, 0), TileType.Floor);
        originalMap.Add(new int2(9, 7), TileType.Wall);
        originalMap.Add(new int2(34, 58), TileType.Floor);
        TileMap <TileType> passedMap = PassValueToScript(originalMap);

        Assert.IsTrue(passedMap[0, 0] == TileType.Floor);
        Assert.IsTrue(passedMap[9, 7] == TileType.Wall);
        Assert.IsTrue(passedMap[34, 58] == TileType.Floor);
    }
Beispiel #3
0
 private void GenerateMapColumn(int x, int startZ, int count, List <TileTypes> tileList)
 {
     for (int i = 0; i < count; i++)
     {
         HexCoords hexCoords     = new HexCoords(x, startZ);
         int       chosenTileIdx = random.Next(tileList.Count);
         TileMap.Add(hexCoords, tileList[chosenTileIdx]);
         //delete the chosen tile from the list so we don't use it again
         tileList.RemoveAt(chosenTileIdx);
         startZ++;
     }
 }
Beispiel #4
0
        // #### TileMap Helpers

        private static void AddFloorTiles(TileMap <TileType> result)
        {
            var zoneEnumerator = result.Layout.Zones.Nodes.GetEnumerator();

            while (zoneEnumerator.MoveNext())
            {
                Zone zone = zoneEnumerator.Current.Value;

                var tileEnumerator = zone.GetEnumerator();

                while (tileEnumerator.MoveNext())
                {
                    result.Add(tileEnumerator.Current, TileType.Floor);
                }
            }
        }
Beispiel #5
0
        public static void AddOrUpdate(TileData[] tilesAddOrUpdate, ObjectData[] objAddOrUpdate, int[] removedObjects)
        {
            Task.Factory.StartNew(() =>
            {
                foreach (var i in removedObjects)
                {
                    Objects.Remove(i);
                }

                foreach (var i in tilesAddOrUpdate)
                {
                    var pos  = new Point(i.X, i.Y);
                    var tile = new Tile(pos.X, pos.Y, i.Id);

                    if (TileMap.ContainsKey(pos))
                    {
                        TileMap[pos] = tile;
                    }
                    else
                    {
                        TileMap.Add(pos, tile);
                    }
                }

                foreach (var i in objAddOrUpdate)
                {
                    if (Objects.ContainsKey(i.ObjectId))
                    {
                        Objects[i.ObjectId].SetDistination(i.X, i.Y);
                        Objects[i.ObjectId].ImportStat(i.Stats);

                        if (i.LastDirection != -1)
                        {
                            if (Objects[i.ObjectId] is Player)
                            {
                                ((Player)Objects[i.ObjectId]).CurrentDirection = (Direction)i.LastDirection;
                            }
                            else
                            {
                                ((Entity)Objects[i.ObjectId]).CurrentDirection = (Direction)i.LastDirection;
                            }
                        }
                    }
                    else
                    {
                        if (i.IsPlayer)
                        {
                            HandlePlayer(i);
                        }
                        else if (i.IsEntity)
                        {
                            HandleEntity(i);
                        }
                        else
                        {
                            HandleObject(i);
                        }
                    }
                }
            });
        }
Beispiel #6
0
    public static TileMap <T> Convert <U, T>(this TileMap <U> map, Func <U, T> conversionFunction)
    {
        TileMap <T> result       = new TileMap <T>();
        Layout      resultLayout = new Layout();

        result.Layout = resultLayout;

        // Add zones & tiles

        Graph <Zone> mapGraph = map.Layout.Zones;
        Zone         zone;

        for (int i = 0; i < mapGraph.Count; i++)
        {
            zone = mapGraph.Nodes[i].Value;
            RectangleInt bounds  = zone.bounds;
            Zone         newZone = new Zone(bounds.x, bounds.y, bounds.width, bounds.height);

            var  enumerator = zone.GetEnumerator();
            int2 tile;

            while (enumerator.MoveNext())
            {
                tile = enumerator.Current;
                newZone.tiles.Add(tile);
                result.Add(tile, conversionFunction(map[tile.x, tile.y]));
            }

            resultLayout.Add(newZone);
        }

        // Link layout Zones

        Zone resultZone;

        for (int i = 0; i < mapGraph.Count; i++)
        {
            zone = mapGraph.Nodes[i].Value;
            GraphNode <Zone> mapZoneNode = mapGraph.Nodes.FindByValue(zone) as GraphNode <Zone>;
            resultZone = resultLayout.FindZoneByPosition(zone.bounds.Position);

            var linkEnumerator = mapZoneNode.Neighbors.GetEnumerator();

            while (linkEnumerator.MoveNext())
            {
                Zone mapConnectionZone    = linkEnumerator.Current.Value;
                Zone resultConnectionZone = resultLayout.FindZoneByPosition(mapConnectionZone.bounds.Position);

                GraphNode <Zone> resultZoneNode = resultLayout.Zones.Nodes.FindByValue(resultZone) as GraphNode <Zone>;

                if (CountOccurrences(resultZoneNode.Neighbors, resultConnectionZone) < CountOccurrences(mapZoneNode.Neighbors, mapConnectionZone))
                {
                    resultLayout.ConnectZones(resultZone, resultConnectionZone);
                }
            }
        }

        // Connect zones

        for (int i = 0; i < mapGraph.Count; i++)
        {
            zone       = mapGraph.Nodes[i].Value;
            resultZone = resultLayout.FindZoneByPosition(zone.bounds.Position);

            int2 connectionPoint;
            Zone connectionZone;
            var  connectionsEnumerator = zone.connections.GetEnumerator();

            while (connectionsEnumerator.MoveNext())
            {
                int2 currentMapPoint          = connectionsEnumerator.Current.Key;
                Zone currentMapZoneConnection = connectionsEnumerator.Current.Value;

                connectionPoint = new int2(currentMapPoint.x, currentMapPoint.y);
                connectionZone  = resultLayout.FindZoneByPosition(currentMapZoneConnection.bounds.Position);

                resultZone.AddConnectionPoint(connectionPoint, connectionZone);
            }
        }

        // Set Initial & Final zones

        resultLayout.InitialZone = resultLayout.FindZoneByPosition(map.Layout.InitialZone.bounds.Position);
        resultLayout.FinalZone   = resultLayout.FindZoneByPosition(map.Layout.FinalZone.bounds.Position);

        // Set Spawn & Exit zones

        result.SpawnPoint = map.SpawnPoint;
        result.ExitPoint  = map.ExitPoint;

        return(result);
    }