Ejemplo n.º 1
0
    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;
    }
Ejemplo n.º 3
0
 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();
     }
 }