示例#1
0
    public void MoveToPosition(Vector3 position)
    {
        foreach (AiObject aiObject in activeAiObjects)
        {
            if (aiObject == null ||
                aiObject.behave == null ||
                aiObject.behave.running)
            {
                continue;
            }

            if (GameConfig.IsMultiMode && !aiObject.IsController)
            {
                continue;
            }

            Vector3 patrolPosition = position + header.transform.TransformDirection(aiObject.offset - header.offset);
            if (AiUtil.SqrMagnitudeH(patrolPosition - aiObject.position) > 1f * 1f)
            {
                aiObject.desiredMoveDestination = patrolPosition;
            }
            else
            {
                aiObject.desiredMoveDestination = Vector3.zero;
            }

            aiObject.speed = aiObject.walkSpeed;
        }

        if (GameConfig.IsMultiMode && IsController)
        {
            RPCServer(EPacketType.PT_AG_MoveToPosition, position);
        }
    }
示例#2
0
    bool IsValid(Vector3 position)
    {
        AiObject[] aiObjects = transform.GetComponentsInChildren <AiObject>();
        foreach (AiObject ite in aiObjects)
        {
            if (AiUtil.SqrMagnitudeH(ite.position - position) < rejectRadius * rejectRadius)
            {
                return(false);
            }
        }

        return(true);
    }
示例#3
0
    private void UpdateMove()
    {
        Vector3 movement = Vector3.zero;

        if (desiredMoveDestination != Vector3.zero)
        {
            Debug.DrawLine(transform.position, desiredMoveDestination, Color.red);
        }

        if (desiredMoveDestination != Vector3.zero && seeker != null)
        {
            movement = seeker.movement;
        }

        if (desiredMoveDestination != Vector3.zero && movement == Vector3.zero)
        {
            movement = desiredMoveDestination - transform.position;
        }

        if (desiredMoveDestination != Vector3.zero &&
            AiUtil.SqrMagnitudeH(desiredMoveDestination - transform.position) < 1f * 1f)
        {
            movement = Vector3.zero;
        }

        DodgeNeighbours(ref movement);

        if (desiredLookAtTran != null)
        {
            desiredFacingDirection = (desiredLookAtTran.position - transform.position).normalized;
        }
        else if (desiredFaceDirection != Vector3.zero)
        {
            desiredFacingDirection = desiredFaceDirection.normalized;
        }
        else if (movement != Vector3.zero)
        {
            desiredFacingDirection = movement.normalized;
        }
        else
        {
            desiredFacingDirection = Vector3.zero;
        }

        //if (movement != Vector3.zero && CheckMovementValid(movement))
        //    desiredMovementDirection = Quaternion.Inverse(transform.rotation) * movement;
        //else
        //    desiredMovementDirection = Vector3.zero;

        if (movement != Vector3.zero && CheckMovementValid(movement))
        {
            if (habit == LifeArea.LA_Land && desiredFaceDirection == Vector3.zero && desiredLookAtTran == null)
            {
                float angle = Vector3.Angle(transform.forward, Util.ProjectOntoPlane(movement, transform.up));
                if (angle < 30)
                {
                    desiredMovementDirection = Quaternion.Inverse(transform.rotation) * movement;
                }
                else
                {
                    desiredMovementDirection = Vector3.zero;
                }
            }
            else
            {
                desiredMovementDirection = Quaternion.Inverse(transform.rotation) * movement;
            }
        }
        else
        {
            desiredMovementDirection = Vector3.zero;
        }
    }