Exemple #1
0
    public void word_creation_continues_while_one_of_the_hands_retains_a_grab()
    {
        CreateKnobs("a", "b", "c");

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("c", 0).Position()).Open());
        strategy.OnHandUpdate(leftHand.Open());

        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(leftHand.At(Knob("a", 1).Position()).Open());

        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(leftHand.Closed());

        strategy.OnHandUpdate(rightHand.Open().At(Knob("b", 2).Position()));
        strategy.OnHandUpdate(leftHand.Closed());

        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(leftHand.Open());

        Assert.AreEqual(0, strategy.Words().Count);
        Assert.AreEqual("cab", strategy.Text());

        strategy.OnHandUpdate(rightHand.Open());

        Assert.AreEqual("cab", strategy.Words()[0]);
        Assert.AreEqual("", strategy.Text());
    }
Exemple #2
0
    public void dont_act_as_if_grab_if_hand_already_closed_as_arrives_at_knob()
    {
        CreateKnobs("a");
        var firstAPosition = Knob("a").Position();

        strategy = NewGesturesStrategy();

        Assert.AreEqual(1, arranger.layers);

        strategy.OnHandUpdate(rightHand.At(firstAPosition).Closed());

        Assert.AreEqual(1, arranger.layers);
    }
Exemple #3
0
    public void second_hand_presence_does_not_release_first_grab()
    {
        CreateKnobs("a", "b");

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("a", 0).Position()).Open());
        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(leftHand.At(Knob("b", 0).Position()).Open());

        Assert.IsTrue(strategy.IsGrabbing(HandSide.Right));
        Assert.IsFalse(strategy.IsGrabbing(HandSide.Left));
    }
Exemple #4
0
    public void second_grab_with_other_hand_adds_to_text()
    {
        CreateKnobs("a", "b");

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("a", 0).Position()).Open());
        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(leftHand.At(Knob("b", 1).Position()).Open());
        strategy.OnHandUpdate(leftHand.Closed());

        Assert.AreEqual("ab", strategy.Text());
    }
Exemple #5
0
    public void only_creates_one_new_layer_when_knob_grabbed()
    {
        CreateKnobs("a");
        var firstAPosition = Knob("a").Position();

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(firstAPosition).Open());
        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(rightHand);
        strategy.OnHandUpdate(rightHand);

        Assert.AreEqual(2, arranger.layers);
    }
Exemple #6
0
    public void grabbing_and_releasing_single_letter_generates_one_char_word_and_resets_layers()
    {
        CreateKnobs("a");

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("a").Position()).Open());
        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(rightHand.Open());

        Assert.AreEqual(1, strategy.Words().Count);
        Assert.AreEqual("a", strategy.Words()[0]);
        Assert.AreEqual("", strategy.Text());
        Assert.AreEqual(1, arranger.layers);
    }
Exemple #7
0
    public void need_to_release_grabbed_knob_when_hand_no_longer_present()
    {
        CreateKnobs("a");

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("a").Position()).Open());
        strategy.OnHandUpdate(rightHand.Closed());

        Assert.IsTrue(strategy.IsGrabbing(HandSide.Right));

        strategy.OnHandUpdate(rightHand.ThatIsNotPresent());

        Assert.IsFalse(strategy.IsGrabbing(HandSide.Right));
    }
Exemple #8
0
    public void knob_remains_grabbed_while_second_grab_made_by_other_hand()
    {
        CreateKnobs("a", "b");

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("a", 0).Position()).Open());
        strategy.OnHandUpdate(rightHand.Closed());
        strategy.OnHandUpdate(leftHand.At(Knob("b", 1).Position()).Open());

        Assert.AreEqual(KnobHandlingState.Grabbed, Knob("a", 0).HandlingState);

        strategy.OnHandUpdate(leftHand.Closed());

        Assert.AreEqual(KnobHandlingState.Grabbed, Knob("a", 0).HandlingState);
    }
Exemple #9
0
    public void need_to_release_grabbed_knob_when_hand_moved_away_from_knobs()
    {
        CreateKnobs("a");

        Vector3 somewhereElse = new Vector3(9999, 6543, 7399);

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(Knob("a").Position()).Open());
        strategy.OnHandUpdate(rightHand.Closed());

        Assert.IsTrue(strategy.IsGrabbing(HandSide.Right));

        strategy.OnHandUpdate(rightHand.At(somewhereElse));

        Assert.IsFalse(strategy.IsGrabbing(HandSide.Right));
    }
Exemple #10
0
    void Start()
    {
        hands = GetComponent <IHands>();
        debug = GetComponent <LiveDebug>();

        var predictor    = new DataBasedAlphabeticPredictor(EnglishWords.AsList());
        var layerCreator = new LetterBasedLayerCreator(letters, predictor);

        knobArranger = new KnobArranger(letters, knobs, layerCreator, new ConsistentAlphabeticLogicalLettersPlacer());
        knobArranger.Arrange(0f);

        var gestures = new Gestures(knobs);

        gesturesStrategy = new GesturesStrategy(gestures, knobArranger, debug);

        hands.OnHandUpdate      += OnHandUpdate;
        gesturesStrategy.OnWord += wordSuggester.Suggest;
    }
