Beispiel #1
0
    protected void FixedUpdate()
    {
        ArturHelper.AccelerateTo(rBody, new Vector3(playerInput.horizontalLeft * currentMaxSpeed,
                                                    rBody.velocity.y, rBody.velocity.z),
                                 currentMaxAcceleration);

        if (doJump)
        {
            //rBody.AddForce(new Vector3(0, jumpForce, 0) * transform.up.y, ForceMode.VelocityChange);
            ArturHelper.AccelerateTo(rBody, new Vector3(rBody.velocity.x, jumpForce, rBody.velocity.z),
                                     maxJumpAcceleration);
            doJump = false;
        }

        if (doDash)
        {
            rBody.AddForce(transform.right * dashForce, ForceMode.VelocityChange);
            dashTime = dashCooldown;
            doDash   = false;
        }
        if (doShoot)
        {
            gunScript.Shoot();
            shootTimer = shootCooldown;
        }

        // Limit the vertical speed
        if (rBody.velocity.y < -maxVerticalSpeed)
        {
            rBody.velocity = new Vector3(rBody.velocity.x, -maxVerticalSpeed, 0);
        }
        else if (rBody.velocity.y > maxVerticalSpeed)
        {
            rBody.velocity = new Vector3(rBody.velocity.x, maxVerticalSpeed, 0);
        }
    }
