示例#1
0
 public virtual void MoveToPosition(Vector3 pos)
 {
     if (playerState != PlayerState.IMMOBILE)
     {
         StopAttacking();
         playerState = PlayerState.WALKING;
         CM.MoveToPosition(new Vector3(pos.x, pos.y, transform.position.z));
     }
 }
示例#2
0
    public virtual void Attack(Transform target)
    {
        if (this.target != null && target == this.target)                     // ako je target razlicit od trenutnog
        {
            return;
        }

        if (playerState == PlayerState.IMMOBILE)
        {
            return;
        }

        this.target = target;
        CM.MoveToPosition(target.position);

        playerState = PlayerState.CHASING_ENEMY;
        weapons[equippedWeaponIndex].Pause();
    }
示例#3
0
    protected override void Update()
    {
        UpdateGraph();

        switch (playerState)
        {
        case PlayerState.CHASING_ENEMY:                                         // ako trenutno juri protivnika
        {
            if (target == null)                                                 // ako je protivnik mrtav
            {
                StopAttacking();
                StopMoving();
                detectedPlayer = false;
                break;
            }

            if (CanSee(target))
            {
                StartAttacking(target);
            }
            else if (!CM.destination.Equals(target.position))                  // ako se protivnik u medjuvremenu pomerio
            {
                CM.MoveToPosition(target.position);
            }

            if (room != null && player.GetComponent <AttackingCharacter>().GetRoom() != room)
            {
                MoveToPosition(startPos);
                detectedPlayer = false;
            }

            break;
        }

        case PlayerState.ATTACKING:
        {
            Worm worm;
            if (target == null || ((worm = target.GetComponent <Worm>()) != null && worm.state == Worm.WormState.BURIED))                                                // ako je protivnik mrtav
            {
                StopAttacking();
                StopMoving();
                detectedPlayer = false;
                break;
            }

            if (!CanSee(target))
            {                                              // ako mu je protivnik nestao iz weapon range-a
                Transform tempTarget = target;
                StopAttacking();
                Attack(tempTarget);
            }
            if (room != null && player.GetComponent <AttackingCharacter>().GetRoom() != room)
            {
                MoveToPosition(startPos);
                detectedPlayer = false;
            }

            break;
        }

        case PlayerState.WALKING:
        {
            if (!path.pathPending && (path.reachedEndOfPath || !path.hasPath))              // ako je stigao do destinacije
            {
                playerState = PlayerState.IDLE;
                OnReachedDestination();
            }
            else

            if (((Vector2)path.destination).Equals(startPos))              // ako se vraca na mesto
            {
                Transform closest;

                if ((closest = vision.GetClosest()) != null && LevelGeneration.I.GetRoomAtPos(closest.position) == room)
                {
                    Attack(closest);
                }
            }



            break;
        }

        case PlayerState.IDLE:
        {
            if (!detectedPlayer)
            {
                if (room == player.GetComponent <PlayerWithJoystick>().GetRoom())
                {
                    Attack(player);
                    detectedPlayer = true;
                }
            }
            else
            {
                Attack(player);
            }

            break;
        }
        }

        base.Update();
    }