Пример #1
0
        private static T GetDef <T>(IDictionary <MyDefinitionId, T> dict, object e) where T : class
        {
            T   res;
            var entity = e as IMyEntity;

            if (entity != null)
            {
                var weapon = WeaponShortcuts.GetWeaponDefinition(entity);
                if (weapon != null && dict.TryGetValue(weapon.Id, out res))
                {
                    return(res);
                }
            }

            var block = e as IMyCubeBlock;

            if (block != null && dict.TryGetValue(block.BlockDefinition, out res))
            {
                return(res);
            }
            var slim = e as IMySlimBlock;

            if (slim != null && dict.TryGetValue(slim.BlockDefinition.Id, out res))
            {
                return(res);
            }
            return(null);
        }
Пример #2
0
        private void CheckEntityComponents(IMyEntity e, string arg2, string arg3)
        {
            if (e is IMyCubeGrid)
            {
                if (!e.Components.Has <BeamController>())
                {
                    e.Components.Add(new BeamController(this));
                }
            }

            var def = Definitions.BeamOf(e);

            if (def != null)
            {
                if (def.RequiresResourceSink)
                {
                    if (!e.Components.Has <MyResourceSinkComponent>())
                    {
                        var sink = new MyResourceSinkComponent();
                        sink.Init(MyStringHash.GetOrCompute("Defense"), new List <MyResourceSinkInfo>());
                        e.Components.Add(sink);
                    }

                    if (!e.Components.Has <AdvancedResourceSink>())
                    {
                        var advSink = new AdvancedResourceSink(this);
                        e.Components.Add(advSink);
                    }
                }

                if (def.Components.OfType <Lossy>().Any())
                {
                    e.Components.Add(new ThermalPhysicsComponent());
                }

                if (def.Components.OfType <Weapon>().Any() && e is IMyUserControllableGun &&
                    !e.Components.Has <AmmoGeneratorComponent>())
                {
                    var wepDep = WeaponShortcuts.GetWeaponDefinition(e);
                    if (wepDep != null)
                    {
                        foreach (var k in wepDep.AmmoMagazinesId)
                        {
                            _generatedAmmos.Add(k);
                        }
                    }
                    e.Components.Add(new AmmoGeneratorComponent());
                }

                if (!e.Components.Has <NetworkComponent>())
                {
                    e.Components.Add(new NetworkComponent(this));
                }
            }
        }
Пример #3
0
    private void Register(IMyGunBaseUser gun)
    {
        var block  = (IMyCubeBlock)gun;
        var weapon = WeaponShortcuts.GetWeaponDefinition(block);

        if (weapon == null || !weapon.HasAmmoMagazines())
        {
            return;
        }

        block.IsWorkingChanged += Block_IsWorkingChanged;
        Block_IsWorkingChanged(block);
    }
Пример #4
0
    public void Update(int spread = 1)
    {
        for (var i = _updateId; i < _turretsForUpdate.Count; i += spread)
        {
            var target = _turretsForUpdate[i];
            var inv    = target.AmmoInventory;
            if (inv == null)
            {
                continue;
            }
            var entity = (IMyEntity)target;
            var weapon = WeaponShortcuts.GetWeaponDefinition(entity);
            if (weapon == null || !weapon.HasAmmoMagazines())
            {
                continue;
            }

            MyObjectBuilder_PhysicalObject[] ammoMags;
            if (!_ammoTypes.TryGetValue(weapon, out ammoMags))
            {
                ammoMags = new MyObjectBuilder_PhysicalObject[weapon.AmmoMagazinesId.Length];
                for (var j = 0; j < ammoMags.Length; j++)
                {
                    ammoMags[j] = new MyObjectBuilder_AmmoMagazine()
                    {
                        SubtypeName = weapon.AmmoMagazinesId[j].SubtypeName
                    }
                }
                ;
                _ammoTypes[weapon] = ammoMags;
            }
            foreach (var mag in ammoMags)
            {
                if (inv.GetItemAmount(mag.GetObjectId(), mag.Flags) > _thresholdAmount)
                {
                    continue;
                }
                inv.AddItems(_addAmount, mag);
            }
        }
        _updateId = (_updateId + 1) % spread;
    }
        public override void OnAddedToContainer()
        {
            base.OnAddedToContainer();
            _weapon = WeaponShortcuts.GetWeaponDefinition(Entity);
            if (_weapon != null && _weapon.HasAmmoMagazines())
            {
                _weaponAmmoMags = new MyObjectBuilder_PhysicalObject[_weapon.AmmoMagazinesId.Length];
                for (var i = 0; i < _weaponAmmoMags.Length; i++)
                {
                    _weaponAmmoMags[i] =
                        new MyObjectBuilder_AmmoMagazine()
                    {
                        SubtypeName = _weapon.AmmoMagazinesId[i].SubtypeName
                    }
                }
                ;
            }

            NeedsUpdate = MyEntityUpdateEnum.EACH_10TH_FRAME;
        }