Exemple #1
0
        public static void StateMachine_TransitionEventTests()
        {
            var stateMachine = new Dictionary <MyStates, HashSet <MyStates> >();

            stateMachine.AddToValues(MyStates.MyState1, MyStates.MyState2);
            MyStates currentState = MyStates.MyState1;

            var listenerForAllTransitionsTriggered     = false;
            var listenerForSpecificTransitionTriggered = false;
            var listenerForExitingState1Triggered      = false;
            var listenerForEnteringState2Triggered     = false;

            StateMachine.SubscribeToAllTransitions <MyStates>(new object(), (passedMachine, oldState, newState) => {
                listenerForAllTransitionsTriggered = true;
                Assert.Equal(stateMachine, passedMachine);
            });
            StateMachine.SubscribeToTransition(new object(), MyStates.MyState1, MyStates.MyState2, (passedMachine) => {
                listenerForSpecificTransitionTriggered = true;
                Assert.Equal(stateMachine, passedMachine);
            });
            StateMachine.SubscribeToStateExited(new object(), MyStates.MyState1, (passedMachine) => {
                listenerForExitingState1Triggered = true;
                Assert.Equal(stateMachine, passedMachine);
            });
            StateMachine.SubscribeToStateEntered(new object(), MyStates.MyState2, (passedMachine) => {
                listenerForEnteringState2Triggered = true;
                Assert.Equal(stateMachine, passedMachine);
            });

            currentState = stateMachine.TransitionTo(currentState, MyStates.MyState2);
            Assert.True(listenerForAllTransitionsTriggered);
            Assert.True(listenerForSpecificTransitionTriggered);
            Assert.True(listenerForExitingState1Triggered);
            Assert.True(listenerForEnteringState2Triggered);
        }
Exemple #2
0
        public static void StateMachine_ExampleUsage1()
        {
            // First define a set of allowed transitions to define the state machine:
            var stateMachine = new Dictionary <MyStates, HashSet <MyStates> >();

            stateMachine.AddToValues(MyStates.MyState1, MyStates.MyState2); // 1 => 2 allowed
            stateMachine.AddToValues(MyStates.MyState2, MyStates.MyState3); // 2 => 3 allowed

            // Initialize a state-machine:
            MyStates currentState = MyStates.MyState1;

            // It is possible to listen to state machine transitions:
            StateMachine.SubscribeToAllTransitions <MyStates>(new object(), (machine, oldState, newState) => {
                Log.d("Transitioned from " + oldState + " to " + newState);
            });
            // And its possible to listen only to specific transitions:
            StateMachine.SubscribeToTransition(new object(), MyStates.MyState1, MyStates.MyState2, delegate {
                Log.d("Transitioned from 1 => 2");
            });

            // Transition the state-machine from state 1 to 2:
            currentState = stateMachine.TransitionTo(currentState, MyStates.MyState2);
            Assert.Equal(MyStates.MyState2, currentState);

            // Invalid transitions throw exceptions (current state is 2):
            Assert.Throws <InvalidOperationException>(() => {
                currentState = stateMachine.TransitionTo(currentState, MyStates.MyState1);
            });
        }
Exemple #3
0
 // In the constructor the allowed transitions and the initial state are set:
 public MyStateMachineForExample2()
 {
     // First define a set of allowed transitions to define the state machine:
     allowedTransitions = new Dictionary <MyStates, HashSet <MyStates> >();
     allowedTransitions.AddToValues(MyStates.MyState1, MyStates.MyState2);
     allowedTransitions.AddToValues(MyStates.MyState2, MyStates.MyState3);
     // Initialize the state-machine:
     currentState = MyStates.MyState1;
 }
        public ScanResultsControl()
        {
            Opacity = 0;
            State   = MyStates.ResultsDisplaying;
            InitializeComponent();
            AnimationsInit();

            AgainButton.Click  += AgainButton_Click;
            IpListButton.Click += IpListButton_Click;
            BackButton.Click   += BackButton_Click;
        }
