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; }
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(); }
//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; }
protected virtual float getRequiredPower() { return(energySink.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId)); }
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; }
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; }