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());
        }
Exemple #3
0
 // 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);
     }
 }
Exemple #4
0
    //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);
     }
 }
Exemple #7
0
    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);
     }
 }
Exemple #9
0
        /// <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);
    }
Exemple #11
0
    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);
             }
         }
     }
 }
Exemple #14
0
    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"));
        }
    }
Exemple #17
0
 public void ConnectCanister(Canister Incanister)
 {
     canister = Incanister;
 }
Exemple #18
0
 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
 }
Exemple #20
0
 public void ConnectCanister(Canister newCanister)
 {
     canister = newCanister;
 }
Exemple #21
0
 //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));
        }
    }