Exemple #5
0
    //新增一個容器
    void AddNewStateCT()
    {
        GameObject container = Instantiate(myStatesPrefab);

        GoHideArea(container);
        MyStates newStateCT = new MyStates();

        newStateCT.stateImg    = container.GetComponent <Image>();
        newStateCT.cdBar       = container.transform.GetChild(1).GetComponent <Image>();
        newStateCT.nowAmount   = container.transform.GetChild(2).GetComponent <Text>();
        newStateCT.statePrefab = container;
        newStateCT.listNum     = myStatesCT.Count;
        myStatesCT.Add(newStateCT);
    }
 private void SwapIpListYMove_Completed(object sender, EventArgs e)
 {
     if (State == MyStates.ResultsDisplaying)
     {
         ScanResults.Visibility = Visibility.Hidden;
         State = MyStates.IpListDisplaying;
         OpenIpListButtonBar();
     }
     else if (State == MyStates.IpListDisplaying)
     {
         IpList.Visibility = Visibility.Hidden;
         State             = MyStates.ResultsDisplaying;
         OpenButtonBar();
     }
 }
Exemple #7
0
        public static void StateMachine_TransitionEventTests2()
        {
            var stateMachine = new Dictionary <MyStates, HashSet <MyStates> >();

            stateMachine.AddToValues(MyStates.MyState1, MyStates.MyState1);
            stateMachine.AddToValues(MyStates.MyState1, MyStates.MyState2);
            stateMachine.AddToValues(MyStates.MyState2, MyStates.MyState2);
            stateMachine.AddToValues(MyStates.MyState2, MyStates.MyState1);
            MyStates currentState = MyStates.MyState1;

            var state1To1Counter = 0;

            StateMachine.SubscribeToTransition <MyStates>(new object(), MyStates.MyState1, MyStates.MyState1, delegate { state1To1Counter++; });
            var state1To2Counter = 0;

            StateMachine.SubscribeToTransition <MyStates>(new object(), MyStates.MyState1, MyStates.MyState2, delegate { state1To2Counter++; });
            var state2To2Counter = 0;

            StateMachine.SubscribeToTransition <MyStates>(new object(), MyStates.MyState2, MyStates.MyState2, delegate { state2To2Counter++; });
            var state2To1Counter = 0;

            StateMachine.SubscribeToTransition <MyStates>(new object(), MyStates.MyState2, MyStates.MyState1, delegate { state2To1Counter++; });
            {              // Transition from 1 => 1 => 2 => 2 => 1 :
                currentState = Transition_1_2_2_1(stateMachine, currentState);
                var c = 1; // All listeners should have counted one time:
                Assert.Equal(c, state1To1Counter);
                Assert.Equal(c, state1To2Counter);
                Assert.Equal(c, state2To2Counter);
                Assert.Equal(c, state2To1Counter);
            }
            {              // AGAIN Transition from 1 => 1 => 2 => 2 => 1 :
                currentState = Transition_1_2_2_1(stateMachine, currentState);
                var c = 2; // All listeners should have counted AGAIN one time:
                Assert.Equal(c, state1To1Counter);
                Assert.Equal(c, state1To2Counter);
                Assert.Equal(c, state2To2Counter);
                Assert.Equal(c, state2To1Counter);
            }
        }
