Example #1
0
    private void OnDeath()
    {
        if (m_bDeathTriggered == false)
        {
            m_bDeathTriggered = true;
            GetAnimator().SetBool("Investigate", false);
            GetAnimator().SetBool("Attack", false);
            GetAnimator().SetBool("Moving", false);
            GetAIAttack().Cleanup();
            if (m_SmokeVFX != null)
            {
                m_SmokeVFX.Cleanup();
            }
            TryResetPath();
            if (GetAgent().enabled == true)
            {
                GetAgent().isStopped = true;
                GetAgent().enabled   = false;
            }
            Destroy(GetAgent());

            CAIManager.RemoveAI_BothLists(this);
            CAIManager.RemoveFromCombatList(this);
            CAIManager.RemoveFromInvestigateList(this);
        }
        else
        {
            m_fDeathTimer += Time.deltaTime;
            if (m_fDeathTimer > m_fDestroyAfterDuration)
            {
                Destroy(gameObject);
            }
        }
    }
Example #2
0
 //for setting combat to false slowly based on CSenses.m_fTimeToLoseSight variable
 public bool             LoseCombatSlowly( )
 {
     m_fLoseSightTimer -= Time.deltaTime;
     if (m_fLoseSightTimer < 0.0f)
     {
         m_fLoseSightTimer = m_Senses.GetTimeUntilLoseSight();
         m_bCombat         = false;
         CAIManager.RemoveFromCombatList(this);
         return(true);
     }
     return(false);
 }
Example #3
0
    public void SetState(State newState)
    {
        //SetIsInvestigating( false );
        //print(gameObject.name + "'s state is " + newState);
        m_eState = newState;
        if (m_eState == State.Idle)
        {
            //SetIdle( true );
            m_fIdleTimer = 0;

            m_fSecToGenerateDest = Random.Range(m_fSecToGenerateDestBase - m_fTimeVariation, m_fSecToGenerateDestBase + m_fTimeVariation);
        }

        else if (m_eState == State.Wander)
        {
            float randomX, randomZ;
            randomX = Random.Range(-m_fDistanceVariation, m_fDistanceVariation);
            randomZ = Random.Range(-m_fDistanceVariation, m_fDistanceVariation);
            Vector3 wanderPos = new Vector3(transform.position.x + randomX + GetAgent().stoppingDistance, transform.position.y, transform.position.z + randomZ + GetAgent().stoppingDistance);
            if (TrySetDestination(wanderPos) == false)    //( GetAgent().SetDestination( wanderPos ) == false )
            {
                //if agent was unable to set a path
                SetState(State.Idle);
            }

            CSoundBank.Instance.AIIdle(m_eAIType, gameObject);
        }
        else if (m_eState == State.Investigate)
        {
            SetIsInvestigating(true);
            if (m_bStationary == false)
            {
                TrySetDestination(GetPOI());
            }
            else
            {
                RotateAI(GetPOI());
                //RotateAIBool(GetPOI(), 0.9f);
            }

            CAIManager.AddToInvestigateList(this);
        }

        if (m_eState != State.Investigate)
        {
            m_fInvestigateTimer = 0.0f;
            SetIsInvestigating(false);
        }
    }
Example #4
0
 public void ResetPOI()
 {
     m_fInvestigateTimer = 0.0f; ///
     m_vPointOfInterest  = Vector3.zero;
     CAIManager.RemoveFromInvestigateList(this);
 }
