Ejemplo n.º 1
0
    public void Turn()
    {
        if (myCharacter.currentHealth <= 0)
        {
            return;
        }

        //See if player is in line of sight
        if (DetectPlayer())
        {
            float tileSize = GetComponent <SpriteRenderer>().sprite.bounds.size.x;

            //Calculate path to player's tile from this tile
            List <string> steps = TileBehavior.CalculateMovement(new List <string>(), myCharacter.occupiedTile, PlayerManager.singleton.GetTile(), tileSize, viewDistance);


            //If there exists a path, take the first step towards it
            if (steps != null)
            {
                //If player is adjacent
                if (steps.Count <= 0)
                {
                    myCharacter.Ability1();
                }
                else
                {
                    StartCoroutine(MoveInDirection(steps[0]));
                }
            }
        }
        else
        {
            List <string> directions = new List <string>();
            directions.Add("up");
            directions.Add("down");
            directions.Add("left");
            directions.Add("right");
            while (directions.Count > 0)
            {
                int    rand   = Random.Range(0, directions.Count);
                string picked = directions[rand];
                directions.RemoveAt(rand);
                if (picked == "up")
                {
                    TileBehavior upTile = myCharacter.occupiedTile.Up;
                    if (upTile != null && upTile.tileType != WALL && !upTile.HasUnit())
                    {
                        StartCoroutine(MoveInDirection(picked));
                        break;
                    }
                }
                else if (picked == "left")
                {
                    TileBehavior leftTile = myCharacter.occupiedTile.Left;
                    if (leftTile != null && leftTile.tileType != WALL && !leftTile.HasUnit())
                    {
                        StartCoroutine(MoveInDirection(picked));
                        break;
                    }
                }
                else if (picked == "down")
                {
                    TileBehavior downTile = myCharacter.occupiedTile.Down;
                    if (downTile != null && downTile.tileType != WALL && !downTile.HasUnit())
                    {
                        StartCoroutine(MoveInDirection(picked));
                        break;
                    }
                }
                else if (picked == "right")
                {
                    TileBehavior rightTile = myCharacter.occupiedTile.Right;
                    if (rightTile != null && rightTile.tileType != WALL && !rightTile.HasUnit())
                    {
                        StartCoroutine(MoveInDirection(picked));
                        break;
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
    void Update()
    {
        if (!GameManager.actionInProcess)
        {
            if (myCharacter.currentHealth <= 0)
            {
                // Load a new scene the player dies
                GameManager.Reset();
                myCharacter.ResetHealth();
                UIManager.singleton.Loading();
                SceneManager.LoadScene(sceneName: "Game");
            }

            if (inShop)
            {
                // no input works if you are in shop
                return;
            }

            /*else if (Input.GetKey(KeyCode.LeftShift)) {
             *  if ((Input.GetKey(KeyCode.W) && Input.GetKeyDown(KeyCode.A)) || (Input.GetKeyDown(KeyCode.W) && Input.GetKey(KeyCode.A))) {
             *      Debug.Log("upleft");
             *      StartCoroutine(MoveUnitInDirection("upleft"));
             *  }
             *  if ((Input.GetKey(KeyCode.W) && Input.GetKeyDown(KeyCode.D)) || (Input.GetKeyDown(KeyCode.W) && Input.GetKey(KeyCode.D))) {
             *      Debug.Log("upright");
             *      StartCoroutine(MoveUnitInDirection("upright"));
             *  }
             *  if ((Input.GetKey(KeyCode.S) && Input.GetKeyDown(KeyCode.A)) || (Input.GetKeyDown(KeyCode.S) && Input.GetKey(KeyCode.A))) {
             *      Debug.Log("downleft");
             *      StartCoroutine(MoveUnitInDirection("downleft"));
             *  }
             *  if ((Input.GetKey(KeyCode.S) && Input.GetKeyDown(KeyCode.D)) || (Input.GetKeyDown(KeyCode.S ) && Input.GetKey(KeyCode.D))) {
             *      Debug.Log("downright");
             *      StartCoroutine(MoveUnitInDirection("downright"));
             *      }
             *  }*/
            else if (Input.GetKey(KeyCode.LeftArrow))
            {
                myCharacter.myDirection = Character.Direction.LEFT;
                Debug.Log(myCharacter.myDirection);
                myCharacter.setFlip(true);
                directionUI.SwitchDirection("left");
            }
            else if (Input.GetKey(KeyCode.DownArrow))
            {
                myCharacter.myDirection = Character.Direction.DOWN;
                Debug.Log(myCharacter.myDirection);
                directionUI.SwitchDirection("down");
            }
            else if (Input.GetKey(KeyCode.RightArrow))
            {
                myCharacter.myDirection = Character.Direction.RIGHT;
                Debug.Log(myCharacter.myDirection);
                myCharacter.setFlip(false);
                directionUI.SwitchDirection("right");
            }
            else if (Input.GetKey(KeyCode.UpArrow))
            {
                myCharacter.myDirection = Character.Direction.UP;
                Debug.Log(myCharacter.myDirection);
                directionUI.SwitchDirection("up");
            }
            else if (Input.GetKeyDown(KeyCode.W))
            {
                TileBehavior upTile = myCharacter.occupiedTile.Up;
                if (upTile != null && upTile.tileType != WALL && !upTile.HasUnit())
                {
                    StartCoroutine(MoveUnitInDirection("up"));
                }
            }
            else if (Input.GetKeyDown(KeyCode.A))
            {
                TileBehavior leftTile = myCharacter.occupiedTile.Left;
                if (leftTile != null && leftTile.tileType != WALL && !leftTile.HasUnit())
                {
                    StartCoroutine(MoveUnitInDirection("left"));
                }
            }
            else if (Input.GetKeyDown(KeyCode.S))
            {
                TileBehavior downTile = myCharacter.occupiedTile.Down;
                if (downTile != null && downTile.tileType != WALL && !downTile.HasUnit())
                {
                    StartCoroutine(MoveUnitInDirection("down"));
                }
            }
            else if (Input.GetKeyDown(KeyCode.D))
            {
                TileBehavior rightTile = myCharacter.occupiedTile.Right;
                if (rightTile != null && rightTile.tileType != WALL && !rightTile.HasUnit())
                {
                    StartCoroutine(MoveUnitInDirection("right"));
                }
            }
            else if (Input.GetKeyDown(KeyCode.F))
            {
                myCharacter.AttackEnemy();
                GameManager.UpdateEnemies();
            }
            else if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                myCharacter.Ability1();
                GameManager.UpdateEnemies();
            }
            else if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                myCharacter.Ability2();
                GameManager.UpdateEnemies();
            }
            else if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                myCharacter.Ability3();
                GameManager.UpdateEnemies();
            }
            else if (Input.GetKeyDown(KeyCode.Alpha4))
            {
                myCharacter.Ability4();
                GameManager.UpdateEnemies();
            }
            else if (Input.GetKeyDown(KeyCode.G)) // Save Character
            {
                Character new_char = myCharacter.saveCharacter();
                saved_data.saveGame(new_char);
            }
            else if (Input.GetKeyDown(KeyCode.Alpha0))
            {
                if (saved_data != null)
                {
                    saved_data.saveGame(myCharacter);
                }
                else
                {
                    Debug.Log("savedata should exist...");
                }
                //Check if profile exists
            }
        }
    }