コード例 #1
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    private bool BeforeEvent(SMEvent smEvent)
    {
        bool specific = BeforeThisEvent(smEvent);
        bool general  = BeforeAnyEvent(smEvent);

        return(specific && general);
    }
コード例 #2
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    private bool LeaveState(SMEvent smEvent)
    {
        bool specific = LeaveThisEvent(smEvent);
        bool general  = LeaveAnyState(smEvent);

        return(specific && general);
    }
コード例 #3
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    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);
    }
コード例 #4
0
ファイル: MonAttackState.cs プロジェクト: amjoy1988/FishGrow
 public override bool OnEnter(SMEvent smEvent)
 {
     timeCount = 0f;
     monCtrl.PlayAnim("monsterAttack");
     monCtrl.AttackTarget();
     return(base.OnEnter(smEvent));
 }
コード例 #5
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    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);
        }
コード例 #7
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
 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));
 }
コード例 #8
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
 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));
 }
コード例 #9
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
 private bool ChangeAnyState(SMEvent smEvent)
 {
     if (false == _callbacks.ContainsKey(HANDLE_ONCHANGEEVENT))
     {
         return(true);
     }
     return(DoCallback(_callbacks[HANDLE_ONCHANGEEVENT], smEvent));
 }
コード例 #10
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
 private bool EnterAnyState(SMEvent smEvent)
 {
     if (false == _callbacks.ContainsKey(HANDLE_ONENTEREVENT))
     {
         return(true);
     }
     return(DoCallback(_callbacks[HANDLE_ONENTEREVENT], smEvent));
 }
コード例 #11
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
 private bool BeforeAnyEvent(SMEvent smEvent)
 {
     if (false == _callbacks.ContainsKey(HANDLE_ONBRFOREEVENT))
     {
         return(true);
     }
     return(DoCallback(_callbacks[HANDLE_ONBRFOREEVENT], smEvent));
 }
コード例 #12
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    private bool DoCallback(Func <SMEvent, bool> callback, SMEvent smEvent)
    {
        if (null != callback)
        {
            return(callback(smEvent));
        }

        return(false);
    }
コード例 #13
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    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);
        }
    }
コード例 #14
0
ファイル: MonAttackState.cs プロジェクト: amjoy1988/FishGrow
 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);
        }
コード例 #16
0
    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);
    }
コード例 #17
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
    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);
        }
    }
コード例 #18
0
 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));
 }
コード例 #19
0
 private bool FallDown(SMEvent smEvent)
 {
     Debug.LogError("FallDown");
     return true;
 }
コード例 #20
0
 private bool Idle(SMEvent smEvent)
 {
     Debug.LogError("Idle");
     return true;
 }
コード例 #21
0
 private bool Jump(SMEvent smEvent)
 {
     Debug.LogError("Jump");
     return true;
 }
コード例 #22
0
 private bool Walk(SMEvent smEvent) {
     Debug.LogError("Walk");
     return true;
 }
コード例 #23
0
 public override bool OnEnter(SMEvent smEvent)
 {
     monCtrl.PlayAnim("monsterIdle");
     return(base.OnEnter(smEvent));
 }
コード例 #24
0
ファイル: AState.cs プロジェクト: amjoy1988/FishGrow
 public virtual bool OnFixedUpdate(SMEvent smEvent)
 {
     return(true);
 }
コード例 #25
0
ファイル: AState.cs プロジェクト: amjoy1988/FishGrow
 public virtual bool OnEnter(SMEvent smEvent)
 {
     return(true);
 }
コード例 #26
0
ファイル: AState.cs プロジェクト: amjoy1988/FishGrow
 public virtual bool OnLeave(SMEvent smEvent)
 {
     return(true);
 }
コード例 #27
0
ファイル: AState.cs プロジェクト: amjoy1988/FishGrow
 public virtual bool OnBefore(SMEvent smEvent)
 {
     return(true);
 }
コード例 #28
0
ファイル: StateMachine.cs プロジェクト: amjoy1988/FishGrow
 private void EnterEvent(SMEvent smEvent)
 {
     EnterThisEvent(smEvent);
     AfterAnyEvent(smEvent);
 }