public bool Trigger(object sender, object arg, BlockingTriggerYieldInstruction instruction) { if (!_useAsBlockingYieldInstruction || instruction == null) { return(this.Trigger(sender, arg)); } if (!this.CanTrigger) { return(false); } var anim = _targetAnimator.GetTarget <ISPAnimationSource>(arg); if (anim == null) { return(false); } var id = _clipIDs.PickRandom(); _currentAnimState = anim.GetAnim(id); if (_currentAnimState == null) { //this.Invoke(() => { this.OnAnimCompleteCallback(null); }, 0f); if (_triggerCompleteIfNoAnim) { this.Invoke(() => { _onAnimComplete.ActivateTrigger(this, arg); }, 0f); } return(false); } instruction.BeginBlock(); _currentAnimState.TimeSupplier = _timeSupplier.TimeSupplier; _currentAnimState.Play(_speed, _startTime, QueueMode.PlayNow, _playMode); _currentAnimState.Schedule((s) => { _currentAnimState = null; if (_daisyChainBlockingYieldInstruction) { _onAnimComplete.DaisyChainTriggerYielding(this, arg, instruction); } else { _onAnimComplete.ActivateTrigger(this, arg); } instruction.EndBlock(); }); return(true); }
public ActionResult Tick(IAIController ai) { if (_blocking != null) { if (_blocking.IsComplete) { _blocking = null; _state = ActionResult.Success; } else { _state = ActionResult.Waiting; } } else if (_mechanism != null) { _state = ActionResult.Success; if (_mechanism.CanTrigger) { if (_mechanism is IBlockingTriggerableMechanism) { var obj = BlockingTriggerYieldInstruction.Create(); (_mechanism as IBlockingTriggerableMechanism).Trigger(ai, ai, obj); if (obj.Count > 0) { _state = ActionResult.Waiting; _blocking = obj; } else { (obj as System.IDisposable).Dispose(); } } else { _mechanism.Trigger(ai, ai); } } } else { _state = ActionResult.Failed; } return(_state); }
public bool Trigger(object sender, object arg, BlockingTriggerYieldInstruction instruction) { if (!_useAsBlockingYieldInstruction || instruction == null) { return(this.Trigger(sender, arg)); } if (!this.CanTrigger) { return(false); } var targ = this.ResolveTargetAnimator(arg); if (targ == null) { return(false); } var anim = this.TryPlay(targ); if (anim == null) { if (_triggerCompleteIfNoAnim) { this.Invoke(() => { _onAnimComplete.ActivateTrigger(this, arg); }, 0f); } return(false); } instruction.BeginBlock(); AnimUtil.TrySchedule(anim, (a) => { if (_daisyChainBlockingYieldInstruction) { _onAnimComplete.DaisyChainTriggerYielding(this, arg, instruction); } else { _onAnimComplete.ActivateTrigger(this, arg); } instruction.EndBlock(); }); return(false); }
public bool Trigger(object sender, object arg, BlockingTriggerYieldInstruction instruction) { if (!_useAsBlockingYieldInstruction || instruction == null) { return(this.Trigger(sender, arg)); } if (!this.CanTrigger) { return(false); } var targ = this.ResolveTargetAnimator(arg); if (targ == null) { return(false); } var anim = this.TryPlay(targ); if (anim == null) { if (_triggerCompleteIfNoAnim) { this.Invoke(() => { _onAnimComplete.ActivateTrigger(this, arg); }, 0.01f); } return(false); } instruction.BeginBlock(); if (anim is ISPAnim) { (anim as ISPAnim).Schedule((s) => { if (_daisyChainBlockingYieldInstruction) { _onAnimComplete.DaisyChainTriggerYielding(this, arg, instruction); } else { _onAnimComplete.ActivateTrigger(this, arg); } instruction.EndBlock(); }); } else if (anim is AnimationState) { GameLoopEntry.Hook.StartCoroutine((anim as AnimationState).ScheduleLegacy(() => { if (_daisyChainBlockingYieldInstruction) { _onAnimComplete.DaisyChainTriggerYielding(this, arg, instruction); } else { _onAnimComplete.ActivateTrigger(this, arg); } instruction.EndBlock(); })); } return(false); }
private void Trigger_Imp(object arg, BlockingTriggerYieldInstruction instruction) { switch (this._activationType) { case TriggerActivationType.TriggerAllOnTarget: if(_triggerAllCache == null) { //_triggerAllCache = (from t in this._triggerable.GetComponentsAlt<ITriggerableMechanism>() orderby t.Order ascending select t).ToArray(); _triggerAllCache = _triggerable.GetComponentsAlt<ITriggerableMechanism>(); System.Array.Sort(_triggerableArgs, MechanismComparer.Default); } if(instruction != null) { foreach (var t in _triggerAllCache) { if (t.component != null && t.CanTrigger) { if (t is IBlockingTriggerableMechanism) (t as IBlockingTriggerableMechanism).Trigger(arg, instruction); else t.Trigger(arg); } } } else { foreach (var t in _triggerAllCache) { if (t.component != null && t.CanTrigger) { t.Trigger(arg); } } } break; case TriggerActivationType.TriggerSelectedTarget: if (_triggerable != null && _triggerable is ITriggerableMechanism) { if(instruction != null && _triggerable is IBlockingTriggerableMechanism) { var t = _triggerable as IBlockingTriggerableMechanism; if (t.CanTrigger) t.Trigger(arg); } else { var t = _triggerable as ITriggerableMechanism; if (t.CanTrigger) t.Trigger(arg); } } break; case TriggerActivationType.SendMessage: var go = GameObjectUtil.GetGameObjectFromSource(this._triggerable); if (go != null && this._methodName != null) { go.SendMessage(this._methodName, arg, SendMessageOptions.DontRequireReceiver); } break; case TriggerActivationType.CallMethodOnSelectedTarget: if (this._methodName != null) { //CallMethod does not support using the passed in arg //var args = (from a in this._triggerableArgs select (a != null) ? a.Value : null).ToArray(); object[] args = null; if(_triggerableArgs != null && _triggerableArgs.Length > 0) { args = new object[_triggerableArgs.Length]; for(int i = 0; i < args.Length; i++) { if (_triggerableArgs[i] != null) args[i] = _triggerableArgs[i].Value; } } if(args != null && args.Length == 1) { DynamicUtil.SetValue(this._triggerable, this._methodName, args[0]); } else { DynamicUtil.InvokeMethod(this._triggerable, this._methodName, args); } } break; } }
public void TriggerYielding(object arg, BlockingTriggerYieldInstruction instruction) { if (this._triggerable == null) return; var arg0 = (this._triggerableArgs != null && this._triggerableArgs.Length > 0) ? this._triggerableArgs[0].Value : arg; this.Trigger_Imp(arg0, instruction); }
void EventTriggerEvaluator.IEvaluator.TriggerSelectedTarget(object target, object sender, object arg, BlockingTriggerYieldInstruction instruction) { SignalTriggered(target); EventTriggerEvaluator.Default.TriggerSelectedTarget(target, sender, arg, instruction); }
void EventTriggerEvaluator.IEvaluator.TriggerAllOnTarget(object target, object sender, object arg, BlockingTriggerYieldInstruction instruction) { if (Application.isPlaying) { SignalTriggered(target); EventTriggerEvaluator.Default.TriggerAllOnTarget(target, sender, arg, instruction); return; } using (var lst = com.spacepuppy.Collections.TempCollection.GetList <ITriggerableMechanism>()) { this.GetAllTriggersOnTarget(target, lst); if (instruction != null) { var e = lst.GetEnumerator(); while (e.MoveNext()) { var t = e.Current; if (t.CanTrigger) { SignalTriggered(t); if (t is IBlockingTriggerableMechanism) { (t as IBlockingTriggerableMechanism).Trigger(sender, arg, instruction); } else { t.Trigger(sender, arg); } } } } else { var e = lst.GetEnumerator(); while (e.MoveNext()) { var t = e.Current; if (t.CanTrigger) { SignalTriggered(t); t.Trigger(sender, arg); } } } } }