Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
 public override void ResetState()
 {
     base.ResetState();
     if (AiDomain != null)
     {
         AiDomain.ResetState();
     }
 }
Ejemplo n.º 3
0
 public override void OnSensation(Sensation sensation)
 {
     base.OnSensation(sensation);
     if (AiDomain != null && IsAlive())
     {
         AiDomain.OnSensation(sensation);
     }
 }
Ejemplo n.º 4
0
 public override void Hurt(HitInfo info)
 {
     base.Hurt(info);
     if (AiDomain != null && IsAlive())
     {
         AiDomain.OnHurt(info);
     }
 }
Ejemplo n.º 5
0
 public void Pause()
 {
     if (AiDomain != null)
     {
         AiDomain.Pause();
     }
     if (AiDefinition != null)
     {
         AiDefinition.StopVoices(this);
     }
 }
Ejemplo n.º 6
0
 public void Resume()
 {
     if (AiDomain != null)
     {
         AiDomain.Resume();
     }
     if (AiDefinition != null)
     {
         AiDefinition.StartVoices(this);
     }
 }
Ejemplo n.º 7
0
 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);
         }
     }
 }
Ejemplo n.º 8
0
    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);
            }
        }
    }
Ejemplo n.º 9
0
 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);
     }
 }
Ejemplo n.º 10
0
    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;
        }
    }
Ejemplo n.º 11
0
    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;
        }
    }
Ejemplo n.º 12
0
 internal override void DoServerDestroy()
 {
     base.DoServerDestroy();
     AiDomain.Dispose();
 }