示例#1
0
 void UpdateStatusEffect(int status)
 {
     HealthManager.StatusEffect sEffect = (HealthManager.StatusEffect)status;
     myBotManager.burnedP.Stop();
     myBotManager.frozenP.Stop();
     myBotManager.shockedP.Stop();
     myBotManager.slowedP.Stop();
     myBotManager.confusedP.Stop();
     switch (sEffect)
     {
     case HealthManager.StatusEffect.BURNED:
         myBotManager.burnedP.Play();
         break;
     }
 }
示例#2
0
    // Update is called once per frame
    void Update()
    {
        if (!networkView.isMine)
        {
            return;
        }

        //If the status effect has changed since last update, reset the timer
        if (myHPManager.statusEffect != prevStatus)
        {
            healthEffectTimer  = 0f;
            gradualDamageTimer = 0f;
        }

        switch (myHPManager.statusEffect)
        {
        case HealthManager.StatusEffect.NORMAL:
            myBotManager.burnedP.Stop();
            myBotManager.frozenP.Stop();
            myBotManager.shockedP.Stop();
            myBotManager.slowedP.Stop();
            myBotManager.confusedP.Stop();
            healthEffectTimer  = 0f;
            gradualDamageTimer = 0f;
            break;

        case HealthManager.StatusEffect.BURNED:
            myBotManager.burnedP.Play();
            myBotManager.frozenP.Stop();
            myBotManager.shockedP.Stop();
            myBotManager.slowedP.Stop();
            myBotManager.confusedP.Stop();
            if (healthEffectTimer > 3f)
            {
                myHPManager.statusEffect = HealthManager.StatusEffect.NORMAL;
                healthEffectTimer        = 0f;
                gradualDamageTimer       = 0f;
            }
            else
            {
                gradualDamageTimer += Time.deltaTime;
                if (gradualDamageTimer > 0.5f)
                {
                    gradualDamageTimer = 0f;
                    myHPManager.ReceiveDamage(10, Projectile.DamageType.STATUS, Projectile.DamageElement.STATUS);
                }
                healthEffectTimer += Time.deltaTime;
            }
            break;

        case HealthManager.StatusEffect.CONFUSED:
            myBotManager.burnedP.Stop();
            myBotManager.frozenP.Stop();
            myBotManager.shockedP.Stop();
            myBotManager.slowedP.Stop();
            myBotManager.confusedP.Play();

            if (healthEffectTimer > 3f)
            {
                myHPManager.statusEffect   = HealthManager.StatusEffect.NORMAL;
                myBotManager.movementSpeed = initSpeed;
                myBotManager.acceleration  = initAcceleration;
                myBotManager.timeBetweenAttacksInSeconds = initFireRate;
                healthEffectTimer = 0f;
            }
            else
            {
                myBotManager.movementSpeed = 0f;
                myBotManager.acceleration  = 0f;
                myBotManager.timeBetweenAttacksInSeconds = 999f;
                healthEffectTimer += Time.deltaTime;
            }

            break;
        }

        prevStatus = myHPManager.statusEffect;
    }
示例#3
0
    //State Sync function
    //Although the real calculations are done with navmesh agent, the clients are using rb to navigate
    void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
    {
        bool    rbEnabled = false;
        Vector3 position = Vector3.zero;
        Vector3 forwardDir = Vector3.zero;
        Vector3 velocity = Vector3.zero;
        Vector3 nmDestination = Vector3.zero;
        bool    isMovingAnim = false, takingDamageAnim = false, isDeadAnim = false, isAttackingAnim = false;
        int     status = 99;

        if (stream.isWriting)
        {
            rbEnabled  = !rigidbody.isKinematic;
            position   = transform.position;
            forwardDir = transform.forward;
            if (rbEnabled)
            {
                velocity = rigidbody.velocity;
            }
            else
            {
                velocity = myNavMeshAgent.velocity;
            }
            isMovingAnim     = myBotAnimator.isMoving;
            takingDamageAnim = myBotAnimator.takingDamage;
            isDeadAnim       = myBotAnimator.isDead;
            isAttackingAnim  = myBotAnimator.isAttacking;
            status           = (int)myHPManager.statusEffect;
            //stream.Serialize(ref rbEnabled);
            stream.Serialize(ref position);
            stream.Serialize(ref forwardDir);
            stream.Serialize(ref velocity);
            stream.Serialize(ref isMovingAnim);
            stream.Serialize(ref takingDamageAnim);
            stream.Serialize(ref isDeadAnim);
            stream.Serialize(ref isAttackingAnim);
            stream.Serialize(ref status);
        }
        else
        {
            //stream.Serialize(ref rbEnabled);
            stream.Serialize(ref position);
            stream.Serialize(ref forwardDir);
            stream.Serialize(ref velocity);
            stream.Serialize(ref isMovingAnim);
            stream.Serialize(ref takingDamageAnim);
            stream.Serialize(ref isDeadAnim);
            stream.Serialize(ref isAttackingAnim);
            stream.Serialize(ref status);
            transform.position = position;
            transform.forward  = forwardDir;
            //if (rbEnabled) {
            rigidbody.isKinematic = false;
            rigidbody.velocity    = velocity;
            myNavMeshAgent.Stop();
//			}
//			else {
//				rigidbody.isKinematic = true;
//				myNavMeshAgent.velocity = velocity;
//			}
            myAnimator.SetBool("isMoving", isMovingAnim);
            myAnimator.SetBool("takingDamage", takingDamageAnim);
            myAnimator.SetBool("isDead", isDeadAnim);
            myAnimator.SetBool("isAttacking", isAttackingAnim);
            HealthManager.StatusEffect prevEffect = myHPManager.statusEffect;
            myHPManager.statusEffect = (HealthManager.StatusEffect)status;
            if (prevEffect != myHPManager.statusEffect)
            {
                burnedP.Stop();
                frozenP.Stop();
                shockedP.Stop();
                slowedP.Stop();
                confusedP.Stop();
                switch (myHPManager.statusEffect)
                {
                case HealthManager.StatusEffect.BURNED:
                    burnedP.Play();
                    break;

                case HealthManager.StatusEffect.CONFUSED:
                    confusedP.Play();
                    break;
                }
            }
        }
    }