public void SetPosition(Pos p, Direction dir, float length) { this.dir = dir; this.p = p; this.length = length; this.t.rotation = Quaternion.AngleAxis(Hexagon.DirectionToDegree(dir), Vector3.back); }
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; }
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; } }
public LaserElement(Transform prefab, Pos p, Direction dir, float length) { _length = 1.0f; this.dir = dir; this.p = p; this.t = (Transform)MonoBehaviour.Instantiate( prefab, (Transformer.PosToWorld(p) * (2 - length) + Transformer.PosToWorld(Hexagon.NextTile(p, dir)) * length) / 2 + (Vector3.back * 0.1f), Quaternion.AngleAxis(Hexagon.DirectionToDegree(dir), Vector3.back)); this.length = length; }
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(); } }
IEnumerator StageClear() { LaserElement clearHilight = new LaserElement(hilightPrefab, laserList[0].p, laserList[0].dir, 1.0f);; PlayerPrefs.SetInt(GameLoader.levelData, 1); PlayerPrefs.Save(); playingClearAnimation = true; for (int i = 0; i < laserList.Count; i++) { laserList[i].t.gameObject.SetActive(false); } for (float clearLaserPos = 0; clearLaserPos < laserLength; clearLaserPos += Time.deltaTime * 6.0f) { if (!UIButtonHandler.clearAnimation) { break; } float drawedLaserPos = 0; for (int i = 0; i < laserList.Count; i++) { if (clearLaserPos - drawedLaserPos <= 0) { break; } else { laserList[i].t.gameObject.SetActive(true); if (clearLaserPos - drawedLaserPos <= 1.0f) { laserList[i].length = clearLaserPos - drawedLaserPos; clearHilight.SetPosition(laserList[i].p, laserList[i].dir, laserList[i].length); MeshRenderer render = clearHilight.t.GetComponent <MeshRenderer>(); render.material.mainTextureScale = new Vector2(1.0f, hilightWidth * clearHilight.length); render.material.mainTextureOffset = new Vector2(0.0f, -hilightWidth * clearHilight.length + 0.8f); render.sortingOrder = laserList.Count; } else if (laserList[i].length < 1.0f) { laserList[i].length = 1.0f; } } drawedLaserPos += laserList[i].length; } yield return(null); } for (int i = 0; i < laserList.Count; i++) { laserList[i].t.gameObject.SetActive(true); laserList[i].length = 1.0f; } Destroy(clearHilight.t.gameObject); if (UIButtonHandler.clearAnimation == true) { Transform t = (Transform)MonoBehaviour.Instantiate( hilightPrefab, Transformer.PosToWorld(Hexagon.NextTile(laserList[laserList.Count - 1].p, laserList[laserList.Count - 1].dir)) + (Vector3.back * 0.3f), Quaternion.AngleAxis(Hexagon.DirectionToDegree(laserList[laserList.Count - 1].dir) + 90, Vector3.back)); t.localScale = new Vector3(0.4f, 1.30f, 1.0f); Material m = t.GetComponent <MeshRenderer>().material; /* * for (float i = 0.1f; i < 0.7f; i += Time.deltaTime) * { * m.mainTextureScale = new Vector2(1, 0.1f / i / i); * m.mainTextureOffset = new Vector2(0, 0.5f - 0.1f / i / i / 2); * yield return null; * } * for(float i = 0.7f; i > 0.1; i -= Time.deltaTime) * { * m.mainTextureScale = new Vector2(1, 0.1f / i / i); * m.mainTextureOffset = new Vector2(0, 0.5f - 0.1f / i / i / 2); * yield return null; * } */ m.mainTextureScale = new Vector2(1f, 3f); float i = 0.0f; for (; i < 0.3f; i += Time.deltaTime) { m.mainTextureOffset = new Vector2(0, -7 * i + 3f); yield return(null); } clearSound.PlayOneShot(clearSoundClip, 0.3f); for (; i < 1f; i += Time.deltaTime) { m.mainTextureOffset = new Vector2(0, -7 * i + 3f); yield return(null); } Destroy(t.gameObject); } playingClearAnimation = false; FindObjectOfType <UIButtonHandler>().onMenuOpen(); FindObjectOfType <UIButtonHandler>().menuUI.SetActive(false); }