Beispiel #1
0
    // ----------------------------------------------------------------
    //  Initialize
    // ----------------------------------------------------------------
    public LevelData(LevelAddress myAddress, LevelDataXML ldxml)
    {
        // Basic properties
        this.myAddress = myAddress;
        boardData      = new BoardData(ldxml);
        startingZoom   = ldxml.zoom;

        // LOAD up stats!
        DidCompleteLevel = SaveStorage.GetBool(SaveKeys.DidCompleteLevel(myAddress));
    }
Beispiel #2
0
    // ----------------------------------------------------------------
    //  Initialize
    // ----------------------------------------------------------------
    public BoardData(LevelDataXML ldxml)
    {
        wrapH = BoardUtils.IntToWrapType(ldxml.wrapH);
        wrapV = BoardUtils.IntToWrapType(ldxml.wrapV);

        // Layout!
        string[] levelStringArray = GetLevelStringArrayFromLayoutString(ldxml.layout);
        if (levelStringArray.Length == 0)
        {
            levelStringArray = new string[] { "." };
        }                                // Safety catch.

        int numLayoutLayers = 1;         // will increment for every "", we find.

        for (int i = 0; i < levelStringArray.Length; i++)
        {
            if (levelStringArray[i].Length == 0)               // We found a break that denotes another layer of layout!
            {
                numLayoutLayers++;
            }
        }

        // Set numCols and numRows!
        if (levelStringArray.Length == 0)
        {
            Debug.LogError("Uhh! levelStringArray is empty!");
        }
        numCols = levelStringArray[0].Length;
        numRows = (int)((levelStringArray.Length - numLayoutLayers + 1) / numLayoutLayers);

        // Add all gameplay objects!
        MakeEmptyBoardSpaces();
        MakeEmptyLists();

        objectsInBoard = new BoardObjectData[numCols, numRows];

        for (int layer = 0; layer < numLayoutLayers; layer++)
        {
            for (int i = 0; i < numCols; i++)
            {
                for (int j = 0; j < numRows; j++)
                {
                    int stringArrayIndex = j + layer * (numRows + 1);
                    if (stringArrayIndex >= levelStringArray.Length || i >= levelStringArray[stringArrayIndex].Length)
                    {
                        Debug.LogError("Whoops! Mismatch in layout in a board layout XML. " + stringArrayIndex + ", " + i);
                        continue;
                    }
                    char spaceChar = (char)levelStringArray[stringArrayIndex][i];
                    int  col       = i;
                    int  row       = numRows - 1 - j;
                    switch (spaceChar)
                    {
                    // BoardSpace properties!
                    case '~': GetSpaceData(col, row).isPlayable = false; break;

                    // ExitSpot!
                    case '$': AddExitSpotData(col, row); break;

                    // Player!
                    case '@': AddPlayerData(col, row); break;

                    // Void!
                    case 'V': AddVoydData(col, row, false); break;

                    case 'v': AddVoydData(col, row, true); break;

                    // Beams!
                    case 't': AddBeamGoalData(col, row, Sides.T, 0); break;

                    case 'y': AddBeamGoalData(col, row, Sides.R, 0); break;

                    case 'h': AddBeamGoalData(col, row, Sides.B, 0); break;

                    case 'g': AddBeamGoalData(col, row, Sides.L, 0); break;

                    case 'T': AddBeamSourceData(col, row, Sides.T, 0); break;

                    case 'Y': AddBeamSourceData(col, row, Sides.R, 0); break;

                    case 'H': AddBeamSourceData(col, row, Sides.B, 0); break;

                    case 'G': AddBeamSourceData(col, row, Sides.L, 0); break;

                    case 'u': AddBeamGoalData(col, row, Sides.T, 1); break;

                    case 'i': AddBeamGoalData(col, row, Sides.R, 1); break;

                    case 'k': AddBeamGoalData(col, row, Sides.B, 1); break;

                    case 'j': AddBeamGoalData(col, row, Sides.L, 1); break;

                    case 'U': AddBeamSourceData(col, row, Sides.T, 1); break;

                    case 'I': AddBeamSourceData(col, row, Sides.R, 1); break;

                    case 'K': AddBeamSourceData(col, row, Sides.B, 1); break;

                    case 'J': AddBeamSourceData(col, row, Sides.L, 1); break;

                    // Crates!
                    case 'q': AddCrateGoalData(col, row, Corners.TL, false); break;

                    case 'w': AddCrateGoalData(col, row, Corners.TR, false); break;

                    case 's': AddCrateGoalData(col, row, Corners.BR, false); break;

                    case 'a': AddCrateGoalData(col, row, Corners.BL, false); break;

                    case 'e': AddCrateGoalData(col, row, Corners.TL, true); break;

                    case 'r': AddCrateGoalData(col, row, Corners.TR, true); break;

                    case 'f': AddCrateGoalData(col, row, Corners.BR, true); break;

                    case 'd': AddCrateGoalData(col, row, Corners.BL, true); break;

                    case 'Q': AddCrateData(col, row, Corners.TL, false); break;

                    case 'W': AddCrateData(col, row, Corners.TR, false); break;

                    case 'S': AddCrateData(col, row, Corners.BR, false); break;

                    case 'A': AddCrateData(col, row, Corners.BL, false); break;

                    case 'E': AddCrateData(col, row, Corners.TL, true); break;

                    case 'R': AddCrateData(col, row, Corners.TR, true); break;

                    case 'F': AddCrateData(col, row, Corners.BR, true); break;

                    case 'D': AddCrateData(col, row, Corners.BL, true); break;

                    //case 'O': AddCrateData (col,row, true); break;
                    //case '#': AddCrateData (col,row, false); break;
                    // Walls!
                    case '_': SetIsWallT(col, row - 1); break;                   // note: because the underscore looks lower, consider it in the next row (so layout text file looks more intuitive).

                    case '|': SetIsWallL(col, row); break;

                    // MODIFYING properties...
                    case 'Z': FlipChirH(col, row); break;

                    case 'X': FlipChirV(col, row); break;

                    case 'm': SetNotMovable(col, row); break;
                    }
                }
            }
        }

        // Safety check.
        if (playerDatas.Count == 0)
        {
            AddPlayerData(0, 0);
        }

        // We can empty out those lists now.
        objectsInBoard = null;
    }
