private IEnumerator DisplayFlashingText(string text, float speed = 0.5F) { string initialInfoText = externalTankStatus.Element.text; externalTankStatus.SetValueServer(text); yield return(WaitFor.Seconds(speed)); externalTankStatus.SetValueServer(""); yield return(WaitFor.Seconds(speed / 2)); externalTankStatus.SetValueServer(text); yield return(WaitFor.Seconds(speed)); externalTankStatus.SetValueServer(""); yield return(WaitFor.Seconds(speed / 2)); externalTankStatus.SetValueServer(text); yield return(WaitFor.Seconds(speed)); externalTankStatus.SetValueServer(""); yield return(WaitFor.Seconds(speed / 2)); Canister canister = Provider.GetComponent <Canister>(); if (canister.InsertedContainer != null) { externalTankStatus.SetValueServer($"{canister.InsertedContainer.Item().InitialName}"); } else { externalTankStatus.SetValueServer("No Tank Inserted"); } }
//server side initialization private IEnumerator ServerWaitForProvider() { while (Provider == null) { yield return(WaitFor.EndOfFrame); } canister = Provider.GetComponent <Canister>(); //init pressure dials InternalPressureDial.ServerSpinTo(Mathf.RoundToInt(gasContainer.ServerInternalPressure)); ReleasePressureDial.ServerSpinTo(Mathf.RoundToInt(gasContainer.ReleasePressure)); if (canister.HasContainerInserted) { GasContainer externalTank = canister.InsertedContainer.GetComponent <GasContainer>(); ExternalPressureDial.ServerSpinTo(Mathf.RoundToInt(externalTank.ServerInternalPressure)); } else { ExternalPressureDial.ServerSpinTo(0); } //init connection status canister.ServerOnConnectionStatusChange.AddListener(ServerUpdateConnectionStatus); ServerUpdateConnectionStatus(canister.IsConnected); //init external tank status canister.ServerOnExternalTankInserted.AddListener(ServerUpdateExternalTank); ServerUpdateExternalTank(canister.HasContainerInserted); //init wheel ReleasePressureWheel.SetValueServer(Mathf.RoundToInt(gasContainer.ReleasePressure).ToString()); StartCoroutine(ServerRefreshInternalPressure()); }
// Update is called once per frame void Update() { interactible.enabled = PlayerController.instance.charController.heldObject && !canister; if (canister) { if (canister.transform.parent != transform) { canister = null; } else { float to_drain = Mathf.Min(canister.fullness, Time.deltaTime * 0.2f); canister.fullness -= to_drain; score -= to_drain; } } if (goodCanisterProp != "") { LevelController.instance.animator.SetInteger(goodCanisterProp, canister ? 1 : 0); } if (scoreProp != "") { LevelController.instance.animator.SetFloat(scoreProp, score); } }
//Pre-Initialisation private void Awake() { //Raycast Line Check - Rework to a sphere cast.? rayCast = new Ray(transform.position, Vector3.up); //Default starting value currentCanister = null; }
/// <summary> /// Add invoker for the wall destruction event /// </summary> /// <param name="invoker"></param> public static void AddWallDestructionInvokers(Canister invoker) { wallDestuctionInvokers.Add(invoker); foreach (UnityAction <Vector3> listener in wallDestructionListeners) { invoker.AddWallDestructionListener(listener); } }
/// <summary> /// add invokers fo the canister collison event /// </summary> /// <param name="invoker"></param> public static void AddCanisterProjectileCollisionInvoker(Canister invoker) { canisterCollisionEventInvokers.Add(invoker); foreach (UnityAction <Vector2> listener in canisterCollisionListeners) { invoker.AddCanisterProjectileCollisionListener(listener); } }
public bool CheckForCanister() { ///*Logic for checking if the canister is connected. - Add later for the layer masking*/ if (Physics.Raycast(rayCast, out hitInfo, 1.5f)) { if (hitInfo.collider.tag == "Canister") // - Rework for layer masking as this inner if statement would just result in true ? { //Assign the hitInfo obj to the internal currentCanister and drain the charge from that when connected. //In drain the current canister only when the cannister is connected currentCanister = hitInfo.collider.gameObject.GetComponent <Canister>(); //Debug.Log("Canister found! " + hitInfo.collider.gameObject.name); //if (currentCanister.Charge == 100 && currentCanister.Type == FluxType.NONE) //{ // hitInfo.collider.tag = "Untagged"; // greenCanisterFound = true; //} //Found a canister return(true); } else { //Reset current Canister to null - safe gaurd currentCanister = null; //Something other than a canister return(false); } } else { if (this.transform.childCount > 0 && this.transform.GetChild(0).GetComponent <Canister>() != null) { //As the canister is snapped to the position it becomes a child of this game object. currentCanister = this.transform.GetChild(0).GetComponent <Canister>(); //Debug.Log("Canister found! " + hitInfo.collider.gameObject.name); //if (currentCanister.Charge == 100 && currentCanister.Type == FluxType.NONE) //{ // hitInfo.collider.tag = "Untagged"; // greenCanisterFound = true; //} //Found a canister return(true); } else { //Reset current Canister to null - safe gaurd currentCanister = null; //No canister return(false); } } }
/// <summary> /// Adds canister explosion invoker /// </summary> /// <param name="invoker">invoker</param> public static void AddCanisterExplosionInvoker(Canister invoker) { // add invoker to list and add all listeners to invoker canisterExplosionInvokers.Add(invoker); foreach (UnityAction <Vector3> listener in canisterExplosionListeners) { invoker.AddCanisterExplosionListener(listener); } }
/// <summary> /// </summary> private void add_canister_button_Click(object sender, EventArgs e) { var canister = new Canister { CanisterId = Guid.NewGuid().ToString(), Largecanister = true, Rfid = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 8), RotorId = "rotor" }; PostToServer($"{Webserver}/Canisters/", canister); }
public virtual bool IsCompatibleCanister(Canister a_canister) { foreach (FluxType t in compatibleTypes) { if (a_canister.Type == t) { return(true); } } return(false); }
public void consumeCanister(Canister can) { float pending_anesthetic = anesthetic_levels + can.anesthetic_amount; anesthetic_levels = (pending_anesthetic > 1f) ? 1f : pending_anesthetic; Destroy(can.gameObject); print("anesthetic_levels :: " + anesthetic_levels); displayAnestheticMeter(); canisterUsedOnce = true; if (!inTutorialState) { actionButtonCanvas.SetActive(false); } }
//client side initialization private IEnumerator ClientWaitForProvider() { while (Provider == null) { yield return(WaitFor.EndOfFrame); } //set the tab color and label based on the provider canister = Provider.GetComponent <Canister>(); BG.color = canister.UIBGTint; InnerPanelBG.color = canister.UIInnerPanelTint; LabelText.text = "Contains " + canister.ContentsName; XButton.color = canister.UIBGTint; OnInternalPressureChanged(InternalPressureDial.SyncedValue); InternalPressureDial.OnSyncedValueChanged.AddListener(OnInternalPressureChanged); }
private void VentContainer(bool isOpen) { container.Opened = isOpen; if (isOpen) { StartCoroutine(DisplayFlashingText($"Canister releasing at {container.ReleasePressure}")); Canister canister = Provider.GetComponent <Canister>(); if (canister.ContentsName.Contains("Plasma")) { foreach (var p in Peepers) { AutoMod.ProcessPlasmaRelease(p); } } } }
void Interact() { if (canister) { return; } Pickupable held = PlayerController.instance.charController.heldObject; if (held) { held.Drop(); canister = held.GetComponent <Canister>(); canister.transform.SetParent(transform); canister.transform.rotation = Quaternion.identity; canister.transform.localPosition = new Vector3(0, 0.25f, 0); canister.GetComponent <Rigidbody2D>().simulated = false; canister.GetComponent <Collider2D>().enabled = true; } }
/// <summary> /// Updates the displayed external tank /// </summary> private void ServerUpdateExternalTank(bool externalExists) { Canister canister = Provider.GetComponent <Canister>(); GameObject insertedContainer = canister.InsertedContainer; if (externalExists) { externalTankStatus.SetValueServer(insertedContainer.Item().InitialName); externalTankImage.SetValueServer("ExternalTankInserted@0"); GasContainer externalTank = insertedContainer.GetComponent <GasContainer>(); ExternalPressureDial.ServerSpinTo(Mathf.RoundToInt(externalTank.ServerInternalPressure)); } else { externalTankStatus.SetValueServer("No Tank Inserted"); externalTankImage.SetValueServer("ExternalTankEmpty@0"); ExternalPressureDial.ServerSpinTo(0); } }
public void EjectExternalTank() { Canister canister = Provider.GetComponent <Canister>(); if (canister.InsertedContainer != null) { if (tankValveOpen) { StartCoroutine(DisplayFlashingText("Close the valve first!")); } else { canister.EjectInsertedContainer(); StartCoroutine(DisplayFlashingText("Tank ejected!")); } } else { StartCoroutine(DisplayFlashingText("No Tank Inserted")); } }
public void ConnectCanister(Canister Incanister) { canister = Incanister; }
public void DisconnectCanister() { canister = null; }
internal void ShipPickedUpCanister(Canister canister) { ObjectManager.Instance.WireSpawner.EnqueueWireSpawn(canister.wireType); canister.gameObject.SetActive(false); // maintainer will destroy it later, just hide it for now }
public void ConnectCanister(Canister newCanister) { canister = newCanister; }
//Pre-Initialisation private void Start() { cansiter = this.transform.GetComponent <Canister>(); cansiter.Charge = 100; cansiter.Type = FluxType.GREEN; }
/// <summary> /// switch the secondary valve between internals valve and external tank /// </summary> /// <param name="usingTank">Is the valve set to tank.</param> public void ServerToggleSecondary(bool usingTank) { tankValveOpen = usingTank; Canister canister = Provider.GetComponent <Canister>(); GasContainer canisterTank = canister.GetComponent <GasContainer>(); GasContainer externalTank = canister.InsertedContainer?.GetComponent <GasContainer>(); if (usingTank && externalTank != null) { GasMix canisterGas = canisterTank.GasMix; GasMix tankGas = externalTank.GasMix; float[] updatedCanisterGases = { 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f }; float[] updatedTankGases = { 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f }; float updatedTankMoles = 0f; GasMix totalGas = canisterGas + tankGas; float[] totalGases = totalGas.Gases; //while: canister has greater pressure than external tank AND tank isn't full while (canisterTank.ServerInternalPressure >= externalTank.ServerInternalPressure && updatedTankMoles <= externalTank.MaximumMoles) { //iterate through gases and distribute between the canister and external tank for (int i = 0; i < totalGases.Length; i++) { if (totalGases[i] > 0f && updatedTankMoles <= externalTank.MaximumMoles) { totalGases[i] -= 0.02f; updatedCanisterGases[i] += 0.01f; updatedTankGases[i] += 0.01f; updatedTankMoles += 0.01f; } } } //add remaining gases to the canister values for (int i = 0; i < totalGases.Length; i++) { if (totalGases[i] > 0f) { updatedCanisterGases[i] += totalGases[i]; totalGases[i] = 0f; //compensate for valve blowoff updatedCanisterGases[i] -= 0.02052f; } } //make sure we're not marginally increasing gas in the tank //due to float falloff bool accuracyCheck = true; for (int i = 0; i < canisterTank.Gases.Length; i++) { if (canisterTank.Gases[i] < updatedCanisterGases[i]) { accuracyCheck = false; } } if (accuracyCheck) { canisterTank.Gases = updatedCanisterGases; canisterTank.UpdateGasMix(); } externalTank.Gases = updatedTankGases; externalTank.UpdateGasMix(); ExternalPressureDial.ServerSpinTo(Mathf.RoundToInt(externalTank.ServerInternalPressure)); } else if (usingTank && externalTank == null) { StartCoroutine(DisplayFlashingText("Insert a tank before opening the valve!", 1F)); } }