Exemple #8
0
    /// <summary>
    /// Raises the GU event.
    /// </summary>
    void OnGUI()
    {
        GUI.skin = null;

        if (EditorApplication.isPlaying == false)
        {
            GUILayout.Space(5);

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUI.skin = myState == MyStates.Pointer ? null : tilesGuiSkin;
            if (GUILayout.Button(contents.pointer) == true)
            {
                myState = MyStates.Pointer;
                UpdateTemp();
                tileIdx        = -1;
                environmentIdx = -1;
            }
            GUI.skin = null;
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            GUILayout.Space(20);

            if (GUILayout.Button("Choose background") == true)
            {
                ShowPicker <Sprite>(PickerState.Map, mapSpriteLabel);
            }

            GUI.skin = tilesGuiSkin;

            GUILayout.Space(5);
            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("------------Environment------------");
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("In game sorting");
            inGameSorting = EditorGUILayout.Toggle(inGameSorting);
            EditorGUILayout.EndHorizontal();

            environmentScrollPos = EditorGUILayout.BeginScrollView(environmentScrollPos, GUILayout.MaxHeight(120));
            int environmentNewIdx = GUILayout.SelectionGrid(environmentIdx, environmentTextures, 4);
            if (environmentNewIdx != environmentIdx)
            {
                environmentIdx = environmentNewIdx;
                if (environmentIdx >= 0)
                {
                    myState = MyStates.EnvironmentPlacement;
                    UpdateTemp();
                    tileIdx = -1;
                    SetEnvironment(environmentPrefabs[environmentIdx]);
                }
            }
            EditorGUILayout.EndScrollView();

            GUILayout.Space(5);
            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("---------------Tiles---------------");
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Snap step");
            snapStep = EditorGUILayout.FloatField(snapStep);
            EditorGUILayout.EndHorizontal();

            tilesScrollPos = EditorGUILayout.BeginScrollView(tilesScrollPos, GUILayout.MaxHeight(140));
            int tileNewIdx = GUILayout.SelectionGrid(tileIdx, tileTextures, 4);
            if (tileNewIdx != tileIdx)
            {
                tileIdx = tileNewIdx;
                if (tileIdx >= 0)
                {
                    myState = MyStates.TilePlacement;
                    UpdateTemp();
                    environmentIdx = -1;
                    SetTile(tilePrefabs[tileIdx]);
                }
            }
            EditorGUILayout.EndScrollView();

            GUI.skin = null;

            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button(contents.rotateLeft) == true)
            {
                RotateTile(90f);
            }
            GUILayout.FlexibleSpace();
            if (GUILayout.Button(contents.rotateRight) == true)
            {
                RotateTile(-90f);
            }
            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();

            if (myState == MyStates.Pointer)
            {
                GUILayout.Space(20);
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Map name");
                mapName = EditorGUILayout.TextField(mapName);
                EditorGUILayout.EndHorizontal();

                if (GUILayout.Button("Save map") == true)
                {
                    if (mapFolderInspector != null)
                    {
                        if (mapFolderInspector.map != null)
                        {
                            mapFolderInspector.map.gameObject.name = mapName;
                            GameObject newMapPrefab = PrefabUtility.CreatePrefab("Assets/TD2D/Prefabs/Map/LevelMaps/" + mapName + ".prefab", mapFolderInspector.map.gameObject, ReplacePrefabOptions.ConnectToPrefab);
                            AssetDatabase.Refresh();
                            Selection.activeObject = newMapPrefab;
                            EditorUtility.FocusProjectWindow();
                        }
                    }
                }
            }

            // New object selected in picker window
            if (Event.current.commandName == "ObjectSelectorUpdated" && EditorGUIUtility.GetObjectPickerControlID() == currentPickerWindow)
            {
                pickedObject = EditorGUIUtility.GetObjectPickerObject();
            }
            // Picker window closed
            if (Event.current.commandName == "ObjectSelectorClosed" && EditorGUIUtility.GetObjectPickerControlID() == currentPickerWindow)
            {
                switch (pickerState)
                {
                case PickerState.Map:
                    if (pickedObject != null && pickedObject is Sprite && mapFolderInspector != null)
                    {
                        mapFolderInspector.ChangeMapSprite(pickedObject as Sprite);
                        EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
                    }
                    break;
                }

                pickedObject = null;
                pickerState  = PickerState.None;
            }
        }
        else
        {
            EditorGUILayout.HelpBox("Editor disabled in play mode", MessageType.Info);
        }
    }
