public void StartExpirationTask() { if (m_expiration_time == FixPoint.MaxValue) { return; } if (m_task == null) { m_task = LogicTask.Create <EffectExpireTask>(); m_task.Construct(GetOwnerEntityID(), ParentObject.ID); } FixPoint current_time = GetCurrentTime(); var schedeler = GetLogicWorld().GetTaskScheduler(); FixPoint delay = m_expiration_time - current_time; schedeler.Schedule(m_task, current_time, delay); }
protected override void OnDestruct() { EffectGenerator generator = GetLogicWorld().GetEffectManager().GetGenerator(m_generator_id); if (generator == null) { return; } EffectGeneratorEntry entry = generator.GetEntry(m_entry_index); if (entry == null) { return; } entry.RemoveEffect(ParentObject.ID); if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }