// Use this for initialization void Start() { if (Wrapper.isEuclidean) { mid = mainTile.transform.position; size = mainTile.GetComponent <MeshRenderer>().bounds.size.x; halfSize = size / 2f; for (int i = 0; i < 8; i++) { GameObject tile0 = Instantiate(mainTile); tile0.name = "Tile " + i; tile0.transform.position = mainTile.transform.position + xCoords[i] * size * Vector3.right + yCoords[i] * size * Vector3.forward; tiles[i] = tile0; if (!Wrapper.isTorus && i != 0 && i != 4) { tile0.transform.localScale = new Vector3(-tile0.transform.localScale.x, tile0.transform.localScale.y, tile0.transform.localScale.z); } GameObject player0 = Instantiate(mainPlayer); player0.name = "Player " + i; player0.GetComponent <PlayerController>().isMoved = false; player0.transform.position = mainTile.transform.position + xCoords[i] * size * Vector3.right + yCoords[i] * size * Vector3.forward; player0.GetComponent <TrailRenderer>().Clear(); players[i] = player0; } tiles[8] = mainTile; players[8] = mainPlayer; playerOnTorus = Instantiate(mainPlayer); playerOnTorus.GetComponent <Rigidbody>().useGravity = false; Destroy(playerOnTorus.GetComponent <PlayerController>()); playerOnTorus.transform.position = TorusScript.toTorus(mainPlayer.transform.position - tiles[8].transform.position, new Vector2(size, size)) + TorusScript.torus.transform.position; playerOnTorus.GetComponent <TrailRenderer>().Clear(); } else { mainTile.SetActive(false); int p = 4; int q = 6; pb = new PolygonManager(p, q, mat); position = Vector3.zero; } }
// Update is called once per frame void Update() { if (Wrapper.isEuclidean) { if (mainPlayer.transform.position.magnitude > 100) { var move = new Vector3(mainPlayer.transform.position.x, 0, mainPlayer.transform.position.z); mainPlayer.transform.position -= move; mainPlayer.GetComponent <TrailRenderer>().Clear(); foreach (var tile in tiles) { tile.Value.transform.position -= move; } foreach (var player in players) { player.Value.transform.position -= move; player.Value.GetComponent <TrailRenderer>().Clear(); } foreach (var bullet in GameObject.FindGameObjectsWithTag("Bullet")) { bullet.transform.position -= move; } } foreach (var bullet in GameObject.FindGameObjectsWithTag("Bullet")) { var center = tiles[8].transform.position; var oneAndHalf = size + halfSize; var bPos = bullet.transform.position; if (bPos.x > center.x + oneAndHalf) { bullet.transform.position = new Vector3(center.x - oneAndHalf, bPos.y, bPos.z); } else if (bPos.x < center.x - oneAndHalf) { bullet.transform.position = new Vector3(center.x + oneAndHalf, bPos.y, bPos.z); } else if (bPos.z < center.z - oneAndHalf) { if (Wrapper.isTorus) { bullet.transform.position = new Vector3(bPos.x, bPos.y, center.z + oneAndHalf); } else { bullet.transform.position = new Vector3(bPos.x + 2 * (center.x - bPos.x), bPos.y, center.z + oneAndHalf); } } else if (bPos.z > center.x + oneAndHalf) { if (Wrapper.isTorus) { bullet.transform.position = new Vector3(bPos.x, bPos.y, center.z - oneAndHalf); } else { bullet.transform.position = new Vector3(bPos.x + 2 * (center.x - bPos.x), bPos.y, center.z - oneAndHalf); } } } for (int i = 0; i < 8; i++) { var player = players[i]; player.transform.position = mainPlayer.transform.position + xCoords[i] * size * Vector3.right + yCoords[i] * size * Vector3.forward; if (!Wrapper.isTorus && i != 0 && i != 4) { player.transform.position = new Vector3(player.transform.position.x + 2 * (tiles[i].transform.position.x - player.transform.position.x), player.transform.position.y, player.transform.position.z); } } if (mainPlayer.transform.position.z >= tiles[8].transform.position.z + halfSize) { AddTiles(2); } else if (mainPlayer.transform.position.z <= tiles[8].transform.position.z - halfSize) { AddTiles(6); } if (mainPlayer.transform.position.x >= tiles[8].transform.position.x + halfSize) { AddTiles(4); } else if (mainPlayer.transform.position.x <= tiles[8].transform.position.x - halfSize) { AddTiles(0); } if (tileChanged != null) { // var index = tiles [8].GetComponent <tileScript> ().pickUps.IndexOf (tileChanged); // foreach (var tile in tiles) { // tile.Value.GetComponent <tileScript> ().pickUps [index].SetActive (false); // } tileChanged = null; } if (Wrapper.isTorus) { var normalizedPosition = mainPlayer.transform.position - tiles[8].transform.position; playerOnTorus.transform.position = TorusScript.toTorus(normalizedPosition, new Vector2(size, size)) + TorusScript.torus.transform.position; } } else { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); var direction = mainPlayer.GetComponent <PlayerController>().direction; var movement = (moveVertical * direction + moveHorizontal * Vector3.Cross(direction, Vector3.down)); var velocity = new Vector3(movement.x, 0, movement.z) * PlayerController.speed; // var scaledVelocity = FundamentalPolygon.Scale (velocity); if (velocity.magnitude > 0) { // var scaledPos = FundamentalPolygon.Scale (position); // var goal = scaledPos + scaledVelocity; // var f = PoincareDisc.Distance (scaledPos, goal); // Debug.Log ("distance from " + scaledPos + " to " + goal + " is " + f); position += velocity; pb.polygon.MoveTo(position, true); Debug.Log("move origin to " + position); movePlayerOnSurface(); } } }