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); }
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)); } } }
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); }
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; }