Example #1
0
    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();
    }
Example #2
0
 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;
     }
 }
Example #3
0
 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;
     }
 }