IEnumerator Flip(Hexagon tile, Direction dir) { switch (dir) { case Direction.North: case Direction.NEE: case Direction.EES: case Direction.South: case Direction.SWW: case Direction.WWN: Direction originalDir = tile.dir; tile.dir = Hexagon.DegreeToDirection(Hexagon.DirectionToDegree(dir) * 2 - Hexagon.DirectionToDegree(originalDir) + 180); //int axisdig = (Hexagon.DirectionToDegree(tile.dir) - Hexagon.DirectionToDegree(originalDir) + 360) / 2 + Hexagon.DirectionToDegree(originalDir); int axisdig = Hexagon.DirectionToDegree(dir) + 90; Debug.Log(Hexagon.DirectionToDegree(originalDir) + "->" + Hexagon.DirectionToDegree(tile.dir) + " : " + axisdig); float rotatesum = 0; while (rotatesum < 180) { allowInput = false; tile.obj.transform.Rotate(new Vector3(Mathf.Sin(Mathf.Deg2Rad * axisdig), Mathf.Cos(Mathf.Deg2Rad * axisdig)) * Time.deltaTime * 180 / flipTime, Space.World); rotatesum += Time.deltaTime * 180 / flipTime; yield return(null); } tile.obj.transform.rotation = Quaternion.AngleAxis(Hexagon.DirectionToDegree(tile.dir), Vector3.back); allowInput = true; break; default: break; } }
IEnumerator Flip(GameObject tile, Direction dir) { switch (dir) { case Direction.North: case Direction.NEE: case Direction.EES: case Direction.South: case Direction.SWW: case Direction.WWN: Direction originalDir = tile.GetComponent <StartSceneTile>().dir; tile.GetComponent <StartSceneTile>().dir = Hexagon.DegreeToDirection(Hexagon.DirectionToDegree(dir) * 2 - Hexagon.DirectionToDegree(originalDir) + 180); int axisdig = (Hexagon.DirectionToDegree(tile.GetComponent <StartSceneTile>().dir) - Hexagon.DirectionToDegree(originalDir) + 360) / 2 + Hexagon.DirectionToDegree(originalDir); //int axisdig = Hexagon.DirectionToDegree(dir) + 90; Debug.Log(Hexagon.DirectionToDegree(originalDir) + "->" + Hexagon.DirectionToDegree(tile.GetComponent <StartSceneTile>().dir) + " : " + axisdig); float rotatesum = 0; while (rotatesum < 180) { tile.transform.Rotate(new Vector3(Mathf.Sin(Mathf.Deg2Rad * axisdig), Mathf.Cos(Mathf.Deg2Rad * axisdig)) * Time.deltaTime * 180 / flipTime, Space.World); rotatesum += Time.deltaTime * 180 / flipTime; yield return(null); } tile.transform.rotation = Quaternion.AngleAxis(Hexagon.DirectionToDegree(tile.GetComponent <StartSceneTile>().dir), Vector3.back); yield return(new WaitForSeconds(flipTime)); break; default: break; } isFlipping = false; }
public void onUndoClick() { if (RayCast.isClear) { return; } if (gameStack.Count > 0 && allowInput) { KeyValuePair <ArrayList, Direction> pop = gameStack.Pop(); ArrayList tiles = pop.Key; Direction dir = pop.Value; flipSound.PlayOneShot(flipSoundClip); foreach (Hexagon tile in tiles) { StartCoroutine(Flip(tile, Hexagon.DegreeToDirection(Hexagon.DirectionToDegree(dir) + 180))); } flip--; flipStatus.text = flip + " / " + FindObjectOfType <GameLoader>().map.maxFlip.ToString(); } }