private void DoTriggering(CTriggerMatch match, PoolObjHandle<ActorRoot> src, PoolObjHandle<ActorRoot> atker, object param) { if (((match.TriggerCountMax <= 0) || (++match.m_triggeredCounter <= match.TriggerCountMax)) && !match.bCoolingDown) { match.IntoCoolingDown(); if (match.DelayTime > 0) { int key = Singleton<CTimerManager>.instance.AddTimer(match.DelayTime, 1, new CTimer.OnTimeUpHandler(this.OnDelayTriggerTimer), true); if (key >= 0) { DebugHelper.Assert(!this.DelayTimeSeqMap.ContainsKey(key)); CDelayMatch match2 = new CDelayMatch { AtkerHandle = atker, SrcHandle = src, ParamObj = param, TriggerMatch = match }; this.DelayTimeSeqMap.Add(key, match2); } } else { this.DoTriggeringImpl(match, src, atker, param); } } }
private void OnDelayTriggerTimer(int inTimeSeq) { if (this.DelayTimeSeqMap.ContainsKey(inTimeSeq)) { CDelayMatch match = this.DelayTimeSeqMap[inTimeSeq]; if (match != null) { this.DoTriggeringImpl(match.TriggerMatch, match.SrcHandle, match.AtkerHandle, match.ParamObj); } this.DelayTimeSeqMap.Remove(inTimeSeq); } Singleton<CTimerManager>.instance.RemoveTimer(inTimeSeq); }