예제 #1
0
    public void GenerateMapForEdit(Declarations.IntVector2 mapSize, Declarations.TileType[,] map)
    {
        ClearMap();
        MapSize = mapSize;
        Map     = new Tile[MapSize.y, MapSize.x];
        for (int row = 0; row < MapSize.y; row++)
        {
            for (int col = 0; col < MapSize.x; col++)
            {
                Vector3 tilePosition = Helpers.GetPositionForTile(row, col);

                var tileObj = Instantiate(editTile, tilePosition, Quaternion.identity, transform).GetComponent <EditableTile>();
                tileObj.SetData(row, col, map[row, col]);
                Map[row, col] = tileObj;
            }
        }
    }
예제 #2
0
    private static bool ReadMapData(XElement mapElement, out Declarations.IntVector2 mapSize, out Declarations.TileType[,] map, bool canHaveEmptyTiles)
    {
        var result = true;
        var width  = mapElement.Attribute(Constants.cst_Width);
        var height = mapElement.Attribute(Constants.cst_Height);

        if (width != null && height != null && !string.IsNullOrEmpty(width.Value) && !string.IsNullOrEmpty(height.Value))
        {
            mapSize = new Declarations.IntVector2(int.Parse(width.Value), int.Parse(height.Value));
            map     = new Declarations.TileType[mapSize.y, mapSize.x];

            var lines = mapElement.Value.Trim().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            if (lines.Count() == mapSize.y)
            {
                for (int row = 0; row < mapSize.y; row++)
                {
                    var line = lines[row].Trim();
                    if (line.Count() == mapSize.x)
                    {
                        for (int col = 0; col < mapSize.x; col++)
                        {
                            Declarations.TileType tileType;
                            if (Helpers.GetTileType(line[col], out tileType, canHaveEmptyTiles))
                            {
                                map[row, col] = tileType;
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                return(true);
            }
        }
        mapSize = null;
        map     = null;
        return(result);
    }
예제 #3
0
 public void SetBrushSize(float value)
 {
     BrushSize       = (int)value * 1.4f;
     CurrectMousePos = new Declarations.IntVector2(-5, -5);
     UpdateTiles.Invoke();
 }
예제 #4
0
 public void ChangeMousePos(Declarations.IntVector2 mousePos)
 {
     CurrectMousePos = mousePos;
     UpdateTiles.Invoke();
 }
예제 #5
0
    public void GenerateMap(Declarations.LevelData levelData)
    {
        ClearMap();
        var startTime = Time.realtimeSinceStartup;

        MapSize = new Declarations.IntVector2(levelData.MapSize.x + (LeftRightBorderSize * 2), levelData.MapSize.y + TopBorderSize + BotBorderSize);

        CurrentLevel = levelData;
        TileTypeMap  = new Declarations.TileType[MapSize.y, MapSize.x];
        for (int row = 0; row < levelData.MapSize.y; row++)
        {
            for (int col = 0; col < levelData.MapSize.x; col++)
            {
                TileTypeMap[row + TopBorderSize, col + LeftRightBorderSize] = levelData.Map[row, col];
            }
        }
        int[,] heightMap = GenerateHeightMapForCurrentLevel();
        var heightMapGeneration = Time.realtimeSinceStartup - startTime;

        Map = new Tile[MapSize.y, MapSize.x];
        for (int row = 0; row < MapSize.y; row++)
        {
            for (int col = 0; col < MapSize.x; col++)
            {
                var tile             = GetObjectByTileType(TileTypeMap[row, col]);
                var tilePosition     = Helpers.GetPositionForTile(row - TopBorderSize, col - LeftRightBorderSize);
                var tileRealPosition = tilePosition;

                if (TileTypeMap[row, col] == Declarations.TileType.Grass || TileTypeMap[row, col] == Declarations.TileType.Environment)
                {
                    var randomFactor = GetRandomFactor(heightMap[row, col]);

                    var lift = heightMap[row, col] * 0.4f;
                    lift += UnityEngine.Random.Range(-randomFactor, randomFactor);
                    if (lift > 0)
                    {
                        tileRealPosition.y = lift;
                    }
                }

                var tileObj = Instantiate(tile, tileRealPosition, Quaternion.identity, transform).GetComponent <Tile>();
                tileObj.SetData(row, col, TileTypeMap[row, col]);
                tileObj.transform.rotation = Quaternion.Euler(new Vector3(0,
                                                                          (UnityEngine.Random.Range(0, 2) +
                                                                           UnityEngine.Random.Range(0, 2) +
                                                                           UnityEngine.Random.Range(0, 2) +
                                                                           UnityEngine.Random.Range(0, 2) +
                                                                           UnityEngine.Random.Range(0, 2)) * 60, 0));
                Map[row, col] = tileObj;

                if (tileRealPosition.y > 0)
                {
                    var lifterObj = Instantiate(Lifter, tilePosition, tileObj.transform.rotation, tileObj.transform).GetComponent <Lifter>();
                    lifterObj.transform.localScale = new Vector3(1, tileRealPosition.y, 1);

                    tileObj.SetLifter(lifterObj);
                    lifterObj.SetTile(tileObj);
                }
            }
        }

        var tilePlacement = Time.realtimeSinceStartup - startTime - heightMapGeneration;

        PutObjectives();
        RotateSpawner();
        var finishingTouches = Time.realtimeSinceStartup - startTime - heightMapGeneration - tilePlacement;

        Debug.Log("Total Seconds for new map generation: " + (Time.realtimeSinceStartup - startTime));
        Debug.Log("Seconds for height map generation: " + heightMapGeneration);
        Debug.Log("Seconds for tile placement: " + tilePlacement);
        Debug.Log("Seconds for finishing touches: " + finishingTouches);
    }