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)); }
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()); }
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); }
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); }
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)); }
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); }
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)); }
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); }
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()); }
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); }
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); }
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)); }
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()); }
private void OnHandUpdate(IHand hand) { gesturesStrategy.OnHandUpdate(hand); }
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()); }