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); } }
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); }
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; } }