public virtual void Unregister(MyEntity entity, Vector3I forwardVector)
        {
            Debug.Assert(entity != null);
            Debug.Assert(IsRegistered(entity, forwardVector));
            MyDefinitionId fuelType  = FuelType(entity);
            int            typeIndex = GetTypeIndex(ref fuelType);

            ResourceSink.SetMaxRequiredInputByType(fuelType, ResourceSink.MaxRequiredInputByType(fuelType) - PowerAmountToFuel(ref fuelType, MaxPowerConsumption(entity)));
            m_dataByFuelType[typeIndex].ThrustsByDirection[forwardVector].Remove(entity);
            m_thrustsChanged = true;
            --ThrustCount;
        }
Example #2
0
        private void SinkSetup()
        {
            hydrogenSink = Entity.Components.Get <MyResourceSinkComponent>();
            var maxHydrogenRequired = hydrogenSink.MaxRequiredInputByType(hydrogenDef);
            var maxOxygenRequired   = maxHydrogenRequired / 2;

            sinkInfo = new MyResourceSinkInfo()
            {
                ResourceTypeId    = oxygenDef,
                MaxRequiredInput  = maxOxygenRequired,
                RequiredInputFunc = GetOxygenRequired
            };

            sink = hydrogenSink;

            sink.AddType(ref sinkInfo);

            sink.Update();
        }
Example #3
0
        //Appending Custom Info

        public static void hyperDriveBlock_AppendingCustomInfo(IMyTerminalBlock termblock, StringBuilder info)
        {
            float  maxInput     = ResourceSink.MaxRequiredInputByType(_electricity);
            float  currentInput = ResourceSink.CurrentInputByType(_electricity);
            string suffix       = " MW";

            if (maxInput < 1)
            {
                maxInput     *= 1000f;
                currentInput *= 1000f;
                suffix        = " kW";
                if (maxInput < 1)
                {
                    maxInput     *= 1000f;
                    currentInput *= 1000f;
                    suffix        = " W";
                }
            }

            info.AppendLine("Idle Input: " + maxInput.ToString("0.00") + suffix);
            info.AppendLine("Current Input: " + currentInput.ToString("0.00") + suffix);
            info.AppendLine("Max Input: " + "150.00mW");
        }
        public override void Init(MyObjectBuilder_CubeBlock objectBuilder, MyCubeGrid cubeGrid)
        {
            SyncFlag = true;

            var sinkComp = new MyResourceSinkComponent();

            sinkComp.Init(
                MotorDefinition.ResourceSinkGroup,
                MotorDefinition.RequiredPowerInput,
                () => (Enabled && IsFunctional) ? sinkComp.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId) : 0.0f);
            sinkComp.IsPoweredChanged += Receiver_IsPoweredChanged;
            ResourceSink = sinkComp;

            base.Init(objectBuilder, cubeGrid);

            SlimBlock.ComponentStack.IsFunctionalChanged += ComponentStack_IsFunctionalChanged;

            ResourceSink.Update();

            m_dummyDisplacement.Value = 0.0f;
            LoadDummyPosition();

            var ob = objectBuilder as MyObjectBuilder_MotorBase;

            //Backward compatibility 1.8.2016
            if (ob.RotorEntityId.HasValue && ob.RotorEntityId.Value != 0)
            {
                MyDeltaTransform?deltaTransform = ob.MasterToSlaveTransform.HasValue ? ob.MasterToSlaveTransform.Value : (MyDeltaTransform?)null;
                m_connectionState.Value = new State()
                {
                    TopBlockId = ob.RotorEntityId, MasterToSlave = deltaTransform, Welded = ob.WeldedEntityId.HasValue || ob.ForceWeld
                };
            }

            AddDebugRenderComponent(new Components.MyDebugRenderComponentMotorBase(this));
            NeedsUpdate |= MyEntityUpdateEnum.EACH_100TH_FRAME;
        }
Example #5
0
 protected virtual float getRequiredPower()
 {
     return(energySink.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId));
 }