Example #5
0
    public void Update()
    {
        //print(gameObject.name + "'s state :" + m_eInternalState);
        if (gameObject.activeInHierarchy == false)
        {
            //print( gameObject.name + " is not active and Triggered a failsafe here." );
            return;
        }

        if (GetHealth().GetIsAlive() == false)
        {
            //Death stuff, cleanups etc
            OnDeath();
            return;
        }

        if (GetAgent().enabled == false)
        {
            //print( gameObject.name + "'s agent is not enabled and Triggered a failsafe here." );
            return;
        }

        OnUpdateStarted();

        if (GetAIAttack().GetIsAttacking() == true || m_bStationary == true)
        {
            m_bCanMove = false;
        }

        if (GetAgent().hasPath == true)
        {
            if (GetStatusEffects().GetIsPushed() == false)
            {
                if (transform.position != GetPreviousPosition())
                {
                    SetIsMoving(true);
                }
            }
        }

        /////INVESTIGATE POI/////
        if (GetCombat() == false)
        {
            if (GetCombatPreviousFrame() == true)
            {
                m_Senses.SetSightCone(m_Senses.GetNormalSightCone());
            }
            if (HasPOI() == true)
            {
                SetState(State.Investigate);
            }
        }
        /////INVESTIGATE POI/////
        else //GetCombat == true
        {
            if (GetCombatPreviousFrame() == false)
            {
                m_Senses.SetSightCone(m_Senses.GetCombatSightCone());
                CAIManager.AddToCombatList(this);
                CSoundBank.Instance.AIEnterCombat(GetAIType(), gameObject);
                //Alert enemies nearby and Engage
                //print("ALERT CODE WAS RUN");
                CNoiseSystem.Alert(CPlayerControlls.GetPlayer().transform.position, m_fAlertNoise);
            }
            //Attack state
            SetState(State.Attack);
        }

        UpdateAnimations();

        switch (m_eState)
        {
        case State.Idle:
        {
            //WANDER interaction
            m_fIdleTimer += Time.deltaTime;
            if (m_fIdleTimer >= m_fSecToGenerateDest)
            {
                if (m_bStationary == false)
                {
                    SetState(State.Wander);
                }
                //else remain in idle
            }
        }
        break;

        case State.Wander:
        {
            //IDLE interaction
            if (DestinationReached() == true)
            {
                SetState(State.Idle);
            }
        }
        break;

        case State.Investigate:
        {
            //play investigation emote
            //investigate walk?
            if (DestinationReached() == true)
            {
                if (RotateAIBool(GetPOI(), 0.90f) == true)
                {
                    TryResetPath();
                }
                //On reach destination, rotate head for a couple of seconds, then return?
            }
            if (GetIsMoving() == false)
            {
                m_fInvestigateTimer += Time.deltaTime;
                if (m_fInvestigateTimer > m_fInvestigateDuration)
                {
                    ///m_fInvestigateTimer = 0.0f;
                    ResetPOI();
                    if (m_bStationary == true)
                    {
                        SetState(State.Idle);
                    }
                    else
                    {
                        SetState(State.Wander);
                    }
                }
            }
        }
        break;

        case State.Wait:
            break;

        case State.Attack:
        {
            if (Vector3.Distance(transform.position, m_PlayerTransform.position) <= GetAIAttack().GetAttackRange())            //m_fAttackRange )
            {
                TryResetPath();
                if (GetAIAttack().GetCanAttack() == true)
                {
                    if (GetAttackStyle() == AttackStyle.Melee)
                    {
                        if (RotateAIBool(m_PlayerTransform.position, 0.90f) == true)
                        {
                            if (GetAIType() == AIType.Orc)
                            {
                                int iRandom;
                                iRandom = Random.Range(0, 2);         //means 0 to 1
                                GetAIAttack().Attack(iRandom);
                                CSoundBank.Instance.AIMelee(m_eAIType, iRandom, gameObject);
                            }
                            else
                            {
                                GetAnimator().SetBool("Collided", false);
                                GetAIAttack().Attack(0);
                                CSoundBank.Instance.GoblinMeleeAttack(gameObject);
                            }
                        }
                    }
                    else
                    {
                        if (RotateAIBool(m_PlayerTransform.position, 0.3f))
                        {
                            GetAIAttack().Attack(m_PlayerTransform.position);
                            //CSoundBank.Instance.GoblinRangedAttack(gameObject);
                        }
                    }
                }
                if (GetAIAttack().GetIsAttacking() == false)
                {
                    RotateAI(m_PlayerTransform.position);
                }
            }
            else
            {
                TrySetDestination(m_PlayerTransform.position);
                //print("Running toward player in Combat mode");
                if (m_bStationary == false)
                {
                    TrySetDestination(GetPOI());
                }
                else
                {
                    RotateAI(GetPOI());
                }
            }
        }
        break;

        default:
            break;
        }
        OnUpdateFinished();
    }
Example #6
0
 private void Awake()
 {
     CAIManager.AddAI_AllAIList(this);
 }