コード例 #1
0
    private void ParseStringsAndCreateGameObjects(VerticalDefinition itemVerticalDefinition, int col, int row, bool lookAtVerticalDefinitions)
    {
        var id          = itemVerticalDefinition.Id;
        var startHeight = itemVerticalDefinition.StartHeight;

        if (id.StartsWith(Constants.CUBE_PREFIX))
        {
            var height = Convert.ToInt32(id.Substring(Constants.CUBE_PREFIX.Length));
            CreateCube(height, col, row, startHeight);
        }
        else if (id.StartsWith(Constants.GATE_PREFIX))
        {
            var periodIndex  = id.IndexOf('.', Constants.GATE_PREFIX.Length);
            var height       = Convert.ToInt32(id.Substring(Constants.GATE_PREFIX.Length, periodIndex - Constants.GATE_PREFIX.Length));
            var buttonNumber = Convert.ToInt32(id.Substring(periodIndex + 1));

            CreateGate(height, col, row, startHeight, buttonNumber);
        }
        else if (id.StartsWith(Constants.NO_TOGGLE_BUTTON_PREFIX))
        {
            var buttonNumber = Convert.ToInt32(id.Substring(Constants.NO_TOGGLE_BUTTON_PREFIX.Length));
            CreateButton(col, row, startHeight, buttonNumber, isToggle: false);
        }
        else if (id.StartsWith(Constants.TOGGLE_BUTTON_PREFIX))
        {
            var buttonNumber = Convert.ToInt32(id.Substring(Constants.TOGGLE_BUTTON_PREFIX.Length));
            CreateButton(col, row, startHeight, buttonNumber, isToggle: true);
        }
        else if (id.StartsWith(Constants.BOX_PREFIX))
        {
            var boxHeight = Convert.ToInt32(id.Substring(Constants.BOX_PREFIX.Length));
            CreateBox(boxHeight, col, row, startHeight);
        }
        else if (id.StartsWith(Constants.LAVA_PREFIX))
        {
            var lavaHeight = Convert.ToInt32(id.Substring(Constants.LAVA_PREFIX.Length));
            CreateLava(lavaHeight, col, row, startHeight);
        }
        else if (id.StartsWith(Constants.PICKUP_PREFIX))
        {
            var periodIndex = id.IndexOf('.', Constants.PICKUP_PREFIX.Length);
            var pickupType  = id.Substring(Constants.PICKUP_PREFIX.Length, periodIndex - Constants.PICKUP_PREFIX.Length);
            var value       = Convert.ToInt32(id.Substring(periodIndex + 1));

            CreatePickup(pickupType, value, col, row, startHeight);
        }
        else if (id.StartsWith(Constants.PLATFORM_PREFIX))
        {
            var periodIndex  = id.IndexOf('.', Constants.PLATFORM_PREFIX.Length);
            var periodIndex2 = id.IndexOf('.', periodIndex + 1);
            var periodIndex3 = id.IndexOf(".", periodIndex2 + 1);

            var platNumber = Convert.ToInt32(id.Substring(Constants.PLATFORM_PREFIX.Length, periodIndex - Constants.PLATFORM_PREFIX.Length));
            var platPos    = Convert.ToInt32(id.Substring(periodIndex + 1, periodIndex2 - (periodIndex + 1)));
            var platHeight = Convert.ToInt32(id.Substring(periodIndex2 + 1, periodIndex3 - (periodIndex2 + 1)));
            var platTimer  = Convert.ToInt32(id.Substring(periodIndex3 + 1));

            CreatePlatform(platNumber, platPos, platTimer, col, row, platHeight);
        }
        else if (id.StartsWith(Constants.ENEMY_PREFIX))
        {
            var periodIndex  = id.IndexOf('.', Constants.ENEMY_PREFIX.Length);
            var periodIndex2 = id.IndexOf('.', periodIndex + 1);

            var enemyNumber = Convert.ToInt32(id.Substring(Constants.ENEMY_PREFIX.Length, periodIndex - Constants.ENEMY_PREFIX.Length));
            var enemyPos    = Convert.ToInt32(id.Substring(periodIndex + 1, periodIndex2 - (periodIndex + 1)));
            var moveTime    = Convert.ToInt32(id.Substring(periodIndex2 + 1));

            CreateEnemy(enemyNumber, enemyPos, moveTime, col, row, startHeight);
        }
        else if (lookAtVerticalDefinitions)
        {
            var verticalDefinitionList = GetVerticalDefinitionList(id);
            if (verticalDefinitionList == null)
            {
                Debug.Log("Could not find height definition for " + id);
            }
            else
            {
                foreach (var verticalDefinition in verticalDefinitionList)
                {
                    // Doesn't allow nesting of vertical definitions within vertical definitions.
                    ParseStringsAndCreateGameObjects(verticalDefinition, col, row, lookAtVerticalDefinitions: false);
                }
            }
        }
    }
コード例 #2
0
    private void SetupLevelContents(LevelDefinition levelDefinition)
    {
        // Ensure # of items in levelBase is equal to specified length/width
        if (_planeXScale * _planeZScale != levelDefinition.LevelBase.Count)
        {
            throw new ArgumentNullException("Invalid JSON. LevelBase size does not match length/width arguments.");
        }

        for (int i = 0; i < levelDefinition.LevelBase.Count; i++)
        {
            var item = levelDefinition.LevelBase[i];
            if (item == "0")
            {
                continue;
            }

            var row = i / _planeXScale;
            var col = i % _planeXScale;

            VerticalDefinition itemVerticalDefinition = new VerticalDefinition()
            {
                Id          = item,
                StartHeight = 0
            };

            ParseStringsAndCreateGameObjects(itemVerticalDefinition, col, row, lookAtVerticalDefinitions: true);
        }

        // Update platform positions and timers
        foreach (var key in Platforms.Keys)
        {
            var platform   = Platforms[key];
            var controller = platform.GetComponent <PlatformController>();

            for (int i = 0; i < PlatformPositions[key].Count; i++)
            {
                var position = PlatformPositions[key][i];
                controller.Positions.Add(position);
            }

            for (int i = 0; i < PlatformMoveTimes[key].Count; i++)
            {
                var moveTime = PlatformMoveTimes[key][i];
                controller.SecondsToReachTarget.Add(moveTime);
            }
        }

        // Update enemy positions
        foreach (var key in Enemies.Keys)
        {
            var enemy      = Enemies[key];
            var controller = enemy.GetComponent <EnemyController>();

            if (EnemyPositions[key].Count > 0)
            {
                controller.StartPosition = EnemyPositions[key][0];
                controller.EndPosition   = EnemyPositions[key][1];
            }
            else
            {
                Debug.Log("No Start/End pos for enemy #" + key);
            }
        }
    }