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); } } } }
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); } } }