Exemple #11
0
    public void knobs_become_unhandled_once_nearer_to_another()
    {
        CreateKnobs("a", "b");
        Assert.AreEqual(KnobHandlingState.Unhandled, Knob("a").HandlingState);
        Assert.AreEqual(KnobHandlingState.Unhandled, Knob("b").HandlingState);

        strategy = NewGesturesStrategy();

        rightHand.Open();
        strategy.OnHandUpdate(rightHand.At(Knob("a").Position()));

        Assert.AreEqual(KnobHandlingState.Touched, Knob("a").HandlingState);
        Assert.AreEqual(KnobHandlingState.Unhandled, Knob("b").HandlingState);

        strategy.OnHandUpdate(rightHand.At(Knob("b").Position()));

        Assert.AreEqual(KnobHandlingState.Unhandled, Knob("a").HandlingState);
        Assert.AreEqual(KnobHandlingState.Touched, Knob("b").HandlingState);
    }
Exemple #12
0
    public void moving_grabbing_hand_drags_knobs_in_z_to_match_location()
    {
        CreateKnobs("a");

        strategy = NewGesturesStrategy();

        var initialAPosition = Knob("a", 0).Position();

        strategy.OnHandUpdate(rightHand.At(initialAPosition).Open());
        strategy.OnHandUpdate(rightHand.Closed());

        Assert.AreEqual(initialAPosition, Knob("a", 0).Position());

        var movedHandPosition = new Vector3(initialAPosition.x, initialAPosition.y, initialAPosition.z + 1);

        strategy.OnHandUpdate(rightHand.At(movedHandPosition));

        AssertPositionsEqual(movedHandPosition, Knob("a", 0).Position());
    }
Exemple #13
0
    public void creates_new_knobs_layer_when_knob_grabbed()
    {
        CreateKnobs("a");
        var firstAPosition = Knob("a").Position();

        Assert.AreEqual(KnobHandlingState.Unhandled, Knob("a").HandlingState);

        strategy = NewGesturesStrategy();

        strategy.OnHandUpdate(rightHand.At(firstAPosition).Open());

        Assert.AreEqual(1, arranger.layers);
        Assert.AreEqual(KnobHandlingState.Touched, Knob("a").HandlingState);

        strategy.OnHandUpdate(rightHand.At(firstAPosition).Closed());

        Assert.AreEqual(2, arranger.layers); // layers should be exposed as truth of knobs
                                             // or mock out arranger?
        Assert.AreEqual(KnobHandlingState.Grabbed, Knob("a").HandlingState);
    }
Exemple #14
0
    public void dont_go_around_approaching_loads_of_different_knobs_then_grabbing_all_and_sundry_when_arrive_again_this_time_closed()
    {
        CreateKnobs("a", "b", "c");

        var firstAPosition = Knob("a").Position();
        var firstBPosition = Knob("b").Position();
        var firstCPosition = Knob("c").Position();

        strategy = NewGesturesStrategy();

        rightHand.Open();
        strategy.OnHandUpdate(rightHand.At(firstAPosition));
        strategy.OnHandUpdate(rightHand.At(firstBPosition));
        strategy.OnHandUpdate(rightHand.At(firstCPosition));

        rightHand.Closed();
        strategy.OnHandUpdate(rightHand.At(firstAPosition));
        strategy.OnHandUpdate(rightHand.At(firstBPosition));
        strategy.OnHandUpdate(rightHand.At(firstCPosition));

        Assert.IsFalse(strategy.IsGrabbing(HandSide.Right));
    }
Exemple #15
0
    public void knobs_move_to_latest_grab_only()
    {
        CreateKnobs("a", "b");

        strategy = NewGesturesStrategy();

        var initialAPosition = Knob("a", 0).Position();

        strategy.OnHandUpdate(rightHand.At(initialAPosition).Open());
        strategy.OnHandUpdate(rightHand.Closed());

        var initialBPosition = Knob("b", 1).Position();

        strategy.OnHandUpdate(leftHand.At(initialBPosition).Open());
        strategy.OnHandUpdate(leftHand.Closed());

        Vector3 movedRightPosition = MovedInZ(initialAPosition, 0.5f);
        Vector3 movedLeftPosition  = MovedInZ(initialBPosition, 0.7f);

        strategy.OnHandUpdate(leftHand.At(movedLeftPosition));
        strategy.OnHandUpdate(rightHand.At(movedRightPosition));

        AssertPositionsEqual(movedLeftPosition, Knob("b", 1).Position());
    }