예제 #1
0
    // Swaps a single tile out for another
    public void swapTile(Vector3 tilePos, BaseTile.TileTypes newType)
    {
        // Convert to tile
        BaseTile tile = tileMap[(int)tilePos.z][(int)tilePos.x];
        // Convert to list
        List <BaseTile> tempList = new List <BaseTile>();

        tempList.Add(tile);
        swapTiles(tempList, newType);
    }
예제 #2
0
    // Swaps tiles out for others
    public void swapTiles(List <BaseTile> tiles, BaseTile.TileTypes newType)
    {
        foreach (BaseTile tile in tiles)
        {
            // Chasm
            if (newType == BaseTile.TileTypes.Chasm)
            {
                GameObject newTile = Instantiate(chasmTile, new Vector3(tile.tilePos.x + tile.tilePos.x * tileSpacing, 0, tile.tilePos.y + tile.tilePos.y * tileSpacing), transform.rotation, transform);
                newTile.GetComponent <BaseTile>().unitOnTile = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].GetComponent <BaseTile>().unitOnTile;
                // Change the layer to visible
                foreach (Transform child in newTile.GetComponentsInChildren <Transform>())
                {
                    child.gameObject.layer = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject.layer;
                }

                Destroy(tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject);
                tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x] = newTile.GetComponent <BaseTile>();
                newTile.GetComponent <BaseTile>().init(new Vector2((int)tile.tilePos.x, (int)tile.tilePos.y));
                newTile.transform.Rotate(new Vector3(0, Random.Range(1, 5) * 90, 0));
            }
            // Bridge
            else if (newType == BaseTile.TileTypes.Bridge)
            {
                int        tileChoice = Random.Range(0, bridgeTiles.Count);
                GameObject newTile    = Instantiate(bridgeTiles[tileChoice], new Vector3(tile.tilePos.x + tile.tilePos.x * tileSpacing, 0, tile.tilePos.y + tile.tilePos.y * tileSpacing), transform.rotation, transform);
                newTile.GetComponent <BaseTile>().unitOnTile = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].GetComponent <BaseTile>().unitOnTile;
                // Change the layer to visible
                foreach (Transform child in newTile.GetComponentsInChildren <Transform>())
                {
                    child.gameObject.layer = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject.layer;
                }

                Destroy(tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject);
                tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x] = newTile.GetComponent <BaseTile>();
                newTile.GetComponent <BaseTile>().init(new Vector2((int)tile.tilePos.x, (int)tile.tilePos.y));
                newTile.GetComponent <BaseTile>().finishReveal = true;
            }
            // Flooded River
            else if (newType == BaseTile.TileTypes.River)
            {
                int        tileChoice = Random.Range(0, riverTiles.Count);
                GameObject newTile    = Instantiate(riverTiles[tileChoice], new Vector3(tile.tilePos.x + tile.tilePos.x * tileSpacing, 0, tile.tilePos.y + tile.tilePos.y * tileSpacing), transform.rotation, transform);
                newTile.GetComponent <BaseTile>().unitOnTile = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].GetComponent <BaseTile>().unitOnTile;
                // Change the layer to visible
                foreach (Transform child in newTile.GetComponentsInChildren <Transform>())
                {
                    child.gameObject.layer = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject.layer;
                }

                Destroy(tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject);
                tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x] = newTile.GetComponent <BaseTile>();
                newTile.GetComponent <BaseTile>().init(new Vector2((int)tile.tilePos.x, (int)tile.tilePos.y));
                newTile.GetComponent <BaseTile>().finishReveal = true;
                newTile.transform.Rotate(new Vector3(0, Random.Range(1, 5) * 90, 0));
            }
            // Flattened Mountain
            else if (newType == BaseTile.TileTypes.Grass)
            {
                int        tileChoice = Random.Range(0, grassTiles.Count);
                GameObject newTile    = Instantiate(grassTiles[tileChoice], new Vector3(tile.tilePos.x + tile.tilePos.x * tileSpacing, 0, tile.tilePos.y + tile.tilePos.y * tileSpacing), transform.rotation, transform);
                newTile.GetComponent <BaseTile>().unitOnTile = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].GetComponent <BaseTile>().unitOnTile;
                // Change the layer to visible
                foreach (Transform child in newTile.GetComponentsInChildren <Transform>())
                {
                    child.gameObject.layer = tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject.layer;
                }
                Destroy(tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x].gameObject);
                tileMap[(int)tile.tilePos.y][(int)tile.tilePos.x] = newTile.GetComponent <BaseTile>();
                newTile.GetComponent <BaseTile>().init(new Vector2((int)tile.tilePos.x, (int)tile.tilePos.y));
                newTile.GetComponent <BaseTile>().finishReveal = true;
                revealTiles(tile.transform.position, 0.1f);
                newTile.transform.Rotate(new Vector3(0, Random.Range(1, 5) * 90, 0));
            }
        }
    }