Exemple #9
0
    private void UpdateStuff()
    {
        mapFolderInspector = FindObjectOfType <MapFolderInspector>();

        List <Texture> tilesList = new List <Texture>();

        string[] paths = AssetDatabase.FindAssets("t:Prefab", new string[] { "Assets/TD2D/Prefabs/Tiles" });
        foreach (string str in paths)
        {
            GameObject tilePrefab = AssetDatabase.LoadAssetAtPath <GameObject>(AssetDatabase.GUIDToAssetPath(str));
            if (tilePrefab != null)
            {
                SpriteRenderer sprite = tilePrefab.GetComponent <SpriteRenderer>();
                if (sprite != null && sprite.sprite != null)
                {
                    tilePrefabs.Add(tilePrefab);
                    tilesList.Add(sprite.sprite.texture);
                }
            }
        }
        tileTextures = tilesList.ToArray();

        List <Texture> environmentList = new List <Texture>();

        paths = AssetDatabase.FindAssets("t:Prefab", new string[] { "Assets/TD2D/Prefabs/Environment" });
        foreach (string str in paths)
        {
            GameObject environmentPrefab = AssetDatabase.LoadAssetAtPath <GameObject>(AssetDatabase.GUIDToAssetPath(str));
            if (environmentPrefab != null)
            {
                SpriteRenderer sprite = environmentPrefab.GetComponent <SpriteRenderer>();
                if (sprite != null && sprite.sprite != null)
                {
                    environmentPrefabs.Add(environmentPrefab);
                    environmentList.Add(sprite.sprite.texture);
                }
            }
        }
        environmentTextures = environmentList.ToArray();

        tileIdx             = -1;
        environmentIdx      = -1;
        Tools.lockedLayers |= 1 << LayerMask.NameToLayer(mapLayer);
        Tools.lockedLayers &= ~(1 << LayerMask.NameToLayer(tilesLayer));
        myState             = MyStates.Pointer;

        tilesGuiSkin = (GUISkin)AssetDatabase.LoadAssetAtPath("Assets/TD2D/Sprites/Editor/TilesGuiSkin.guiskin", typeof(GUISkin));

        // Set labels for prebas. Label will use in picker window
        string[] prefabs;
        prefabs = AssetDatabase.FindAssets("t:Sprite", new string[] { "Assets/TD2D/Sprites/Maps/Backgrounds" });
        foreach (string str in prefabs)
        {
            Object obj = AssetDatabase.LoadAssetAtPath <Object>(AssetDatabase.GUIDToAssetPath(str));
            AssetDatabase.SetLabels(obj, new string[] { mapSpriteLabel });
        }

        contents.rotateLeft  = new GUIContent((Texture)AssetDatabase.LoadAssetAtPath("Assets/TD2D/Sprites/Editor/RotateLeft.png", typeof(Texture)));
        contents.rotateRight = new GUIContent((Texture)AssetDatabase.LoadAssetAtPath("Assets/TD2D/Sprites/Editor/RotateRight.png", typeof(Texture)));
        contents.pointer     = new GUIContent((Texture)AssetDatabase.LoadAssetAtPath("Assets/TD2D/Sprites/Editor/Pointer.png", typeof(Texture)));
    }
Exemple #10
0
 private void SwitchToState(MyStates newState)
 {
     currentState = allowedTransitions.TransitionTo(currentState, newState);
 }
Exemple #11
0
 private static MyStates Transition_1_2_2_1(Dictionary <MyStates, HashSet <MyStates> > stateMachine, MyStates currentState)
 {
     currentState = stateMachine.TransitionTo(currentState, MyStates.MyState1);
     currentState = stateMachine.TransitionTo(currentState, MyStates.MyState2);
     currentState = stateMachine.TransitionTo(currentState, MyStates.MyState2);
     currentState = stateMachine.TransitionTo(currentState, MyStates.MyState1);
     return(currentState);
 }
