public override void Init(MyObjectBuilder_EntityBase objectBuilder) { try { npcCrewBlock = Entity as IMyUpgradeModule; //MyAPIGateway.Utilities.ShowMessage("DEBUG", "Init Ran"); NeedsUpdate = MyEntityUpdateEnum.EACH_FRAME; npcCrewBlock.CubeGrid.ColorBlocks(npcCrewBlock.SlimBlock.Position, npcCrewBlock.SlimBlock.Position, Color.Red.ColorToHSV()); NPCCrewConfig loadconfig = NPCCrewConfig.LoadConfigFile(); forceColor = loadconfig.forceColor; if (Sink == null) { Sink = new MyResourceSinkComponent(); } ResourceInfo = new MyResourceSinkInfo() { ResourceTypeId = GId, MaxRequiredInput = 0.02f, RequiredInputFunc = () => Power }; Sink.Init(MyStringHash.GetOrCompute("Utility"), ResourceInfo); Sink.AddType(ref ResourceInfo); Entity.Components.Add(Sink); Sink.Update(); } catch (Exception e) { MyVisualScriptLogicProvider.ShowNotificationToAll("Init Error" + e, 10000, "Red"); } }
public NaniteOreDetector(IMyFunctionalBlock entity) { m_block = entity as IMyOreDetector; m_lastUpdate = DateTime.MinValue; m_scanStart = DateTime.MinValue; m_scanEnd = DateTime.MinValue; m_lock = new FastResourceLock(); m_oreListCache = new StringBuilder(); m_detectorState = DetectorStates.Disabled; m_lastDetectorState = DetectorStates.Disabled; m_block.Components.TryGet(out Sink); ResourceInfo = new MyResourceSinkInfo() { ResourceTypeId = MyResourceDistributorComponent.ElectricityId, MaxRequiredInput = 0f, RequiredInputFunc = () => (m_block.Enabled && m_block.IsFunctional) ? _power : 0f }; Sink.RemoveType(ref ResourceInfo.ResourceTypeId); Sink.Init(MyStringHash.GetOrCompute("Utility"), ResourceInfo); Sink.AddType(ref ResourceInfo); m_effects.Add(new OreDetectorEffect((MyCubeBlock)m_block)); if (!NaniteConstructionManager.OreDetectors.ContainsKey(entity.EntityId)) { NaniteConstructionManager.OreDetectors.Add(entity.EntityId, this); } }
private void SinkChanged(MyResourceSinkComponent old, MyResourceSinkComponent @new) { if (old != null) { foreach (var key in old.AcceptedResources) { old.SetMaxRequiredInputByType(key, 0); old.SetRequiredInputFuncByType(key, () => 0); } RemoveDelegate(ref old.CurrentInputChanged, OnInputChanged); } if (@new == null) { return; } foreach (var kv in _sinks) { var info = new MyResourceSinkInfo() { MaxRequiredInput = kv.Value.CalculateMaxInput(), RequiredInputFunc = kv.Value.DelCalculateRequiredInput, ResourceTypeId = kv.Key }; @new.AddType(ref info); @new.SetMaxRequiredInputByType(kv.Key, kv.Value.CalculateMaxInput()); @new.SetRequiredInputFuncByType(kv.Key, kv.Value.DelCalculateRequiredInput); } AddDelegate(ref @new.CurrentInputChanged, OnInputChanged); }
public override void UpdateOnceBeforeFrame() { if (!IsReal((MyCubeBlock)block) || !MyAPIGateway.Multiplayer.IsServer) // ignore projected and other non-physical grids { return; } NeedsUpdate |= MyEntityUpdateEnum.EACH_100TH_FRAME; myNotUsedRespawn = block.Components.Get <MyEntityRespawnComponentBase>(); _respawnAllowed = myNotUsedRespawn != null; // setup resources sink = Entity.Components.Get <MyResourceSinkComponent>(); var fleshSink = new MyResourceSinkInfo() { ResourceTypeId = Gasses.Flesh, // people are flesh MaxRequiredInput = MaxFillRate, RequiredInputFunc = GetFleshRequired }; sink.AddType(ref fleshSink); sink.Update(); }
private int InitializeType(MyDefinitionId fuelType) { m_dataByFuelType.Add(new FuelTypeData { ThrustsByDirection = new Dictionary <Vector3I, HashSet <MyEntity> >(6, m_directionComparer), MaxRequirementsByDirection = new Dictionary <Vector3I, float>(6, m_directionComparer), FuelConversionDirty = true, CurrentPowerFromFuel = 0f, CurrentRequiredFuelInput = 0f, Efficiency = 0f, EnergyDensity = 0f, }); int typeIndex = m_dataByFuelType.Count - 1; m_fuelTypeToIndex.Add(fuelType, typeIndex); m_fuelTypes.Add(fuelType); foreach (var direction in Base6Directions.IntDirections) { m_dataByFuelType[typeIndex].ThrustsByDirection[direction] = new HashSet <MyEntity>(); } var sinkData = new MyResourceSinkInfo { ResourceTypeId = fuelType, MaxRequiredInput = 0, RequiredInputFunc = () => RequiredFuelInput(ref fuelType) }; if (m_fuelTypes.Count == 1) { ResourceSink.Init(MyStringHash.GetOrCompute("Thrust"), sinkData); ResourceSink.IsPoweredChanged += Sink_IsPoweredChanged; ResourceSink.CurrentInputChanged += Sink_CurrentInputChanged; var cubeGrid = Container.Entity as MyCubeGrid; if (cubeGrid != null) { var gridSystems = cubeGrid.GridSystems; if (gridSystems != null) { if (gridSystems.ResourceDistributor != null) { gridSystems.ResourceDistributor.AddSink(ResourceSink); } } } } else { ResourceSink.AddType(ref sinkData); } return(typeIndex); }
public RadarPowerModule(MyRadar Radar) : base(Radar) { if (!RadarBlock.TryGetComponent(out MyRadarPowerSink)) { MyRadarPowerSink = new MyResourceSinkComponent(); MyResourceSinkInfo info = new MyResourceSinkInfo(); info.ResourceTypeId = Electricity; MyRadarPowerSink.AddType(ref info); RadarBlock.Components.Add(MyRadarPowerSink); } }
private void InitPowerSystem() { m_powerConsumption = MaxHeat * 0.001f; var powerSystem = new MyResourceSinkComponent(); var sinkInfo = new MyResourceSinkInfo(); sinkInfo.ResourceTypeId = m_electricityDefinition; sinkInfo.MaxRequiredInput = m_powerConsumption; sinkInfo.RequiredInputFunc = new Func <float>(RequiredInputFunc); powerSystem.AddType(ref sinkInfo); Entity.Components.Add <MyResourceSinkComponent>(powerSystem); m_resourceSink = Entity.Components.Get <MyResourceSinkComponent>(); }
void SetPowerSink() { sink = Entity.Components.Get <MyResourceSinkComponent>(); sink.SetRequiredInputFuncByType(resourceId, () => GetPowerInput()); MyResourceSinkInfo resourceInfo = new MyResourceSinkInfo() { ResourceTypeId = resourceId, MaxRequiredInput = turret == null ? _idlePowerDrawBase : _idlePowerDrawMax, RequiredInputFunc = () => GetPowerInput() }; sink.RemoveType(ref resourceInfo.ResourceTypeId); sink.Init(MyStringHash.GetOrCompute("Defense"), resourceInfo); //sink.Init(MyStringHash.GetOrCompute("Defense"), turret == null ? _idlePowerDrawBase : _idlePowerDrawMax, () => GetPowerInput()); sink.AddType(ref resourceInfo); }
public override void Init(MyObjectBuilder_EntityBase objectBuilder) { NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME | MyEntityUpdateEnum.BEFORE_NEXT_FRAME; _objectBuilder = objectBuilder; hyperDriveBlock = Entity as IMyUpgradeModule; if (!hyperDriveBlock.Components.TryGet <MyResourceSinkComponent>(out ResourceSink)) { ResourceSink = new MyResourceSinkComponent(); var sinkInfo = new MyResourceSinkInfo(); sinkInfo.ResourceTypeId = _electricity; ResourceSink.AddType(ref sinkInfo); hyperDriveBlock.Components.Add(ResourceSink); } }
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(); }
public override void Init(MyObjectBuilder_EntityBase objectBuilder) { if (_isInit) { return; } m_block = Container.Entity as IMyTerminalBlock; m_block.AppendingCustomInfo += appendCustomInfo; _imyUM = Entity as IMyUpgradeModule; if (!_imyUM.Components.TryGet(out _sink)) { _sink = new MyResourceSinkComponent(); MyResourceSinkInfo info = new MyResourceSinkInfo(); info.ResourceTypeId = Electricity; _sink.AddType(ref info); _imyUM.Components.Add(_sink); } this.NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; // deprecated Container.Entity.NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; }
public override void Init(MyObjectBuilder_EntityBase objectBuilder) { if (_isInit) { return; } Container.Entity.NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; _tblock = Container.Entity as IMyTerminalBlock; _tblock.AppendingCustomInfo += appendCustomInfo; _ublock = Entity as IMyUpgradeModule; _maxrange = 1000f; if (!_ublock.Components.TryGet(out _sink)) { _sink = new MyResourceSinkComponent(); MyResourceSinkInfo info = new MyResourceSinkInfo(); info.ResourceTypeId = Electricity; _sink.AddType(ref info); _ublock.Components.Add(_sink); } Shields.Add(Entity.EntityId, this); _isInit = true; }