Beispiel #3
0
    // ----------------------------------------------------------------
    //  Initialize
    // ----------------------------------------------------------------
    public BoardData(LevelDataXML ldxml)
    {
        // Layout!
        string[] levelStringArray = GetLevelStringArrayFromLayoutString(ldxml.layout);
        if (levelStringArray.Length == 0)
        {
            levelStringArray = new string[] { "." };
        }                                // Safety catch.

        int numLayoutLayers = 1;         // will increment for every "", we find.

        for (int i = 0; i < levelStringArray.Length; i++)
        {
            if (levelStringArray[i].Length == 0)               // We found a break that denotes another layer of layout!
            {
                numLayoutLayers++;
            }
        }

        // Set numCols and numRows!
        if (levelStringArray.Length == 0)
        {
            Debug.LogError("Uhh! levelStringArray is empty!");
        }
        numCols = levelStringArray[0].Length;
        numRows = (int)((levelStringArray.Length - numLayoutLayers + 1) / numLayoutLayers);

        // Add all gameplay objects!
        MakeEmptyBoardSpaces();
        MakeEmptyLists();

        tilesInBoard = new TileData[numCols, numRows];

        for (int layer = 0; layer < numLayoutLayers; layer++)
        {
            for (int i = 0; i < numCols; i++)
            {
                for (int j = 0; j < numRows; j++)
                {
                    int stringArrayIndex = j + layer * (numRows + 1);
                    if (stringArrayIndex >= levelStringArray.Length || i >= levelStringArray[stringArrayIndex].Length)
                    {
                        Debug.LogError("Whoops! Mismatch in layout in a board layout XML. " + stringArrayIndex + ", " + i);
                        continue;
                    }
                    char spaceChar = (char)levelStringArray[stringArrayIndex][i];
                    int  col       = i;
                    int  row       = numRows - 1 - j;
                    switch (spaceChar)
                    {
                    // BoardSpace properties!
                    case '~': GetSpaceData(col, row).isPlayable = false; break;

                    // Walls!
                    case '_': SetIsWallT(col, row - 1); break; // note: because the underscore looks lower, consider it in the next row (so layout text file looks more intuitive).

                    case '|': SetIsWallL(col, row); break;

                    // GenericTiles!
                    case '@': AddGenericTileData(TileType.Abba, col, row); break;

                    case '#': AddGenericTileData(TileType.Brick, col, row); break;

                    case '*': AddGenericTileData(TileType.Crate, col, row); break;

                    case '$': AddGenericTileData(TileType.Star, col, row); break;

                    // TextBlocks!
                    case '=': AddTextBlockData(TileType.Is, col, row); break;

                    case 'd': AddTextBlockData(TileType.Destroys, col, row); break;

                    case 'g': AddTextBlockData(TileType.OverlapGoal, col, row); break;

                    case 'p': AddTextBlockData(TileType.Push, col, row); break;

                    case 's': AddTextBlockData(TileType.Stop, col, row); break;

                    case 'y': AddTextBlockData(TileType.You, col, row); break;

                    case 'A': AddTextBlockData(TileType.Abba, col, row); break;

                    case 'B': AddTextBlockData(TileType.Brick, col, row); break;

                    case 'C': AddTextBlockData(TileType.Crate, col, row); break;

                    case 'S': AddTextBlockData(TileType.Star, col, row); break;

                    // TESTING TextBlocks!!
                    case 'i': AddTextBlockData(TileType.If, col, row); break;

                    case 't': AddTextBlockData(TileType.Then, col, row); break;

                    case 'e': AddTextBlockData(TileType.Else, col, row); break;

                    case '!': AddTextBlockData(TileType.Not, col, row); break;

                    case 'a': AddTextBlockData(TileType.And, col, row); break;

                    case 'o': AddTextBlockData(TileType.Or, col, row); break;

                    case 'T': AddTextBlockData(TileType.True, col, row); break;

                    case 'F': AddTextBlockData(TileType.False, col, row); break;

                    case 'w': AddTextBlockData(TileType.Win, col, row); break;

                    case 'l': AddTextBlockData(TileType.Lose, col, row); break;

                    case 'X': AddTextBlockData(TileType.X, col, row); break;

                    case 'Y': AddTextBlockData(TileType.Y, col, row); break;

                    case 'Z': AddTextBlockData(TileType.Z, col, row); break;
                    }
                }
            }
        }

        // We can empty out those lists now.
        tilesInBoard = null;
    }