Exemple #12
0
        /// <summary>
        /// TODO This is where you are supposed to implement your pose/gesture recognition
        /// </summary>
        /// <param name="trackedBody">Tracked body data</param>
        private void RecognizeGestures(Body trackedBody)
        {
            // TODO Add your pose/gesture recognition code here!

            var leftState  = trackedBody.HandLeftState;
            var rightState = trackedBody.HandRightState;

            if (currentState != MyStates.NOGESTURE)
            {
                switch (currentState)
                {
                case MyStates.NEUTRAL:
                    // Transition condition for right arm stretched out

                    if (LeftHandIn && LeftHandAboveElbow && leftState == HandState.Closed)
                    {
                        Trace.WriteLine("StartingNext");
                        currentState = MyStates.LEFT_HAND_IN;
                    }
                    else if (RightHandIn && RightHandAboveElbow && rightState == HandState.Closed)
                    {
                        Trace.WriteLine("StartingPrev");
                        currentState = MyStates.RIGHT_HAND_IN;
                    }
                    else if (Clap)
                    {
                        Trace.WriteLine("Clapping");
                        currentState = MyStates.CLAP;
                    }
                    else if (FacePalm)
                    {
                        Trace.WriteLine("Face Palm start");
                        lastFacePalm = DateTime.Now;
                        currentState = MyStates.FACE_PALM;
                    }
                    //else if (ToggleGesture)
                    //{
                    //    Trace.WriteLine("Disabling");
                    //    currentState = MyStates.NOGESTURE;
                    //}


                    break;

                case MyStates.LEFT_HAND_IN:
                    if (!LeftHandIn && LeftHandAboveElbow && leftState == HandState.Open)
                    {
                        nextSlide();
                        currentState = MyStates.NEUTRAL;
                        Trace.WriteLine("Next");
                    }
                    else if ((LeftHandIn && leftState == HandState.Open) || !LeftHandAboveElbow)
                    {
                        Trace.WriteLine("Aborting Next");
                        currentState = MyStates.NEUTRAL;
                    }
                    else if (Clap)
                    {
                        Trace.WriteLine("Clapping");
                        currentState = MyStates.CLAP;
                    }
                    else if (FacePalm)
                    {
                        Trace.WriteLine("Face Palm start");
                        lastFacePalm = DateTime.Now;
                        currentState = MyStates.FACE_PALM;
                    }

                    break;

                case MyStates.RIGHT_HAND_IN:
                    if (!RightHandIn && RightHandAboveElbow && rightState == HandState.Open)
                    {
                        previousSlide();
                        currentState = MyStates.NEUTRAL;
                        Trace.WriteLine("Previous");
                    }
                    else if ((RightHandIn && rightState == HandState.Open) || !RightHandAboveElbow)
                    {
                        Trace.WriteLine("Aborting Previous");
                        currentState = MyStates.NEUTRAL;
                    }
                    else if (Clap)
                    {
                        Trace.WriteLine("Clapping");
                        currentState = MyStates.CLAP;
                    }

                    break;

                case MyStates.CLAP:

                    if (NotClap)
                    {
                        currentState = MyStates.NEUTRAL;
                        Trace.WriteLine("End Clapping");
                        if (DateTime.Now - lastClap < TimeSpan.FromSeconds(1) && lastClap != DateTime.MinValue)
                        {
                            endPresentation();
                        }
                        else
                        {
                            startPresentation();
                        }
                        lastClap = DateTime.Now;
                    }
                    break;

                case MyStates.FACE_PALM:
                    if (!FacePalm)
                    {
                        currentState = MyStates.NEUTRAL;
                        Trace.WriteLine("Aborting Face Palm");
                    }

                    if (DateTime.Now - lastFacePalm > TimeSpan.FromSeconds(0.5) && lastFacePalm != DateTime.MinValue)
                    {
                        toggleBlackScreen();
                        currentState = MyStates.BLACK;
                        Trace.WriteLine("Face Palm!");
                    }
                    break;

                case MyStates.BLACK:
                    if (!FacePalm)
                    {
                        Trace.WriteLine("Ending Face Palm");
                        currentState = MyStates.NEUTRAL;
                        lastFacePalm = DateTime.MinValue;
                        toggleBlackScreen();
                    }
                    break;
                }
            }
            else
            {
                if (ToggleGesture)
                {
                    currentState = MyStates.NEUTRAL;
                    Trace.WriteLine("Gesture enabling");
                }
            }
        }