void BuildObject(BuildObjectInformation buildRequest) { int layer = CalculateLayer(buildRequest.startingCoord.y); GameObject go = Instantiate(ContentManager.LoadById<GameObject>(templateName), buildRequest.startingPosition, Quaternion.Euler(0, buildRequest.rotation, 0)) as GameObject; if (!buildRequest.isConstructed) { ChangeToGhostObject(go.transform); } go.transform.parent = _layers[layer].transform; if (!buildRequest.isConstructed && buildRequest.secondsRemaining <= 0) { buildRequest.secondsRemaining = (int.Parse(ContentManager.GetFieldById(templateName, "hoursToBuild") as string) * 3600); } //Figure out dimensions for text placement Vector3 bounds = go.GetComponent<BoxCollider>().size; //float smallest = Mathf.Min(bounds.x, bounds.y, bounds.z); CubeHighlight.transform.FindChild("ETAText").GetComponent<TextMeshPro>().text = "ETA: " + Mathf.RoundToInt(buildRequest.secondsRemaining / 3600.0f) + "H"; GameObject ETAText = Instantiate(CubeHighlight.transform.FindChild("ETAText").gameObject); ETAText.transform.SetParent(go.transform); ETAText.transform.localPosition = new Vector3(0, 3.2f, 0); ETAText.transform.localRotation = Quaternion.Euler(90, 0, 0); ETAText.GetComponent<TextMeshPro>().textContainer.width = bounds.x; ETAText.GetComponent<TextMeshPro>().textContainer.height = bounds.z; ETAText.name = "ETAText"; foreach (Vector3 coord in buildRequest.coordinates) { //Check for and remove existing walls and floors if (_constructions.ContainsKey(coord)) { DestroyImmediate(_constructions[coord].objectTransform.gameObject); _constructions.Remove(coord); } //If this is the startingPoint then add the transform reference. Otherwise add a reference to the original if (coord == buildRequest.startingCoord) { _constructions.Add(coord, new BaseConstructionData(templateName, currentLayer, go.transform, buildRequest.startingCoord, buildRequest.secondsRemaining)); } else { _constructions.Add(coord, new BaseConstructionData("empty", currentLayer, go.transform, buildRequest.startingCoord, buildRequest.secondsRemaining)); } _layers[layer].GetComponent<TileMapMouse>().ChangeTile((int)coord.x, (int)coord.z, 4); } //Remove Walls foreach (Vector3 coord in buildRequest.coordinates) { bool north = _constructions.ContainsKey(new Vector3(coord.x, coord.y, coord.z + 1)); bool south = _constructions.ContainsKey(new Vector3(coord.x, coord.y, coord.z - 1)); bool west = _constructions.ContainsKey(new Vector3(coord.x - 1, coord.y, coord.z)); bool east = _constructions.ContainsKey(new Vector3(coord.x + 1, coord.y, coord.z)); if (north) { Transform temp = _constructions[new Vector3(coord.x, coord.y, coord.z + 1)].objectTransform.Find("south"); if (temp) DestroyImmediate(temp.gameObject); } if (south) { Transform temp = _constructions[new Vector3(coord.x, coord.y, coord.z - 1)].objectTransform.Find("north"); if (temp) DestroyImmediate(temp.gameObject); } if (west) { Transform temp = _constructions[new Vector3(coord.x - 1, coord.y, coord.z)].objectTransform.Find("east"); if (temp) DestroyImmediate(temp.gameObject); } if (east) { Transform temp = _constructions[new Vector3(coord.x + 1, coord.y, coord.z)].objectTransform.Find("west"); if (temp) DestroyImmediate(temp.gameObject); } } _layers[layer].GetComponent<TileMapMouse>().RebuildTexture(); }
public void Load() { InitializeMap(); string filePath = System.IO.Path.Combine(Application.persistentDataPath, GlobalPlayerData.ContainmentFacilities[GlobalPlayerData.selectedBaseIndex].Name + ".fmf"); if (System.IO.File.Exists(filePath)) { _buildModeToggle = true; JSONNode Root = JSONNode.Parse(System.IO.File.ReadAllText(filePath)); TimeSpan difference = GeoscapeVariables.GT.date - DateTime.Parse(Root["lastViewedDate"]); Debug.Log("Time Difference: " + difference.TotalSeconds); //lastViewedDate = DateTime.Parse(Root["lastViewedDate"]); foreach (JSONNode Child in Root["undergroundConstructions"].Children) { templateName = Child["prefabName"]; List<Vector3> gridCoords = new List<Vector3>(); foreach(JSONNode coord in Child["occupiedSquares"].Children) { gridCoords.Add(Utils.StrToVec(coord)); } //Determine whether item has completed being constructed float secondsRemaining = 0; if (Child["isUnderConstruction"].AsBool) { secondsRemaining = Child["secondsUntilCompletion"].AsFloat - (float)difference.TotalSeconds; Debug.Log(secondsRemaining); if (secondsRemaining < 0) secondsRemaining = 0; } //Assemble information into struct for easier information passing BuildObjectInformation buildRequest = new BuildObjectInformation(); buildRequest.coordinates = gridCoords; buildRequest.startingCoord = Utils.StrToVec(Child["startingCoord"]); buildRequest.rotation = Mathf.RoundToInt(Child["yRotation"].AsFloat); buildRequest.startingPosition = Utils.StrToVec(Child["position"]); buildRequest.secondsRemaining = secondsRemaining; if (secondsRemaining <= 0) buildRequest.isConstructed = true; else buildRequest.isConstructed = false; BuildObject(buildRequest); } foreach (JSONNode Child in Root["hallways"].Children) { List<Vector3> tempSquares = new List<Vector3>(); foreach (JSONNode tempChild in Child.Children) { //Debug.Log(Utils.StrToVec(tempChild)); tempSquares.Add(Utils.StrToVec(tempChild)); } BuildSquares(tempSquares, false); } _buildModeToggle = false; } }
void DetermineBuildFunction(BuildObjectInformation buildRequest) { switch (buildMode) { case -1: DeleteSquares(buildRequest.coordinates); break; case 0: BuildSquares(buildRequest.coordinates, buildRequest.isConstructed); break; case 1: BuildObject(buildRequest); break; default: Debug.LogError("ERROR: Unsupported Build Mode Entered! No action will be performed."); break; } }