public void Reset() { currentCollider = null; prevCollider = null; pickedCollider = null; isPinching = false; wasPinching = false; currentPickState = GameController.PickState.None; prevPickState = GameController.PickState.None; }
void StateTransition() { switch (prevPickState) { case GameController.PickState.None: if (isPinching != wasPinching) // None to PickingNothing { Assert(wasPinching == false); wasPinching = isPinching; prevPickState = currentPickState = GameController.PickState.PickingNothing; } else if (currentCollider != prevCollider && currentCollider != null) // None to Hovering { prevCollider = currentCollider; prevPickState = currentPickState = GameController.PickState.Hovering; gameController.OnPickStateChanged( GameController.PickState.None, GameController.PickState.Hovering, this, currentCollider.gameObject); } break; case GameController.PickState.Hovering: if (isPinching != wasPinching && currentCollider != null) // Hovering to Picking { Assert(wasPinching == false); wasPinching = isPinching; prevPickState = currentPickState = GameController.PickState.Picking; pickedCollider = currentCollider; gameController.OnPickStateChanged( GameController.PickState.Hovering, GameController.PickState.Picking, this, currentCollider.gameObject); } else if (currentCollider != prevCollider && prevCollider != null) // Hovering to None { prevPickState = currentPickState = GameController.PickState.None; gameController.OnPickStateChanged( GameController.PickState.Hovering, GameController.PickState.None, this, prevCollider.gameObject); prevCollider = currentCollider; pickedCollider = null; } else { Assert(false); } break; case GameController.PickState.Picking: if (isPinching != wasPinching && currentCollider != null) // Picking to Hovering { Assert(wasPinching == true); wasPinching = isPinching; prevPickState = currentPickState = GameController.PickState.Hovering; gameController.OnPickStateChanged( GameController.PickState.Picking, GameController.PickState.Hovering, this, currentCollider.gameObject); pickedCollider = null; } else if (currentCollider != prevCollider) // Picking to Pulling { Assert(prevCollider != null); Assert(currentCollider == null); Assert(pickedCollider != null); prevCollider = currentCollider; //null prevPickState = currentPickState = GameController.PickState.Pulling; gameController.OnPickStateChanged( GameController.PickState.Picking, GameController.PickState.Pulling, this, pickedCollider.gameObject); } else { Assert(false); } break; case GameController.PickState.Pulling: if (isPinching != wasPinching) // Pulling to None { Assert(wasPinching == true); Assert(isPinching == false); Assert(pickedCollider != null); wasPinching = isPinching; prevPickState = currentPickState = GameController.PickState.None; gameController.OnPickStateChanged( GameController.PickState.Pulling, GameController.PickState.None, this, pickedCollider.gameObject); pickedCollider = null; } else if (currentCollider != prevCollider) // Pulling to Picking { Assert(isPinching == true); if (currentCollider != pickedCollider) { currentCollider = null; return; // ignore entering other than previously picked collider } else { Assert(currentCollider == pickedCollider); prevCollider = pickedCollider; gameController.OnPickStateChanged( GameController.PickState.Pulling, GameController.PickState.Picking, this, currentCollider.gameObject); } } break; case GameController.PickState.PickingNothing: if (isPinching != wasPinching) // PickNothing to None { Assert(wasPinching == true); wasPinching = isPinching; prevPickState = currentPickState = GameController.PickState.None; } else if (prevCollider != currentCollider) // PickNothing to PickNothingColliding { prevCollider = null; currentCollider = null; } break; case GameController.PickState.PickingNothingColliding: if (isPinching != wasPinching) // PickNothingColliding to Hovering { Assert(wasPinching == true); wasPinching = isPinching; gameController.OnPickStateChanged( GameController.PickState.None, GameController.PickState.Hovering, this, currentCollider.gameObject); } else if (prevCollider != currentCollider) // PickNothingColliding to PickNothing { Assert(prevCollider != null); Assert(currentCollider == null); prevCollider = currentCollider; //null } else { Assert(false); } break; } }