Example #6
0
        public override void Init(MyObjectBuilder_CubeBlock builder, MyCubeGrid cubeGrid)
        {
            var          doorDefinition = BlockDefinition as MyDoorDefinition;
            MyStringHash resourceSinkGroup;

            if (doorDefinition != null)
            {
                MaxOpen           = doorDefinition.MaxOpen;
                m_openSound       = new MySoundPair(doorDefinition.OpenSound);
                m_closeSound      = new MySoundPair(doorDefinition.CloseSound);
                resourceSinkGroup = MyStringHash.GetOrCompute(doorDefinition.ResourceSinkGroup);
            }
            else
            {
                MaxOpen           = 1.2f;
                m_openSound       = new MySoundPair("BlockDoorSmallOpen");
                m_closeSound      = new MySoundPair("BlockDoorSmallClose");
                resourceSinkGroup = MyStringHash.GetOrCompute("Doors");
            }

            var sinkComp = new MyResourceSinkComponent();

            sinkComp.Init(
                resourceSinkGroup,
                MyEnergyConstants.MAX_REQUIRED_POWER_DOOR,
                () => (Enabled && IsFunctional) ? sinkComp.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId) : 0f);
            sinkComp.IsPoweredChanged += Receiver_IsPoweredChanged;


            ResourceSink = sinkComp;

            base.Init(builder, cubeGrid);

            //m_subpartsSize = 0.5f * (0.5f * SlimBlock.CubeGrid.GridSize - 0.3f);


            var ob = (MyObjectBuilder_Door)builder;

            m_open.Value = ob.State;
            if (ob.Opening == -1)
            {
                m_currOpening = IsFunctional ? 0 : MaxOpen;
                m_open.Value  = !IsFunctional;
            }
            else
            {
                m_currOpening = ob.Opening;
            }


            if (!Enabled || !ResourceSink.IsPoweredByType(MyResourceDistributorComponent.ElectricityId))
            {
                UpdateSlidingDoorsPosition();
            }

            OnStateChange();

            if (m_open)
            {
                // required when reinitializing a door after the armor beneath it is destroyed
                if (Open && (m_currOpening == MaxOpen))
                {
                    UpdateSlidingDoorsPosition();
                }
            }
            sinkComp.Update();
            SlimBlock.ComponentStack.IsFunctionalChanged += ComponentStack_IsFunctionalChanged;
        }
