コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }
コード例 #3
0
    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);
    }
コード例 #4
0
    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);
    }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    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);
    }
コード例 #8
0
    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));
        }
    }
コード例 #9
0
    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);
    }