Beispiel #1
0
    protected override void DamageEvent(float[] _Damage, float[] _CalculateDamage, int[] _DamageType, float _CalculateFullDamage, bool _Critical, Character _Attacker)
    {
        base.DamageEvent(_Damage, _CalculateDamage, _DamageType, _CalculateFullDamage, _Critical, _Attacker);

        LifeTimerWithObjectPool effect = ObjectPool.GetObject <LifeTimerWithObjectPool>(((E_DAMAGETYPE)_DamageType[0]).ToString()); // 데미지 이팩트

        if (effect)
        {
            effect.Initialize();
            effect.transform.localScale = Vector3.one * (m_BodyCollider.radius * 2.0f);
            effect.transform.position   = transform.position + new Vector3(0.0f, m_BodyCollider.center.y, 0.0f);
            effect.gameObject.SetActive(true);
        }

        float YOffset = 0.0f;

        for (int i = 0; i < _DamageType.Length; ++i)
        {
            Billboard b = ObjectPool.GetObject <Billboard>("DamageText");
            if (b)
            {
                b.gameObject.SetActive(true);
                b.Initialize(_Critical ? ((int)_CalculateDamage[i]).ToString() + "!!" : ((int)_CalculateDamage[i]).ToString(),
                             transform.position + new Vector3(0.0f, 1.0f + (m_BodyCollider.height * 0.5f + m_BodyCollider.center.y + YOffset), 0.0f),
                             2.0f);
                b.SetColor(Common.m_DamageColor[_DamageType[i]]);

                YOffset += 0.33f;
            }
        }

        if (m_Health <= 0.0f && m_PhotonView.IsMine)
        {
            SetStateAndAnimationNetwork(E_ANIMATION.DEAD, 0.15f, 1.0f, 0.0f);
            return;
        }

        if (m_PlayHitAnimation)
        {
            m_Animator.CrossFade("Hit", 0.1f);
            SetFreeze(0.5f);
        }

        if (m_IsAutoPlay)
        {
            float damage = 0.0f;
            for (int i = 0; i < _Damage.Length; ++i)
            {
                damage += _Damage[i];
            }
            Character  target = null;
            HateTarget t      = null;
            target = _Attacker as Character;

            if (target != null)
            {
                if (m_DicHateTarget.TryGetValue(target.gameObject.GetInstanceID(), out t))
                {
                    t.m_Hate += damage;
                }
                else
                {
                    m_DicHateTarget.Add(target.gameObject.GetInstanceID(), new HateTarget(target, damage));
                }
            }
        }
    }