예제 #3
0
    public void getLevel(int levelNum)
    {
        setFilePath();

        //level num is a string so that it can separate and also be more specific - e.g. 001 instead of 1. There is reason to my madness.
        string        levelFile  = File.ReadAllText(filePath + "LevelData.txt");
        List <string> levelSplit = levelFile.Split(';').ToList <string>();

        Debug.Log(levelSplit.Count); //last index is blank
        Debug.Log(levelSplit[levelToLoad]);

        string fullLevelString = levelSplit[(levelNum)].TrimStart('|');

        levelSplit = fullLevelString.Split('|').ToList <string>();

        List <BaseTile>   existingTiles = GameObject.Find("SquareGrid").transform.GetComponentsInChildren <BaseTile>().ToList();
        List <Vector2Int> tileCoords    = new List <Vector2Int>();

        //get tile coordinates
        for (int tileNum = 0; tileNum < existingTiles.Count; tileNum++)
        {
            Vector2Int V2Extract;
            ExtractVector2Int(existingTiles[tileNum].name, out V2Extract);
            tileCoords.Insert(tileNum, V2Extract);
        }

        Debug.Log("Remember to clear, create and rename the grid before this");

        //set our custom tiles
        for (int i = (levelToLoad == 0) ? 0 : 1; i < levelSplit.Count; i++)
        {
            string tileInfo = levelSplit[i];
            Debug.Log("TileInfo: " + tileInfo);

            Debug.Log(tileInfo + " is getting tileType");
            //extract tile type
            BaseTile.TileTypes tileType = (BaseTile.TileTypes)System.Enum.Parse(typeof(BaseTile.TileTypes), tileInfo.Substring(0, tileInfo.IndexOf('(')));

            //extract tile coords
            Vector2Int V2Extract;
            ExtractVector2Int(tileInfo, out V2Extract);

            //get current and set tile values
            int      findNum = tileCoords.IndexOf(V2Extract);
            BaseTile target  = existingTiles[findNum];
            target = BaseTile.ChangeTo(tileType, target);
            //***********get target return yeehaw

            //set satellite/output values
            if (tileInfo.Contains("+"))
            {
                string extraVal = tileInfo.Substring(tileInfo.IndexOf('+'));
                if (target.tileType == BaseTile.TileTypes.Satalite)
                {
                    ExtractVector2Int(extraVal, out V2Extract);
                    (target as Satellite).ReflectDirection = V2Extract;
                }
                if (target.tileType == BaseTile.TileTypes.LightOutput)
                {
                    string[] extraVals = extraVal.Split('+');
                    //0 is a blank value... much better ways to do this but I am being #lazy
                    bool doneDirection = false;
                    foreach (string val in extraVals)
                    {
                        if (doneDirection == false && val.Length > 1)
                        {
                            //light direction
                            ExtractVector2Int(val, out V2Extract);
                            Debug.Log(extraVal + " returned " + val + " to " + V2Extract);
                            (target as LightOutput).LightDirection = V2Extract;
                        }
                        else if (val.Length > 1)
                        {
                            //target colour
                            TileColor col = new TileColor();
#if VIV_ToDo
                            extractColor(val, out col);
#endif
                            (target as LightOutput).OutputColour = col;
                            Debug.Log("Got Colour: " + col);
                        }
                    }
                }
                if (target.tileType == BaseTile.TileTypes.LightTarget)
                {
                    TileColor col = new TileColor();
#if VIV_ToDo
                    extractColor(extraVal, out col);
#endif
                    (target as TargetTile).TargetColour = col;
                    Debug.Log("Got Colour: " + col);
                }
            }
        }
    }