public override void Inflict(FixPoint start_time)
        {
            if (m_generator == null)
            {
                return;
            }
            if (m_delay_time == FixPoint.Zero)
            {
                Impact();
            }
            else
            {
                if (m_delay_task == null)
                {
                    m_delay_task = LogicTask.Create <ComponentCommonTask>();
                    m_delay_task.Construct(this);
                }
                var schedeler = GetLogicWorld().GetTaskScheduler();
                schedeler.Schedule(m_delay_task, GetCurrentTime(), m_delay_time);
            }

#if COMBAT_CLIENT
            if (m_render_effect_cfgid > 0 && m_render_delay_time > FixPoint.Zero)
            {
                if (m_render_delay_task == null)
                {
                    m_render_delay_task = LogicTask.Create <PlayRenderEffectTask>();
                    m_render_delay_task.Construct(this);
                }
                var schedeler = GetLogicWorld().GetTaskScheduler();
                schedeler.Schedule(m_render_delay_task, GetCurrentTime(), m_render_delay_time);
            }
#endif
        }
        protected override void OnDestruct()
        {
            if (m_generator != null)
            {
                GetLogicWorld().GetEffectManager().DestroyGenerator(m_generator.ID, GetOwnerEntityID());
                m_generator = null;
            }
            if (m_delay_task != null)
            {
                m_delay_task.Cancel();
                LogicTask.Recycle(m_delay_task);
                m_delay_task = null;
            }

#if COMBAT_CLIENT
            if (m_render_delay_task != null)
            {
                m_render_delay_task.Cancel();
                LogicTask.Recycle(m_render_delay_task);
                m_render_delay_task = null;
            }
#endif
        }