Beispiel #2
0
    protected void Update()
    {
        UpdateGrounded();
        playerInput.Update();
        // Setting max speed.
        if (isGrounded)
        {
            currentMaxSpeed        = maxMovementSpeedGrounded;
            currentMaxAcceleration = maxAccelerationGrounded;
        }
        else
        {
            currentMaxSpeed        = maxMovementSpeedAir;
            currentMaxAcceleration = maxAccelerationAir;
        }



        //Setting rotation
        if (!gravityReversed)
        {
            if (playerInput.horizontalLeft > 0)
            {
                transform.rotation = Quaternion.Euler(transform.eulerAngles.x, 0, 0);
            }
            else if (playerInput.horizontalLeft < 0)
            {
                transform.rotation = Quaternion.Euler(transform.eulerAngles.x, 180, 0);
            }
        }
        else
        {
            if (playerInput.horizontalLeft > 0)
            {
                transform.rotation = Quaternion.Euler(transform.eulerAngles.x, 180, 180);
            }
            else if (playerInput.horizontalLeft < 0)
            {
                transform.rotation = Quaternion.Euler(transform.eulerAngles.x, 0, 180);
            }
        }


        // Managing dash cooldown
        if (dashTime > 0)
        {
            dashTime -= Time.deltaTime;
        }
        else if (dashTime < 0)
        {
            dashTime = 0;
        }

        if (shootTimer > 0)
        {
            shootTimer -= Time.deltaTime;
        }
        else if (shootTimer < 0)
        {
            shootTimer = 0;
        }

        if (!doForcefield)
        {
            if (energy < 1)
            {
                energy += energyRefillPerSecond * Time.deltaTime;
            }
            if (energy + energyRefillPerSecond * Time.deltaTime > 1)
            {
                energy = 1;
            }
        }

        if (playerInput.horizontalLeft != 0)
        {
            ArturHelper.SetValueOfAnimator(animator, "isMoving");
        }
        if (doShoot)
        {
            ArturHelper.SetValueOfAnimator(animator, "isShooting");
        }
        if (playerInput.horizontalLeft == 0 && !doDash && !doForcefield && !doJump && !doShoot)
        {
            ArturHelper.SetValueOfAnimator(animator, "isIdle");
        }
        if (doJump)
        {
            animator.SetBool("isJumping", true);
        }
        if (doDash)
        {
            animator.SetBool("isDashing", true);
        }
    }
    void Awake()
    {
        int numberOfStartRooms  = 1;
        int numberOfRandomRooms = 1;
        int numberOfPuzzleRooms = 1;

        // Can of course be different
        if (currentLevel == "tutorial")
        {
            numberOfStartRooms  = 1;
            numberOfRandomRooms = 1;
            numberOfPuzzleRooms = 1;
        }
        else if (currentLevel == "ice")
        {
            numberOfStartRooms  = 1;
            numberOfRandomRooms = 19;
            numberOfPuzzleRooms = 1;
        }
        else if (currentLevel == "fire")
        {
            numberOfStartRooms  = 1;
            numberOfRandomRooms = 15;
            numberOfPuzzleRooms = 1;
        }
        else if (currentLevel == "michael_test")
        {
            numberOfStartRooms  = 1;
            numberOfRandomRooms = 2;
            numberOfPuzzleRooms = 1;
        }
        numberOfRooms = ArturGameManager.numberOfRooms;

        if (currentLevel == "tutorial")
        {
            numberOfRooms = 0;
        }

        allEnemyPositions = new List <Vector3>();
        string roomPath = "Rooms/" + currentLevel + "/";

        System.Random rand      = new System.Random();
        GameObject    firstRoom = Resources.Load <GameObject>(roomPath + "start" + (rand.Next(1, numberOfStartRooms)));

        firstRoom.GetComponent <LevelMetaInf>().instantiatedAt = Vector3.zero;

        Instantiate(firstRoom);
        Vector3 roomPosition = new Vector3(firstRoom.GetComponent <LevelMetaInf>().lastBlock.x,
                                           firstRoom.GetComponent <LevelMetaInf>().lastBlock.y, 0);
        List <GameObject> gameRooms = new List <GameObject>();

        gameRooms.Add(firstRoom);

        for (int i = 0; i < firstRoom.GetComponent <LevelMetaInf>().enemyPositions.Count; i++)
        {
            allEnemyPositions.Add(firstRoom.GetComponent <LevelMetaInf>().enemyPositions[i] + firstRoom.GetComponent <LevelMetaInf>().instantiatedAt);
        }


        if (testSpecificRoom != 0)
        {
            GameObject nextRoom = Resources.Load <GameObject>(roomPath + testSpecificRoom);
            nextRoom.GetComponent <LevelMetaInf>().respawnLocation = roomPosition;
            nextRoom.GetComponent <LevelMetaInf>().instantiatedAt  = roomPosition;
            Instantiate(nextRoom, roomPosition, Quaternion.identity);

            gameRooms.Add(nextRoom);

            roomPosition.x += nextRoom.GetComponent <LevelMetaInf>().lastBlock.x + 1;
            roomPosition.y += nextRoom.GetComponent <LevelMetaInf>().lastBlock.y;

            for (int j = 0; j < nextRoom.GetComponent <LevelMetaInf>().enemyPositions.Count; j++)
            {
                allEnemyPositions.Add(nextRoom.GetComponent <LevelMetaInf>().enemyPositions[j] + nextRoom.GetComponent <LevelMetaInf>().instantiatedAt);
            }
        }



        List <int> roomsOrder = Enumerable.Range(1, numberOfRandomRooms).ToList();


        int extraRooms = 0;

        if (numberOfRooms > numberOfRandomRooms)
        {
            extraRooms = numberOfRooms - numberOfRandomRooms;
        }

        for (int i = 0; i < extraRooms; i++)
        {
            roomsOrder.Add(rand.Next(1, numberOfRandomRooms));
        }

        int[] randomRoomsOrder = ArturHelper.Shuffle <int>(new System.Random(), roomsOrder.ToArray());



        for (int i = 0; i < numberOfRooms; i++)
        {
            /*
             * Controlling the random generation a bit.
             * GameObject nextRoom;
             * if (i % 3 == 0)
             * {
             *      // Generate bigger room with a puzzle.
             *      GameObject nextRoom = Resources.Load<GameObject>(roomPath + "puzzles/" + rand.Next(1, numberOfPuzzleRooms));
             * }
             * else
             * {
             *      // Random room.
             *      GameObject nextRoom = Resources.Load<GameObject>(roomPath + rand.Next(1, numberOfRandomRooms));
             * }
             */



            //GameObject nextRoom = Resources.Load<GameObject>(roomPath + rand.Next(1, numberOfRandomRooms)); // TODO
            GameObject nextRoom = Resources.Load <GameObject>(roomPath + randomRoomsOrder[i]); //
            nextRoom.GetComponent <LevelMetaInf>().respawnLocation = roomPosition;
            nextRoom.GetComponent <LevelMetaInf>().instantiatedAt  = roomPosition;
            Instantiate(nextRoom, roomPosition, Quaternion.identity);

            gameRooms.Add(nextRoom);

            roomPosition.x += nextRoom.GetComponent <LevelMetaInf>().lastBlock.x + 1;
            roomPosition.y += nextRoom.GetComponent <LevelMetaInf>().lastBlock.y;


            for (int j = 0; j < nextRoom.GetComponent <LevelMetaInf>().enemyPositions.Count; j++)
            {
                allEnemyPositions.Add(nextRoom.GetComponent <LevelMetaInf>().enemyPositions[j] + nextRoom.GetComponent <LevelMetaInf>().instantiatedAt);
            }
        }

        GameObject endRoom = Resources.Load <GameObject>(roomPath + "end");

        endRoom.GetComponent <LevelMetaInf>().instantiatedAt = roomPosition;

        Instantiate(endRoom, roomPosition, Quaternion.identity);

        string playerOnePath = "Prefabs/Main/PlayerCharacters/ArturMainCharacter1";
        string playerTwoPath = "Prefabs/Main/PlayerCharacters/ArturMainCharacter2";

        GameObject playerOne = Resources.Load <GameObject>(playerOnePath);
        GameObject playerTwo = Resources.Load <GameObject>(playerTwoPath);

        Instantiate(playerOne, firstRoom.GetComponent <LevelMetaInf>().respawnLocation, Quaternion.identity);
        Instantiate(playerTwo, firstRoom.GetComponent <LevelMetaInf>().respawnLocation + new Vector3(2, 0, 0), Quaternion.identity);

        gameRooms.Add(endRoom);
        surface.BuildNavMesh();
        string enemyPath = "Prefabs/Main/Enemies/Enemy";

        foreach (Vector3 enemyPos in allEnemyPositions)
        {
            GameObject enemy = Resources.Load <GameObject>(enemyPath);
            Instantiate(enemy, enemyPos, Quaternion.identity);
        }
    }