using System.Collections; using System.Collections.Generic; using UnityEngine; public class Map : MonoBehaviour { public GameObject LocalPlayer; public GameObject[] Tiles; public List Landmarks; public GameObject[] MapGrid; public GameObject[] WorldWrapGrid; //Minimum and maximum values for the map public float minX; public float maxX; public float minZ; public float maxZ; /* public Camera TopCam; public Camera BotCam; public Camera LeftCam; public Camera RightCam; */ #region StartupFunctions private void Start() { //GenerateMap(); CreateDummys(); } //Create dummy players for the world wrapping void CreateDummys() { List Players = new List(); foreach (GameObject Player in Players) { Transform PT = Player.transform; Transform model = PT.Find("Model"); Instantiate(model, new Vector3(PT.position.x + minX, PT.position.y, PT.position.z), transform.rotation, PT); Instantiate(model, new Vector3(PT.position.x + maxX, PT.position.y, PT.position.z), transform.rotation, PT); Instantiate(model, new Vector3(PT.position.x, PT.position.y, PT.position.z + minZ), transform.rotation, PT); Instantiate(model, new Vector3(PT.position.x, PT.position.y, PT.position.z + maxZ), transform.rotation, PT); } } void GenerateMap() { GameObject[] gameTiles = new GameObject[4]; for (int i = 0; i < 4; i++) { int rand = Random.Range(0, Tiles.Length); GameObject tile = Instantiate(Tiles[rand], MapGrid[i].transform.position, Quaternion.identity); PopulateTile(tile.GetComponent()); gameTiles[i] = tile; } //Create the fake tiles for the world wrapping (This is done super poorly and quickly, don't judge me :) Instantiate(gameTiles[0], WorldWrapGrid[6].transform); Instantiate(gameTiles[0], WorldWrapGrid[10].transform); Instantiate(gameTiles[0], WorldWrapGrid[12].transform); Instantiate(gameTiles[1], WorldWrapGrid[5].transform); Instantiate(gameTiles[1], WorldWrapGrid[9].transform); Instantiate(gameTiles[1], WorldWrapGrid[11].transform); Instantiate(gameTiles[2], WorldWrapGrid[2].transform); Instantiate(gameTiles[2], WorldWrapGrid[4].transform); Instantiate(gameTiles[2], WorldWrapGrid[8].transform); Instantiate(gameTiles[3], WorldWrapGrid[1].transform); Instantiate(gameTiles[3], WorldWrapGrid[3].transform); Instantiate(gameTiles[3], WorldWrapGrid[7].transform); } //Populate the tile with landmarks void PopulateTile(Tile tile) { foreach(GameObject LP in tile.LandmarkPoints) { if (Landmarks.Count > 0) { int rand = Random.Range(0, Landmarks.Count); Instantiate(Landmarks[rand], LP.transform.position, Quaternion.identity, tile.transform.parent); } } } #endregion void Update() { Teleport(); } void Teleport() { Transform PT = LocalPlayer.transform; if (PT.position.x > maxX) { PT.position = new Vector3(minX, PT.position.y, PT.position.z); } else if (PT.position.x < minX) { PT.position = new Vector3(maxX, PT.position.y, PT.position.z); } if (PT.position.z > maxZ) { PT.position = new Vector3(PT.position.x, PT.position.y, minZ); } else if (PT.position.z < minZ) { PT.position = new Vector3(PT.position.x, PT.position.y, maxZ); } } } //EXTRA STUFF, PLEASE IGNORE /* * //IN UPDATE HandleCameraMovement(TopCam, true); HandleCameraMovement(BotCam, true); HandleCameraMovement(LeftCam, false); HandleCameraMovement(RightCam, false); HandleCamSizing(); */ /* /// /// /// /// The camera to move /// Do we move in the X axis or the Z? void HandleCameraMovement(Camera Cam, bool Xmove) { if (Xmove == true) { Cam.transform.position = new Vector3(LocalPlayer.transform.position.x, Cam.transform.position.y, Cam.transform.position.z); } else { Cam.transform.position = new Vector3(Cam.transform.position.x, Cam.transform.position.y, LocalPlayer.transform.position.z); } } void HandleCamSizing() { Transform PT = LocalPlayer.transform; if (PT.position.x > maxX - camWidth) { float dif = ((maxX - PT.position.x) / camWidth) / 2; SetCam(dif, 0, RightCam); } else if (PT.position.x < minX + camWidth) { float dif = ((minX - PT.position.x) / camWidth) / 2; SetCam(dif, 0, LeftCam); } else { SetCam(1, 1, RightCam); SetCam(1, 1, LeftCam); } if (PT.position.z > maxZ - camHeight) { float dif = ((maxZ - PT.position.z) / camHeight) / 2; SetCam(0, dif, TopCam); } else if (PT.position.x < + camHeight) { float dif = ((minZ - PT.position.z) / camHeight) / 2; SetCam(0, dif, BotCam); } else { SetCam(1, 1, RightCam); SetCam(1, 1, LeftCam); } } void SetCam(float x, float y, Camera cam) { cam.rect = new Rect(x, y, 1, 1); } */