private bool BeforeEvent(SMEvent smEvent) { bool specific = BeforeThisEvent(smEvent); bool general = BeforeAnyEvent(smEvent); return(specific && general); }
private bool LeaveState(SMEvent smEvent) { bool specific = LeaveThisEvent(smEvent); bool general = LeaveAnyState(smEvent); return(specific && general); }
public int DoEventForce(string name) { string from = _curState; Dictionary <string, string> map = _map[name]; string to = map[_curState]; List <string> newFrom = new List <string> { from }; smEvent = new SMEvent(name, newFrom, to); if (true == _inTransition) { _inTransition = false; } BeforeEvent(smEvent); if (from == to) { AfterEvent(smEvent); return(NOTRANSITION); } _curState = to; EnterEvent(smEvent); ChangeAnyState(smEvent); AfterEvent(smEvent); return(SUCCEEDED); }
public override bool OnEnter(SMEvent smEvent) { timeCount = 0f; monCtrl.PlayAnim("monsterAttack"); monCtrl.AttackTarget(); return(base.OnEnter(smEvent)); }
public StateMachine SetupState(List <SMEvent> events, Dictionary <string, Func <SMEvent, bool> > callbacks, string initial, string terminal, bool defer) { _callbacks = callbacks; _terminal = terminal; _map = new Dictionary <string, Dictionary <string, string> >(); _curState = STATE_NONE; _inTransition = false; SMEvent initialEvent = new SMEvent(initial, new List <string> { STATE_NONE }, initial); AddEvent(initialEvent); foreach (SMEvent smEvent in events) { AddEvent(smEvent); } if (false == defer) { DoEvent(initialEvent.Name); } return(this); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); SetContentView(Resource.Layout.activity_main); var test = Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId); Button sendEventBtn = FindViewById <Button>(Resource.Id.eventBtn); sendEventBtn.Click += delegate { //Here is an example of sending a custom event to the Selligent Mobile Platform. //The method is the same for all other events, only the object passed is different. //You can pass some data. It can be null. Hashtable data = new Hashtable(); data.Put("key1", "value 1"); data.Put("key2", "value 2"); data.Put("key3", "value 3"); SMEvent evt = new SMEvent(data, new SMCallBack()); SMManager.Instance.SendSMEvent(evt); }; //If you use SMRemoteMessageDisplayType.Notification in the settings and have several activities, you may want to overwrite change NOTIFICATION_ACTIVITY here SMManager.NotificationActivity = this.Class; //Here is how you can use observers to listen to our events and replace the broadcasts tokenObserver = new TokenObserver(this); SMManager.Instance.ObserverManager.ObserveToken(this, tokenObserver); InAppMessageObserver inAppMessageObserver = new InAppMessageObserver(this); SMManager.Instance.ObserverManager.ObserveInAppMessages(this, inAppMessageObserver); InAppContentObserver inAppContentObserver = new InAppContentObserver(this, SupportFragmentManager); SMManager.Instance.ObserverManager.ObserveInAppContents(this, inAppContentObserver); ClickButtonObserver clickButtonObserver = new ClickButtonObserver(this); SMManager.Instance.ObserverManager.ObserveClickedButton(this, clickButtonObserver); DismissMessageObserver dismissMessageObserver = new DismissMessageObserver(this); SMManager.Instance.ObserverManager.ObserveDismissedMessage(this, dismissMessageObserver); DisplayedMessageObserver displayedMessageObserver = new DisplayedMessageObserver(this); SMManager.Instance.ObserverManager.ObserveDisplayedMessage(this, displayedMessageObserver); CustomEventObserver customEventObserver = new CustomEventObserver(this); SMManager.Instance.ObserverManager.ObserveEvent(this, customEventObserver); }
private bool FixedUpdateThisEvent(SMEvent smEvent) { if (false == _callbacks.ContainsKey(string.Format("onfixedupdate{0}", smEvent.Name))) { return(true); } return(DoCallback(_callbacks[string.Format("onfixedupdate{0}", smEvent.Name)], smEvent)); }
private bool EnterThisEvent(SMEvent smEvent) { if (false == _callbacks.ContainsKey(string.Format("onenter{0}", smEvent.Name))) { return(true); } return(DoCallback(_callbacks[string.Format("onenter{0}", smEvent.Name)], smEvent)); }
private bool ChangeAnyState(SMEvent smEvent) { if (false == _callbacks.ContainsKey(HANDLE_ONCHANGEEVENT)) { return(true); } return(DoCallback(_callbacks[HANDLE_ONCHANGEEVENT], smEvent)); }
private bool EnterAnyState(SMEvent smEvent) { if (false == _callbacks.ContainsKey(HANDLE_ONENTEREVENT)) { return(true); } return(DoCallback(_callbacks[HANDLE_ONENTEREVENT], smEvent)); }
private bool BeforeAnyEvent(SMEvent smEvent) { if (false == _callbacks.ContainsKey(HANDLE_ONBRFOREEVENT)) { return(true); } return(DoCallback(_callbacks[HANDLE_ONBRFOREEVENT], smEvent)); }
private bool DoCallback(Func <SMEvent, bool> callback, SMEvent smEvent) { if (null != callback) { return(callback(smEvent)); } return(false); }
public int DoEvent(string name) { if (false == _map.ContainsKey(name)) { Debug.LogError(string.Format("StateMachine:doEvent() - invalid event {0}", name)); } if (true == _inTransition) { Debug.LogError("_inTransition"); //OnError(name, from, to, PENDING_TRANSITION_ERROR, string.Format("event:{0} inappropriate because previous transition did not complete", name)); return(FAILURE); } if (true == CanNotDoEvent(name)) { Debug.LogError("CanNotDoEvent"); //OnError(name, from, to, PENDING_TRANSITION_ERROR, string.Format("event:{0} inappropriate in current state", name, _curState)); return(FAILURE); } string from = _curState; Dictionary <string, string> map = _map[name]; string to = map[_curState]; List <string> newFrom = new List <string> { from }; smEvent = new SMEvent(name, newFrom, to); if (false == BeforeEvent(smEvent)) { return(CANCELLED); } if (from == to) { AfterEvent(smEvent); return(NOTRANSITION); } _inTransition = true; if (false == LeaveState(smEvent)) { _inTransition = false; return(CANCELLED); } else { _inTransition = false; _curState = to; EnterEvent(smEvent); ChangeAnyState(smEvent); AfterEvent(smEvent); return(SUCCEEDED); } }
public override bool OnUpdate(SMEvent smEvent) { if (timeCount >= monCtrl.attackCD) { monCtrl.stateMachine.DoEvent("move"); } timeCount += Time.deltaTime; return(base.OnUpdate(smEvent)); }
partial void buttonSendEventPressed(UIButton sender) { // We create a custom-event // Some basic events are already created for you. Please check SMHelper.h NSDictionary dict = new NSDictionary <NSString, NSString>(new NSString("key"), new NSString("value")); SMEvent eventCustom = SMEvent.EventWithDictionary(dict); SMManager.SharedInstance().SendSMEvent(eventCustom); }
public void RegisterEvent(string triggerName, UnityAction <Params> listener) { if (!m_StatusEvents.ContainsKey(triggerName)) { SMEvent smEvent = new SMEvent(); m_StatusEvents.Add(triggerName, smEvent); } m_StatusEvents[triggerName].AddListener(listener); }
private void AddEvent(SMEvent smEvent) { if (false == _map.ContainsKey(smEvent.Name)) { _map.Add(smEvent.Name, new Dictionary <string, string>()); } foreach (string fromName in smEvent.Froms) { _map[smEvent.Name].Add(fromName, smEvent.To); } }
public override bool OnUpdate(SMEvent smEvent) { if (monCtrl.IsHungry()) { if (monCtrl.isHasTarget()) { monCtrl.FollowTarget(); if (monCtrl.IsReachTarget()) { monCtrl.stateMachine.DoEvent("attack"); } } else { monCtrl.GetTarget(); } } else { monCtrl.Wander(); } return(base.OnUpdate(smEvent)); }
private bool FallDown(SMEvent smEvent) { Debug.LogError("FallDown"); return true; }
private bool Idle(SMEvent smEvent) { Debug.LogError("Idle"); return true; }
private bool Jump(SMEvent smEvent) { Debug.LogError("Jump"); return true; }
private bool Walk(SMEvent smEvent) { Debug.LogError("Walk"); return true; }
public override bool OnEnter(SMEvent smEvent) { monCtrl.PlayAnim("monsterIdle"); return(base.OnEnter(smEvent)); }
public virtual bool OnFixedUpdate(SMEvent smEvent) { return(true); }
public virtual bool OnEnter(SMEvent smEvent) { return(true); }
public virtual bool OnLeave(SMEvent smEvent) { return(true); }
public virtual bool OnBefore(SMEvent smEvent) { return(true); }
private void EnterEvent(SMEvent smEvent) { EnterThisEvent(smEvent); AfterAnyEvent(smEvent); }