protected void UpdateState() { current = current.Flip(currentMove); int first = current.FirstCoinAffectedIndex(currentMove); int n = current.NumCoinsAffected(currentMove); Array.Reverse(coins, first, n); }
protected void CreateRotatingBase(Move move) { int first = current.FirstCoinAffectedIndex(move); int n = current.NumCoinsAffected(move); GameObject firstCoin = coins[first]; GameObject lastCoin = coins[first + n - 1]; Vector3 originalPos = (firstCoin.transform.position + lastCoin.transform.position) / 2; rotatingBase = GameObject.CreatePrimitive(PrimitiveType.Cube); rotatingBase.transform.position = originalPos; rotatingBase.GetComponent <Renderer>().enabled = false; for (int i = first; i < first + n; i++) { coins[i].transform.parent = rotatingBase.transform; } }
public RotationController(PuzzleState puzzleState, Move currentMove, GameObject[] pieceObjects, ref Vector2 rotationScreenCenter) { this.pieceObjects = pieceObjects; int first = puzzleState.FirstCoinAffectedIndex(currentMove); int n = puzzleState.NumCoinsAffected(currentMove); GameObject firstCoin = pieceObjects[first]; GameObject lastCoin = pieceObjects[first + n - 1]; Vector3 originalPos = (firstCoin.transform.position + lastCoin.transform.position) / 2; rotatingBase = GameObject.CreatePrimitive(PrimitiveType.Cube); rotatingBase.transform.position = originalPos; rotatingBase.transform.localScale = new Vector3((lastCoin.transform.position - firstCoin.transform.position).x + 0.1f, 0.1f, 1f); rotatingBase.GetComponent <Renderer>().enabled = false; for (int i = first; i < first + n; i++) { pieceObjects[i].transform.parent = rotatingBase.transform; pieceObjects[i].GetComponent <CoinController>().isMoving = true; } rotationScreenCenter = Camera.main.WorldToScreenPoint(rotatingBase.GetComponent <Renderer>().bounds.center); rotatingBase.transform.position -= Vector3.forward; }