private void InvokedTick() { if (base.transform == null || base.IsDestroyed || IsDead()) { return; } float time = UnityEngine.Time.time; float delta = time - lastInvokedTickTime; lastInvokedTickTime = UnityEngine.Time.time; if (IsDormant) { return; } if (AiDomain != null) { AiDomain.TickDestinationTracker(); if (AiDomain.PlannerContext.IsWorldStateDirty || AiDomain.PlannerContext.PlanState == PlanStateType.NoPlan) { AiDomain.Think(); } AiDomain.Tick(UnityEngine.Time.time); } TickMovement(delta); TickOrientation(delta, time); }
public override void ResetState() { base.ResetState(); if (AiDomain != null) { AiDomain.ResetState(); } }
public override void OnSensation(Sensation sensation) { base.OnSensation(sensation); if (AiDomain != null && IsAlive()) { AiDomain.OnSensation(sensation); } }
public override void Hurt(HitInfo info) { base.Hurt(info); if (AiDomain != null && IsAlive()) { AiDomain.OnHurt(info); } }
public void Pause() { if (AiDomain != null) { AiDomain.Pause(); } if (AiDefinition != null) { AiDefinition.StopVoices(this); } }
public void Resume() { if (AiDomain != null) { AiDomain.Resume(); } if (AiDefinition != null) { AiDefinition.StartVoices(this); } }
public override void Hurt(HitInfo info) { if (!(info.InitiatorPlayer != null) || info.InitiatorPlayer.Family != Family) { if (AiDomain != null && IsAlive()) { AiDomain.OnPreHurt(info); } base.Hurt(info); if (AiDomain != null && IsAlive()) { AiDomain.OnHurt(info); } } }
private void TickOrientation(float delta, float time) { if (!(AiDomain == null) && AiDomain.NpcContext != null) { Vector3 forward = base.transform.forward; switch (AiDomain.NpcContext.OrientationType) { default: return; case NpcOrientation.Heading: forward = AiDomain.GetHeadingDirection(); break; case NpcOrientation.PrimaryTargetBody: forward = AiDomain.NpcContext.GetDirectionToPrimaryEnemyPlayerTargetBody(); break; case NpcOrientation.PrimaryTargetHead: forward = AiDomain.NpcContext.GetDirectionToPrimaryEnemyPlayerTargetHead(); break; case NpcOrientation.LastKnownPrimaryTargetLocation: forward = AiDomain.NpcContext.GetDirectionToMemoryOfPrimaryEnemyPlayerTarget(); break; case NpcOrientation.LastAttackedDirection: forward = AiDomain.NpcContext.GetDirectionLastAttackedDir(); break; case NpcOrientation.LookAround: forward = AiDomain.NpcContext.GetDirectionLookAround(); break; case NpcOrientation.AudibleTargetDirection: forward = AiDomain.NpcContext.GetDirectionAudibleTarget(); break; case NpcOrientation.LookAtAnimal: forward = AiDomain.NpcContext.GetDirectionToAnimal(); break; } if (!Mathf.Approximately(forward.sqrMagnitude, 0f)) { ServerRotation = Quaternion.LookRotation(forward, base.transform.up); } } }
public override void ServerInit() { if (base.isClient) { return; } base.ServerInit(); UpdateNetworkGroup(); if (AiDomain == null) { Debug.LogError(base.name + " requires an AI domain to be set."); DieInstantly(); return; } AiDomain.Initialize(this); if (!AiManager.ai_htn_use_agency_tick) { InvokeRepeating(InvokedTick, 0f, 0.1f); } }
private void TickMovement(float delta) { if (!AI.move || AiDomain == null) { return; } Vector3 moveToPosition = AiDomain.GetNextPosition(delta); if (_ValidateNextPosition(ref moveToPosition)) { BaseEntity baseEntity = GetParentEntity(); if ((bool)baseEntity) { base.transform.localPosition = baseEntity.transform.InverseTransformPoint(moveToPosition); } else { base.transform.localPosition = moveToPosition; } base.transform.hasChanged = true; } }
private void TickOrientation(float delta, float time) { if (AiDomain == null || AiDomain.NpcContext == null) { return; } Vector3 forward = base.transform.forward; switch (AiDomain.NpcContext.OrientationType) { default: return; case NpcOrientation.Heading: forward = AiDomain.GetHeadingDirection(); break; case NpcOrientation.PrimaryTargetBody: forward = AiDomain.NpcContext.GetDirectionToPrimaryEnemyPlayerTargetBody(); break; case NpcOrientation.PrimaryTargetHead: forward = AiDomain.NpcContext.GetDirectionToPrimaryEnemyPlayerTargetHead(); break; case NpcOrientation.LastKnownPrimaryTargetLocation: forward = AiDomain.NpcContext.GetDirectionToMemoryOfPrimaryEnemyPlayerTarget(); break; case NpcOrientation.LastAttackedDirection: forward = AiDomain.NpcContext.GetDirectionLastAttackedDir(); break; case NpcOrientation.LookAround: forward = AiDomain.NpcContext.GetDirectionLookAround(); break; case NpcOrientation.AudibleTargetDirection: forward = AiDomain.NpcContext.GetDirectionAudibleTarget(); break; case NpcOrientation.LookAtAnimal: forward = AiDomain.NpcContext.GetDirectionToAnimal(); break; case NpcOrientation.Home: forward = AiDomain.GetHomeDirection(); break; } if (Mathf.Approximately(forward.sqrMagnitude, 0f)) { return; } BaseEntity baseEntity = GetParentEntity(); if ((bool)baseEntity) { Vector3 forward2 = new Vector3(y: baseEntity.transform.InverseTransformDirection(forward).y, x: forward.x, z: forward.z); eyes.rotation = Quaternion.LookRotation(forward2, baseEntity.transform.up); if (OnlyRotateAroundYAxis) { eyes.rotation = Quaternion.Euler(new Vector3(0f, eyes.rotation.eulerAngles.y, 0f)); } ServerRotation = eyes.bodyRotation; } else { eyes.bodyRotation = Quaternion.LookRotation(forward, base.transform.up); if (OnlyRotateAroundYAxis) { eyes.bodyRotation = Quaternion.Euler(new Vector3(0f, eyes.bodyRotation.eulerAngles.y, 0f)); } ServerRotation = eyes.bodyRotation; } }
internal override void DoServerDestroy() { base.DoServerDestroy(); AiDomain.Dispose(); }