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 }