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);
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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>();
        }
Exemple #8
0
        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;
 }