Example #7
0
        public override void Init(MyObjectBuilder_CubeBlock builder, MyCubeGrid cubeGrid)
        {
            MyStringHash orCompute;

            this.m_physicsInitiated = false;
            MyDoorDefinition blockDefinition = base.BlockDefinition as MyDoorDefinition;

            if (blockDefinition != null)
            {
                this.MaxOpen        = blockDefinition.MaxOpen;
                this.m_openSound    = new MySoundPair(blockDefinition.OpenSound, true);
                this.m_closeSound   = new MySoundPair(blockDefinition.CloseSound, true);
                orCompute           = MyStringHash.GetOrCompute(blockDefinition.ResourceSinkGroup);
                this.m_openingSpeed = blockDefinition.OpeningSpeed;
            }
            else
            {
                this.MaxOpen        = 1.2f;
                this.m_openSound    = new MySoundPair("BlockDoorSmallOpen", true);
                this.m_closeSound   = new MySoundPair("BlockDoorSmallClose", true);
                orCompute           = MyStringHash.GetOrCompute("Doors");
                this.m_openingSpeed = 1f;
            }
            MyResourceSinkComponent sinkComp = new MyResourceSinkComponent(1);

            sinkComp.Init(orCompute, 3E-05f, delegate {
                if (!this.Enabled || !this.IsFunctional)
                {
                    return(0f);
                }
                return(sinkComp.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId));
            });
            sinkComp.IsPoweredChanged += new Action(this.Receiver_IsPoweredChanged);
            base.ResourceSink          = sinkComp;
            base.Init(builder, cubeGrid);
            base.NeedsWorldMatrix = false;
            MyObjectBuilder_Door door = (MyObjectBuilder_Door)builder;

            base.m_open.SetLocalValue(door.State);
            if (door.Opening != -1f)
            {
                this.m_currOpening = MathHelper.Clamp(door.Opening, 0f, this.MaxOpen);
            }
            else
            {
                this.m_currOpening = base.IsFunctional ? 0f : this.MaxOpen;
                base.m_open.SetLocalValue(!base.IsFunctional);
            }
            if (!base.Enabled || !base.ResourceSink.IsPoweredByType(MyResourceDistributorComponent.ElectricityId))
            {
                this.UpdateSlidingDoorsPosition();
            }
            this.OnStateChange();
            if (((base.m_open != null) && base.Open) && (this.m_currOpening == this.MaxOpen))
            {
                this.UpdateSlidingDoorsPosition();
            }
            sinkComp.Update();
            base.SlimBlock.ComponentStack.IsFunctionalChanged += new Action(this.ComponentStack_IsFunctionalChanged);
            if (!Sync.IsServer)
            {
                base.NeedsWorldMatrix = true;
            }
        }
        public override void Init(MyObjectBuilder_CubeBlock objectBuilder, MyCubeGrid cubeGrid)
        {
            var          medicalRoomDefinition = BlockDefinition as MyMedicalRoomDefinition;
            MyStringHash resourceSinkGroup;

            if (medicalRoomDefinition != null)
            {
                m_idleSound       = new MySoundPair(medicalRoomDefinition.IdleSound);
                m_progressSound   = new MySoundPair(medicalRoomDefinition.ProgressSound);
                resourceSinkGroup = MyStringHash.GetOrCompute(medicalRoomDefinition.ResourceSinkGroup);
            }
            else
            {
                m_idleSound       = new MySoundPair("BlockMedical");
                m_progressSound   = new MySoundPair("BlockMedicalProgress");
                resourceSinkGroup = MyStringHash.GetOrCompute("Utility");
            }

            SinkComp = new MyResourceSinkComponent();
            SinkComp.Init(
                resourceSinkGroup,
                MyEnergyConstants.MAX_REQUIRED_POWER_MEDICAL_ROOM,
                () => (Enabled && IsFunctional) ? SinkComp.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId) : 0f);
            SinkComp.IsPoweredChanged += Receiver_IsPoweredChanged;

            base.Init(objectBuilder, cubeGrid);

            m_rechargeSocket = new MyRechargeSocket();

            NeedsUpdate |= MyEntityUpdateEnum.EACH_10TH_FRAME;

            SteamUserId = (objectBuilder as MyObjectBuilder_MedicalRoom).SteamUserId;

            if (SteamUserId != 0) //backward compatibility
            {
                MyPlayer controller = Sync.Players.GetPlayerById(new MyPlayer.PlayerId(SteamUserId));
                if (controller != null)
                {
                    IDModule.Owner     = controller.Identity.IdentityId;
                    IDModule.ShareMode = MyOwnershipShareModeEnum.Faction;
                }
            }
            SteamUserId = 0;

            m_takeSpawneeOwnership = (objectBuilder as MyObjectBuilder_MedicalRoom).TakeOwnership;
            m_setFactionToSpawnee  = (objectBuilder as MyObjectBuilder_MedicalRoom).SetFaction;

            SlimBlock.ComponentStack.IsFunctionalChanged += ComponentStack_IsFunctionalChanged;

            InitializeConveyorEndpoint();
            SinkComp.Update();

            AddDebugRenderComponent(new MyDebugRenderComponentDrawPowerReciever(SinkComp, this));

            if (this.CubeGrid.CreatePhysics)
            {
                Components.Add <MyRespawnComponent>(new MyRespawnComponent());
            }

            m_healingAllowed            = medicalRoomDefinition.HealingAllowed;
            m_refuelAllowed             = medicalRoomDefinition.RefuelAllowed;
            m_suitChangeAllowed         = medicalRoomDefinition.SuitChangeAllowed;
            m_customWardrobesEnabled    = medicalRoomDefinition.CustomWardrobesEnabled;
            m_forceSuitChangeOnRespawn  = medicalRoomDefinition.ForceSuitChangeOnRespawn;
            m_customWardrobeNames       = medicalRoomDefinition.CustomWardrobeNames;
            m_respawnSuitName           = medicalRoomDefinition.RespawnSuitName;
            m_spawnWithoutOxygenEnabled = medicalRoomDefinition.SpawnWithoutOxygenEnabled;
            RespawnAllowed = medicalRoomDefinition.RespawnAllowed;
        }