コード例 #1
0
 void Update()
 {
     if (isInvulnerable)
     {
         m_timeSinceLastHit += Time.deltaTime;
         if (m_timeSinceLastHit > invulnerabiltyTime)
         {
             m_timeSinceLastHit = 0.0f;
             isInvulnerable     = false;
             OnBecomeVulnerable.Invoke();
         }
     }
 }
コード例 #2
0
 void LateUpdate()   //This must not be blocked by derived classes!!!
 {
     if (isInvulnerable)
     {
         m_timeSinceLastHit += Time.deltaTime;
         if (m_timeSinceLastHit > invulnerableTime)
         {
             m_timeSinceLastHit = 0f;
             isInvulnerable     = false;
             OnBecomeVulnerable.Invoke();
         }
     }
 }
コード例 #3
0
        void Update()
        {
            if (m_Invulnerable)
            {
                m_InulnerabilityTimer -= Time.deltaTime;

                if (m_InulnerabilityTimer <= 0f)
                {
                    m_Invulnerable = false;
                    OnBecomeVulnerable.Invoke();
                }
            }
        }
コード例 #4
0
        void Update()
        {
            m_currentHitPoints = (int)(dstManager.GetComponentData<AttributeValues>(this.attributeEntity).CurrentValue.Health);

            if (isInvulnerable)
            {
                m_timeSinceLastHit += Time.deltaTime;
                if (m_timeSinceLastHit > invulnerabiltyTime)
                {
                    m_timeSinceLastHit = 0.0f;
                    isInvulnerable = false;
                    OnBecomeVulnerable.Invoke();
                }
            }

            // This logic is to delay the processing of hp checks by a frame, since the
            // attribute update logic runs after one frame
            if (wasDamaged)
            {
                wasDamaged = false;
                for (var j = 0; j < damageMessagesToAction.Count; j++)
                {
                    var data = damageMessagesToAction[j];
                    if (currentHitPoints <= 0)
                        schedule += OnDeath.Invoke; //This avoid race condition when objects kill each other.
                    else
                        OnReceiveDamage.Invoke();

                    var messageType = currentHitPoints <= 0 ? MessageType.DEAD : MessageType.DAMAGED;

                    for (var i = 0; i < onDamageMessageReceivers.Count; ++i)
                    {
                        var receiver = onDamageMessageReceivers[i] as IMessageReceiver;
                        receiver.OnReceiveMessage(messageType, this, data);
                    }
                }
                damageMessagesToAction.Clear();
            }

            if (damageMessagesToAction.Count > 0)
            {
                wasDamaged = true;
            }

        }