Exemplo n.º 1
0
        public override void TileAction()
        {
            Game_Controller controller = Game_Controller.controller;
            //create a path from the jumpTo, then tell the player to enact it. Then do basic tile stuff.
            List <Node> mover = new List <Node>();

            mover.Add(controller.GetNodeFromWorldPos(jumpTo.transform.position));
            thisTile.node.occupant.MoveTo(mover);

            base.TileAction();
        }
Exemplo n.º 2
0
        //used to kill the character
        public void Die()
        {
            //report to the game ui, then turn the player red.
            UIController.controller.AddTextToContainerQueue("Character '" + gameObject.name + "' has died");
            GetComponentInChildren <Renderer>().material.color = new Color(1, 0, 0, 0.25f);
            //tell the node there is no more character, and remove ally from tracking list. Finally, destroy this script
            Game_Controller c = Game_Controller.controller;

            c.SetNodeOccupant(c.GetNodeFromWorldPos(transform.position), null);
            c.allAllies.Remove(this);

            Destroy(this);
        }
Exemplo n.º 3
0
        //Enemy turn logic.
        IEnumerator DoTurnEnemy()
        {
            //print("enemy turn");
            if (type == EnemyType.Pursuit)
            {
                //Find the closest target on the opposite faction. Doesnt really do much now, but its support for when i put in multiple players.
                Character target = GetClosestPlayer();
                //If it can see the player, or it has seen the player on a previous turn...
                if (CanSeeTarget(target) || hasSeenPlayer)
                {
                    //Get distance to player.If dist is less than attack dist, attack.
                    hasSeenPlayer = true;
                    int dist = GetDistance(controller.GetNodeFromWorldPos(transform.position), controller.GetNodeFromWorldPos(target.transform.position));
                    if (dist < attackDist)
                    {
                        target.Damage(attackDamage, this);
                    }
                    else
                    {
                        //If distance is greate, move to target. Refer to base character notes for this.
                        currentTile.node.occupant = null;

                        List <Node> path = controller.GeneratePath(controller.GetNodeFromWorldPos(transform.position), controller.GetNodeFromWorldPos(target.transform.position));
                        if (path != null)
                        {
                            if (!crouching)
                            {
                                if (path.Count >= movePoints)
                                {
                                    List <Node> pathRange = path.GetRange(0, movePoints);
                                    MoveTo(pathRange);
                                    yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count));
                                }
                                else
                                {
                                    List <Node> pathRange = path.GetRange(0, path.Count);
                                    MoveTo(pathRange);
                                    yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count));
                                }
                            }
                            else
                            {
                                if (path.Count >= crouchMovePoints)
                                {
                                    List <Node> pathRange = path.GetRange(0, crouchMovePoints);
                                    MoveTo(pathRange);
                                    yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count));
                                }
                                else
                                {
                                    List <Node> pathRange = path.GetRange(0, path.Count);
                                    MoveTo(pathRange);
                                    yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count));
                                }
                            }
                        }
                        else
                        {
                            nullCounter++;
                            if (nullCounter > 3)
                            {
                                nullCounter        = 0;
                                transform.position = Game_Controller.controller.GetNodeFromWorldPos(transform.position).position;
                            }
                        }
                    }
                }

                yield return(new WaitForSeconds(0.1f));
            }
            //If the enemy is a sniper, do a simple "can i shoot player. Yes? Cool, im shooting player"
            else if (type == EnemyType.Sniper)
            {
                Character target = GetClosestPlayer();

                if (CanSeeTarget(target) || hasSeenPlayer)
                {
                    hasSeenPlayer = true;
                    int dist = GetDistance(controller.GetNodeFromWorldPos(transform.position), controller.GetNodeFromWorldPos(target.transform.position));
                    //print("currentDist: " + dist + " attachDist: " + attackDist);
                    if (dist < attackDist)
                    {
                        target.Damage(100, this);
                    }
                }

                yield return(new WaitForSeconds(0.1f));
            }
            turnFinished = true;
            yield break;
        }