public void WorldFromString(string info) { // Destroy old interactable objects foreach (WorldObject obj in Utils.Flatten2dArray(WorldController.Instance.ObjectMap)) { if (obj != null) { Destroy(obj.gameObject); } } // Destroy old actor objects foreach (Actor obj in WorldController.Instance.ActorList) { if (obj != null) { Destroy(obj.gameObject); } } // Decode world info WorldInfo worldInfo = JsonUtility.FromJson <WorldInfo>(info); // Set interactable objects WorldController.Instance.ObjectMap = new WorldObject[worldInfo.Width, worldInfo.Height]; foreach (WorldInfo.EntityInfo obj in worldInfo.ObjectArray) { Vector3 location = new Vector3(obj.Locx, obj.Locy, 0); GameObject prefab = WorldResources.GetGameObject(obj.Type); WorldObject interactableObject = Instantiate(prefab, location, Quaternion.identity).GetComponent <WorldObject>(); interactableObject.ObjectFromString(obj.Info); WorldController.Instance.ObjectMap[(int)obj.Locx, (int)obj.Locy] = interactableObject; } // Set tiles WorldController.Instance.GroundMap = Utils.Reshape2dArray(worldInfo.GroundArray, worldInfo.Width, worldInfo.Height); for (int i = 0; i < WorldController.Instance.Width; i++) { for (int j = 0; j < WorldController.Instance.Height; j++) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(WorldController.Instance.GroundMap[i, j])); } } // Set actor objects WorldController.Instance.ActorList = new Actor[worldInfo.ActorArray.Length]; for (int i = 0; i < worldInfo.ActorArray.Length; i++) { Vector3 location = new Vector3(worldInfo.ActorArray[i].Locx, worldInfo.ActorArray[i].Locy, 0); GameObject prefab = WorldResources.GetGameObject(worldInfo.ActorArray[i].Type); Actor actor = Instantiate(prefab, location, Quaternion.identity).GetComponent <Actor>(); actor.ObjectFromString(worldInfo.ActorArray[i].Info); WorldController.Instance.ActorList[i] = actor; if (worldInfo.ActorArray[i].Type == "Player") { WorldController.Instance.WorldCamera.ToFollow = actor.gameObject; } } }
void GenerateObstacle(string[] tiles, bool[,] blocked, int locationX, int locationY) { int sizeX = (int)Math.Floor(Utils.SampleNormal(obstacleSizeMean, obstacleSizeStd)); int sizeY = (int)Math.Floor(Utils.SampleNormal(obstacleSizeMean, obstacleSizeStd)); sizeX = locationX + sizeX < blocked.GetUpperBound(0) ? sizeX : blocked.GetUpperBound(0) - locationX; sizeY = locationY + sizeY < blocked.GetUpperBound(1) ? sizeY : blocked.GetUpperBound(1) - locationY; for (int i = locationX; i < locationX + sizeX; i++) { for (int j = locationY; j < locationY + sizeY; j++) { if (i == locationX && j == locationY) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[6])); WorldController.Instance.GroundMap[i, j] = tiles[6]; } else if (i == locationX + sizeX - 1 && j == locationY) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[8])); WorldController.Instance.GroundMap[i, j] = tiles[8]; } else if (i == locationX && j == locationY + sizeY - 1) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[0])); WorldController.Instance.GroundMap[i, j] = tiles[0]; } else if (i == locationX + sizeX - 1 && j == locationY + sizeY - 1) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[2])); WorldController.Instance.GroundMap[i, j] = tiles[2]; } else if (i == locationX) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[3])); WorldController.Instance.GroundMap[i, j] = tiles[3]; } else if (j == locationY) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[7])); WorldController.Instance.GroundMap[i, j] = tiles[7]; } else if (i == locationX + sizeX - 1) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[5])); WorldController.Instance.GroundMap[i, j] = tiles[5]; } else if (j == locationY + sizeY - 1) { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[1])); WorldController.Instance.GroundMap[i, j] = tiles[1]; } else { WorldController.Instance.WorldTilemap.SetTile(new Vector3Int(i, j, 0), WorldResources.GetTile(tiles[4])); WorldController.Instance.GroundMap[i, j] = tiles[4]; } blocked[i, j] = true; } } }