コード例 #1
0
        void ComponentStack_IsFunctionalChanged()
        {
            PowerReceiver.Update();
            UpdateEmissivity();

            FilledRatio = 0f;

            if (Sync.IsServer)
            {
                SyncObject.ChangeFillRatioAmount(FilledRatio);
            }
        }
コード例 #2
0
        internal void Fill(float amount)
        {
            FilledRatio += amount / Capacity;
            FilledRatio  = Math.Min(1f, FilledRatio);

            if (Sync.IsServer)
            {
                SyncObject.ChangeFillRatioAmount(FilledRatio);
            }

            UpdateEmissivity();
            UdpateText();
        }
コード例 #3
0
        internal void Drain(float amount)
        {
            Debug.Assert(!IsStockpiling, "Stockpiling tank should not be drained");
            FilledRatio -= amount / Capacity;
            FilledRatio  = Math.Max(0f, FilledRatio);

            if (Sync.IsServer)
            {
                SyncObject.ChangeFillRatioAmount(FilledRatio);
            }

            UpdateEmissivity();
            UdpateText();
        }
コード例 #4
0
        public void RefillBottles()
        {
            var  items   = m_inventory.GetItems();
            bool changed = false;

            foreach (var item in items)
            {
                if (FilledRatio == 0f)
                {
                    break;
                }
                var oxygenContainer = item.Content as MyObjectBuilder_OxygenContainerObject;
                if (oxygenContainer != null)
                {
                    if (oxygenContainer.OxygenLevel < 1f)
                    {
                        var   physicalItem       = MyDefinitionManager.Static.GetPhysicalItemDefinition(oxygenContainer) as MyOxygenContainerDefinition;
                        float bottleOxygenAmount = oxygenContainer.OxygenLevel * physicalItem.Capacity;
                        float tankOxygenAmount   = FilledRatio * Capacity;


                        float transferredAmount = Math.Min(physicalItem.Capacity - bottleOxygenAmount, tankOxygenAmount);
                        oxygenContainer.OxygenLevel = (bottleOxygenAmount + transferredAmount) / physicalItem.Capacity;

                        if (oxygenContainer.OxygenLevel > 1f)
                        {
                            oxygenContainer.OxygenLevel = 1f;
                        }

                        FilledRatio -= transferredAmount / Capacity;
                        if (FilledRatio < 0f)
                        {
                            FilledRatio = 0f;
                        }
                        m_inventory.UpdateOxygenAmount();
                        m_inventory.SyncOxygenContainerLevel(item.ItemId, oxygenContainer.OxygenLevel);
                        changed = true;
                    }
                }
            }

            if (changed)
            {
                SyncObject.ChangeFillRatioAmount(FilledRatio);

                UpdateEmissivity();
                UdpateText();
            }
        }
コード例 #5
0
ファイル: MyGasTank.cs プロジェクト: warex0/SpaceEngineers
        internal void ChangeFilledRatio(float newFilledRatio, bool updateSync = false)
        {
            m_nextGasTransfer = 0f;
            float oldFilledRatio = FilledRatio;

            if (oldFilledRatio != newFilledRatio)
            {
                if (updateSync)
                {
                    SyncObject.ChangeFillRatioAmount(newFilledRatio);
                }
                FilledRatio = newFilledRatio;
                SourceComp.SetRemainingCapacityByType(BlockDefinition.StoredGasId, FilledRatio * Capacity);
                ResourceSink.Update();
                UpdateEmissivity();
                UdpateText();
            }
        }