Esempio n. 1
0
    void FixedUpdate()
    {
        float changedDistanceFromLastPos = Vector3.Distance(target.transform.position, cachedTargetPosition);
        float distanceToTarget           = Vector3.Distance(this.transform.position, target.transform.position);

        //Debug.Log("Moved: " + changedDistanceFromLastPath);
        //Debug.Log ("Need to move: " + distanceToTarget*resolution);

        switch (currentMode)
        {
        case MODE.STRAIGHT:
            if (changedDistanceFromLastPos > distanceToTarget * resolution && !isSearching)
            {
                // Find new path
                cachedTargetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z);
                seeker.ReleaseClaimedPath();
                seeker.StartPath(this.transform.position, cachedTargetPosition, OnPathComplete);
                isSearching = true;
            }
            break;

        case MODE.HUNT:
            movement targetMovement = target.GetComponent <movement>();
            if (changedDistanceFromLastPos > distanceToTarget * resolution && !isSearching)
            {
                // Find new path
                standingStill        = false;
                cachedTargetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z);
                seeker.ReleaseClaimedPath();
                Vector3 huntPos = cachedTargetPosition + targetMovement.getDirection() * targetMovement.getSpeed();
                seeker.StartPath(this.transform.position, huntPos, OnPathComplete);
                isSearching = true;
            }
            else if (targetMovement.getSpeed() < 0.1f && !standingStill && !isSearching /*cachedTargetPosition != target.transform.position*/)
            {
                standingStill        = true;
                cachedTargetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z);
                seeker.ReleaseClaimedPath();
                seeker.StartPath(this.transform.position, cachedTargetPosition, OnPathComplete);
                isSearching = true;
            }
            break;

        case MODE.HIDE:
            if (path == null)
            {
                return;
            }
            if (currentWaypoint >= path.vectorPath.Count && !isSearching)
            {
                if (isInLOS())
                {
                    Vector3 hidingPoint = findHidingPoint();
                    seeker.ReleaseClaimedPath();
                    seeker.StartPath(this.transform.position, hidingPoint, OnPathComplete);
                    isSearching = true;
                }
                ;
            }
            break;

        default:
            break;
        }

        Move();
    }