public void startRotatingForward() { // disable battery restrictions when in tutorial if (tutorialOn || BatterySystem.GetPower() > 0) { if (!tutorialOn) { BatterySystem.SubPower(1); } numXClicks++; RotateBehavior rotateBehavior = objectToRotate.GetComponent <RotateBehavior>(); if (!rotateBehavior.rotating()) { //rotate rotateBehavior.setRotatingForward(true); float targetRotation = rotateBehavior.getTargetRotation(); objectToRotate.transform.Rotate(-targetRotation, 0, 0); rotateBehavior.setEndRotation(objectToRotate.transform.rotation); objectToRotate.transform.Rotate(targetRotation, 0, 0); } timerStart = true; } }
// Applies all options from the saved file to the locally created variables. public static void Load() { // Make sure all the strings for conversations are loaded. ConversationsDB.LoadConversationsFromFiles(); if (File.Exists(WhereIsData())) { // Prepare for data IO. BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(WhereIsData(), FileMode.Open); // Deserialize the data. SaveContainer data = (SaveContainer)bf.Deserialize(file); file.Close(); //! Fields go here. ConversationTrigger.tokens = new HashSet <string>(data.tokens); // Read inventory-related tokens. InventoryController.ConvertTokensToInventory(); BatterySystem.TokensToPower(); Debug.Log("Loaded all options successfully."); } else { // No file exists? We should make the default one! Debug.Log("No save found, creating default file."); Save(); } }
public IEnumerator Rotate(float x, float y, float z) { // disable fuse button during rotation to let rotation complete before attachment fuseButton.interactable = false; // Integration for battery power. if (!controlsDisabled && !rotating) { BatterySystem.SubPower(1); } // Can only start rotating if not already rotating. Prevents bugs with part movement. if (!rotating) { // Set rotate flag and start rotating. // Flag is reset every frame to ensure the check only runs at the end of all queued rotations. rotating = true; for (int i = 0; i < 30; i++) { toRotate.transform.Rotate(x / 30f, y / 30f, z / 30f, Space.World); rotating = true; yield return(null); } rotating = false; yield return(null); // Wait a frame to see if another active rotation resets this flag to true. if (!rotating) { StartCoroutine(CheckRotation()); } } }
IEnumerator Rotate(float x, float y, float z) { // Integration for battery power. if (!tutorialOn) { BatterySystem.SubPower(1); } // Set rotate flag and start rotating. // Flag is reset every frame to ensure the check only runs at the end of all queued rotations. rotating = true; for (int i = 0; i < 45; i++) { toRotate.transform.Rotate(x / 45f, y / 45f, z / 45f, Space.World); rotating = true; yield return(null); } rotating = false; yield return(null); // Wait a frame to see if another active rotation resets this flag to true. if (!rotating) { StartCoroutine(CheckRotation()); } }
// Checks battery, returns whether this rotation can happen. If it cannot, shows error. // This method will likely be deprecated now that battery power is controlled by rotation counter and timer bool CheckBattery() { // Check if we're in the standard game mode and have no power. if (BatterySystem.GetPower() == 0 && !controlsDisabled && !FuseEvent.runningJustConstructionMode) { return(false); } else { return(true); } }
// Need this somewhere for the restart stuff. // DEMO MODE ONLY // TODO: Disable for full game version public static void RestartGame() { Debug.Log("Restarting!"); //System.IO.File.Delete(Application.persistentDataPath + "/Save.dat"); // Delete save. LoadUtils.loadedScenes.Clear(); // Clear loaded scenes to account for all scene conditions. ConversationTrigger.tokens.Clear(); // Clear tokens for sanity. items.Clear(); // Clear items for safety. BatterySystem.SetPower(10); // Reset power. levelName = ""; Destroy(GameObject.FindGameObjectWithTag("FullPlayer")); // Must make sure the old player is properly deleted... UnityEngine.SceneManagement.SceneManager.LoadScene("SimpleMenu"); // Reload, finally. }
void OnTriggerEnter(Collider other) { if (other.tag == "Player") { AudioSource.PlayClipAtPoint(pickupClip, transform.position); SimpleData.WriteStringToFile("pickups.txt", Time.time + ",PICKUP," + pickupName); switch (type) { case PickupType.Item: // Add the item and update the tokens. InventoryController.Add(this, 1); InventoryController.ConvertInventoryToTokens(); // Object still needs to exist for the icon to work. // Silly, but let's just shove it into a corner and forget about it. // Also parents to the scene manager object so it rejects deletion as much as possible. transform.position = new Vector3(-1000f, -1000f, -1000f); LoadUtils.IconParenter(this.gameObject); break; case PickupType.Battery: BatterySystem.AddPower(2); BatterySystem.PowerToTokens(); RespawnBattery(); break; case PickupType.Clue: CluePopulator.AddClue(pickupName, clueSprite); ConversationTrigger.AddToken("clue_" + pickupName); Destroy(gameObject); break; } if (autoDelete) { ConversationTrigger.AddToken("autodelete_" + pickupName); } } }
void Update() { // Restarting game while in construction mode. // DEMO MODE ONLY. if (Input.GetKey(KeyCode.T) && Input.GetKey(KeyCode.R)) { InventoryController.RestartGame(); } // LookAts. Vector3 lookToward = mainCamera.transform.position; // X xGizmo.transform.LookAt(new Vector3(xGizmo.transform.position.x, lookToward.y, lookToward.z)); Vector3 xTemp = xGizmo.transform.localEulerAngles; xTemp.z = 90; xGizmo.transform.localEulerAngles = xTemp; // Y yGizmo.transform.LookAt(new Vector3(lookToward.x, xGizmo.transform.position.y, lookToward.z)); // Z zGizmo.transform.LookAt(new Vector3(lookToward.x, lookToward.y, xGizmo.transform.position.z)); Vector3 zTemp = zGizmo.transform.localEulerAngles; zTemp.z = 90; zGizmo.transform.localEulerAngles = zTemp; // Raycasts. if (Input.GetMouseButtonDown(0)) { RaycastHit hitInfo = new RaycastHit(); if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo) && (tutorialOn || BatterySystem.GetPower() > 0)) { //Debug.Log(hitInfo.transform.name); switch (hitInfo.transform.name) { case "XUp": xRots++; if (Mathf.Approximately(xGizmo.transform.localEulerAngles.y, 180f)) { StartCoroutine(Rotate(90f, 0f, 0f)); } else { StartCoroutine(Rotate(-90f, 0f, 0f)); } break; case "XDown": xRots++; if (Mathf.Approximately(xGizmo.transform.localEulerAngles.y, 180f)) { StartCoroutine(Rotate(-90f, 0f, 0f)); } else { StartCoroutine(Rotate(90f, 0f, 0f)); } break; case "YLeft": yRots++; StartCoroutine(Rotate(0f, 90f, 0f)); break; case "YRight": yRots++; StartCoroutine(Rotate(0f, -90f, 0f)); break; case "ZUp": zRots++; if (Mathf.Approximately(zGizmo.transform.localEulerAngles.y, 270f)) { StartCoroutine(Rotate(0f, 0f, -90f)); } else { StartCoroutine(Rotate(0f, 0f, 90f)); } break; case "ZDown": zRots++; if (Mathf.Approximately(zGizmo.transform.localEulerAngles.y, 270f)) { StartCoroutine(Rotate(0f, 0f, 90f)); } else { StartCoroutine(Rotate(0f, 0f, -90f)); } break; default: break; } } } }