void ProcessRenderMessage_TakeDamage(TakeDamageRenderMessage msg)
        {
            RenderEntity render_entity = m_render_entity_manager.GetObject(msg.EntityID);

            if (render_entity == null)
            {
                return;
            }
            //ZZWTODO
        }
        public void TakeDamage(Damage damage)
        {
            if (ObjectUtil.IsDead(ParentObject))
            {
                RecyclableObject.Recycle(damage);
                return;
            }
            if (damage.m_damage_amount < 0)
            {
                ChangeHealth(-damage.m_damage_amount, damage.m_attacker_id);
                RecyclableObject.Recycle(damage);
                return;
            }
            if (!IsEnable())
            {
                RecyclableObject.Recycle(damage);
                return;
            }
            Entity attacker = GetLogicWorld().GetEntityManager().GetObject(damage.m_attacker_id);

            LastDamage = damage;
            FixPoint original_damage_amount = damage.m_damage_amount;
            FixPoint final_damage_amount    = CalculateFinalDamageAmount(damage, attacker);

            ChangeHealth(-final_damage_amount, damage.m_attacker_id);
            ParentObject.SendSignal(SignalType.TakeDamage, damage);
#if COMBAT_CLIENT
            TakeDamageRenderMessage msg = RenderMessage.Create <TakeDamageRenderMessage>();
            msg.Construct(GetOwnerEntityID(), original_damage_amount, final_damage_amount, damage.m_render_effect_cfgid, damage.m_sound_cfgid);
            GetLogicWorld().AddRenderMessage(msg);
#endif
            if (m_current_health <= 0)
            {
                ApplyExperience(attacker);
            }
            GetLogicWorld().OnCauseDamage(attacker, (Entity)ParentObject, damage);
        }