private Transform CreateButton(int col, int row, int startHeight, int buttonNumber, bool isToggle) { // Button dimensions are the same as the prefab, so I don't change them here. var button = _assetPool.SpawnTransform(Constants.TAG_BUTTON); button.GetComponent <Collider>().material = noFrictionMaterial; var buttonCoordinates = new Vector3(col, startHeight, row); var buttonDimensions = new Vector3(.5f, .25f, .5f); button.position = TransformUtils.GetLocalPositionFromGridCoordinates(buttonCoordinates, buttonDimensions); button.name = CreateUniqueItemName(Constants.TAG_BUTTON + "_" + (isToggle ? "T_" : "NT_") + buttonNumber); button.GetComponent <ButtonController>().Toggleable = isToggle; // If gates already exist for this button, make sure to assign this button to them. List <Transform> gatesList; if (Gates.TryGetValue(buttonNumber, out gatesList)) { foreach (var gate in gatesList) { gate.GetComponent <GateController>().Button = button.gameObject; } } Buttons[buttonNumber] = button.gameObject; return(button); }
private Transform CreateBox(float height, int col, int row, int startHeight) { var box = _assetPool.SpawnTransform(Constants.TAG_BOX); box.GetComponent <Collider>().material = noFrictionMaterial; box.localScale = new Vector3(1f, height, 1f); var boxCoordinates = new Vector3(col, startHeight, row); var boxDimensions = new Vector3(1f, height, 1f); box.position = TransformUtils.GetLocalPositionFromGridCoordinates(boxCoordinates, boxDimensions); box.name = CreateUniqueItemName(Constants.TAG_BOX + "_" + height); return(box); }
private Transform CreateLava(float height, int col, int row, int startHeight) { var lava = _assetPool.SpawnTransform(Constants.TAG_LAVA); lava.GetComponent <Collider>().material = noFrictionMaterial; lava.localScale = new Vector3(1f, height, 1f); var lavaCoordinates = new Vector3(col, startHeight, row); var lavaDimensions = new Vector3(1f, height, 1f); lava.position = TransformUtils.GetLocalPositionFromGridCoordinates(lavaCoordinates, lavaDimensions); lava.name = CreateUniqueItemName(Constants.TAG_LAVA + "_" + height); return(lava); }
private Transform CreateEnemy(int enemyNumber, int positionNumber, int moveTime, int col, int row, int startHeight) { // Create the platform if it doesn't exist yet. Transform enemy; if (!Enemies.TryGetValue(enemyNumber, out enemy)) { enemy = _assetPool.SpawnTransform(Constants.TAG_ENEMY); enemy.GetComponent <Collider>().material = noFrictionMaterial; enemy.name = CreateUniqueItemName(Constants.TAG_ENEMY); var controller = enemy.GetComponent <EnemyController>(); controller.TimeToReachNextPos = moveTime; Enemies[enemyNumber] = enemy; } // Determine where this point falls on the grid. var pointCoordinates = new Vector3(col, startHeight, row); // For some reason cylinders in unity start with a default height of 2, so player_height is scaled to half. var enemyDimensions = new Vector3(Constants.ENEMY_WIDTH, 1f, Constants.ENEMY_LENGTH); var enemyPosition = TransformUtils.GetLocalPositionFromGridCoordinates(pointCoordinates, enemyDimensions); // Add the position to EnemyPositions List <Vector3> positions; if (!EnemyPositions.TryGetValue(enemyNumber, out positions)) { positions = new List <Vector3>(); } while (positionNumber >= positions.Count) { positions.Add(Vector3.zero); } positions[positionNumber] = enemyPosition; EnemyPositions[enemyNumber] = positions; // Set the platform start location if (positionNumber == 0) { enemy.position = enemyPosition; Enemies[enemyNumber] = enemy; } return(enemy); }
private Transform CreatePickup(string pickupType, int value, int col, int row, int startHeight) { var pickup = _assetPool.SpawnTransform(Constants.TAG_PICKUP); pickup.GetComponent <Collider>().material = noFrictionMaterial; var pickupCoordinates = new Vector3(col, startHeight, row); pickup.position = TransformUtils.GetLocalPositionFromGridCoordinates(pickupCoordinates, pickup.transform.localScale); pickup.name = CreateUniqueItemName(Constants.TAG_PICKUP + "_" + pickupType + "_" + value); var pickupController = pickup.GetComponent <PickupController>(); pickupController.Value = value; pickupController.PickupEffect = pickupType; return(pickup); }
private GameObject CreateCube(float height, int col, int row, int startHeight) { var cube = _assetPool.SpawnTransform(Constants.TAG_OBSTACLE).gameObject; cube.GetComponent <Collider>().material = noFrictionMaterial; cube.transform.localScale = new Vector3(1f, height, 1f); var cubeCoordinates = new Vector3(col, startHeight, row); var cubeDimensions = new Vector3(1f, height, 1f); cube.transform.position = TransformUtils.GetLocalPositionFromGridCoordinates(cubeCoordinates, cubeDimensions); cube.transform.parent = NonInteractableObjectsContainer.transform; cube.name = CreateUniqueItemName(Constants.TAG_OBSTACLE + "_" + height); return(cube); }
private Transform CreateGate(float height, int col, int row, int startHeight, int buttonNumber) { var gate = _assetPool.SpawnTransform(Constants.TAG_GATE); gate.GetComponent <Collider>().material = noFrictionMaterial; gate.localScale = new Vector3(1f, height, 1f); var gateCoordinates = new Vector3(col, startHeight, row); var gateDimensions = new Vector3(1f, height, 1f); gate.position = TransformUtils.GetLocalPositionFromGridCoordinates(gateCoordinates, gateDimensions); gate.name = CreateUniqueItemName(Constants.TAG_GATE + "_H" + height + "_" + buttonNumber); // If button has not been created yet, create an empty GameObject that will be replaced later. GameObject button; if (!Buttons.TryGetValue(buttonNumber, out button)) { button = null; Buttons[buttonNumber] = button; } gate.GetComponent <GateController>().Button = button; List <Transform> gatesList; if (!Gates.TryGetValue(buttonNumber, out gatesList)) { Gates[buttonNumber] = new List <Transform> { gate }; } else { Gates[buttonNumber].Add(gate); } return(gate); }
public void SetupLevel(string levelName) { if (levelName == "") { return; } _itemCounts = new Dictionary <string, int>(); LevelDefinition levelDefinition; LevelParser.ParseLevelJson(levelName, out levelDefinition); // Create level based on contents of levelDefinition if (levelDefinition == null) { throw new ArgumentNullException("levelDefinition is null, cannot parse and create level."); } else { _planeXScale = levelDefinition.X_Scale; _planeZScale = levelDefinition.Z_Scale; ScalePlane(); CreateOuterWalls(); _verticalDefinitionsList = levelDefinition.VerticalDefinitions; SetupLevelContents(levelDefinition); var playerCoordinates = new Vector3(levelDefinition.Player.X, levelDefinition.Player.Y, levelDefinition.Player.Z); // For some reason cylinders in unity start with a default height of 2, so player_height is scaled to half. var playerDimensions = new Vector3(Constants.PLAYER_WIDTH, 1f, Constants.PLAYER_LENGTH); _player.transform.position = TransformUtils.GetLocalPositionFromGridCoordinates(playerCoordinates, playerDimensions); _player.GetComponent <PlayerController>().Energy = 0; var flagCoordinates = new Vector3(levelDefinition.Flag.X, levelDefinition.Flag.Y, levelDefinition.Flag.Z); _flag.transform.position = TransformUtils.GetLocalPositionFromGridCoordinates(flagCoordinates, new Vector3(1f, 1f, 1f)); } }
private Transform CreatePlatform(int platformNumber, int positionNumber, int moveTime, int col, int row, int startHeight) { // Create the platform if it doesn't exist yet. Transform platform; if (!Platforms.TryGetValue(platformNumber, out platform)) { platform = _assetPool.SpawnTransform(Constants.TAG_PLATFORM); platform.GetComponent <Collider>().material = noFrictionMaterial; platform.name = CreateUniqueItemName(Constants.TAG_PLATFORM); var controller = platform.GetComponent <PlatformController>(); controller.Positions = new List <Vector3>(); controller.SecondsToReachTarget = new List <int>(); Platforms[platformNumber] = platform; } // Determine where this point falls on the grid. var pointCoordinates = new Vector3(col, startHeight, row); var platformDimensions = platform.localScale; var platformPosition = TransformUtils.GetLocalPositionFromGridCoordinates(pointCoordinates, platformDimensions); // Add the position to PlatformPositions List <Vector3> positions; if (!PlatformPositions.TryGetValue(platformNumber, out positions)) { positions = new List <Vector3>(); } while (positionNumber >= positions.Count) { positions.Add(Vector3.zero); } positions[positionNumber] = platformPosition; PlatformPositions[platformNumber] = positions; // Add the move time to PlatformMoveTimes List <int> moveTimes; if (!PlatformMoveTimes.TryGetValue(platformNumber, out moveTimes)) { moveTimes = new List <int>(); } while (positionNumber >= moveTimes.Count) { moveTimes.Add(0); } moveTimes[positionNumber] = moveTime; PlatformMoveTimes[platformNumber] = moveTimes; // Set the platform start location if (positionNumber == 0) { platform.position = platformPosition; Platforms[platformNumber] = platform; } return(platform); }