internal override void ActionCommand(DateTime atDateTime) { if (!IsRunning) { var fcState = _fireControlComponent.GetAbilityState <FireControlAbilityState>(); if (IsFiring == FireModes.OpenFire) { fcState.IsEngaging = true; DateTime dateTimeNow = _entityCommanding.Manager.ManagerSubpulses.StarSysDateTime; GenericFiringWeaponsDB blob = _entityCommanding.GetDataBlob <GenericFiringWeaponsDB>(); if (blob == null) { blob = new GenericFiringWeaponsDB(fcState.GetChildrenInstances()); _entityCommanding.SetDataBlob(blob); } else { blob.AddWeapons(fcState.GetChildrenInstances()); } //StaticRefLib.ProcessorManager.RunInstanceProcessOnEntity(nameof(WeaponProcessor),_entityCommanding, dateTimeNow); } else if (IsFiring == FireModes.CeaseFire) { fcState.IsEngaging = false; GenericFiringWeaponsDB blob = _entityCommanding.GetDataBlob <GenericFiringWeaponsDB>(); } IsRunning = true; } }
internal override void ActionCommand(Game game) { if (!IsRunning) { _fireControlComponent.GetAbilityState <FireControlAbilityState>().Target = _targetActualEntity; } }
internal override void ActionCommand(DateTime atDateTime) { if (!IsRunning) { _fireControlComponent.GetAbilityState <FireControlAbilityState>().SetTarget(_targetActualEntity); } }
public void OnRemoveBeam() { ComponentInstance beam = SelectedAttachedBeam; if (SelectedFireControl == null || _fireControlList.SelectedIndex == -1) { return; } if (SelectedAttachedBeam == null || _attachedBeamList.SelectedIndex == -1) { return; } List <ComponentInstance> weaponList = SelectedFireControl.GetAbilityState <FireControlAbilityState>().AssignedWeapons; weaponList.Remove(SelectedAttachedBeam); // @todo: unset the fire control for the beam beam.GetAbilityState <WeaponState>().FireControl = null; RefreshBeamWeaponsList(0, 0); }
internal override void ActionCommand(DateTime atDateTime) { if (!IsRunning) { var wpnState = _weaponInstance.GetAbilityState <WeaponState>(); wpnState.FireWeaponInstructions.AssignOrdnance(_ordnanceAssigned); IsRunning = true; } }
internal override void ActionCommand(DateTime atDateTime) { if (!IsRunning) { var fcState = _fireControlComponent.GetAbilityState <FireControlAbilityState>(); fcState.SetChildren(_weaponsAssigned.ToArray()); IsRunning = true; } }
internal override void ActionCommand(Game game) { if (!IsRunning) { var fcinstance = _fireControlComponent.GetAbilityState <FireControlAbilityState>(); fcinstance.AssignedWeapons = _weaponsAssigned; foreach (var wpn in _weaponsAssigned) { wpn.GetAbilityState <WeaponState>().FireControl = _fireControlComponent; } IsRunning = true; } }
public static void FireBeamWeapons(ComponentInstance beamWeapon, DateTime atDate) { //TODO: all this needs to get re-written. WeaponState stateInfo = beamWeapon.GetAbilityState <WeaponState>(); FireControlAbilityState fireControl = stateInfo.FireControl.GetAbilityState <FireControlAbilityState>(); if (!fireControl.Target.IsValid) { fireControl.Target = null; fireControl.IsEngaging = false; return; } //var myPos = beamWeapon.GetDataBlob<ComponentInstanceData>().ParentEntity.GetDataBlob<PositionDB>(); var targetPos = fireControl.Target.GetDataBlob <PositionDB>(); //TODO chance to hit //int damageAmount = 10;//TODO damageAmount calc var designAtb = beamWeapon.Design.GetAttribute <SimpleBeamWeaponAtbDB>(); int damageAmount = designAtb.DamageAmount; // TODO: Better damage calculation double range = 1000; // myPos.GetDistanceTo_AU(targetPos); // only fire if target is in range TODO: fire anyway, but miss. TODO: this will be wrong if we do movement last, this needs to be done after movement. if (range <= designAtb.MaxRange)//TODO: firecontrol shoudl have max range too?: Math.Min(designAtb.MaxRange, stateInfo.FireControl.GetDataBlob<BeamFireControlAtbDB>().Range)) { /* * DamageFragment damage = new DamageFragment() * { * Density = * }; * * DamageTools.DealDamage(fireControl.Target, new DamageFragment()) * //DamageProcessor.OnTakingDamage(, damageAmount, atDate); */ int reloadRate = designAtb.ReloadRate; stateInfo.CoolDown = atDate + TimeSpan.FromSeconds(reloadRate); stateInfo.ReadyToFire = false; } }
internal override void ActionCommand(Game game) { if (!IsRunning) { var fcinstance = _fireControlComponent.GetAbilityState <FireControlAbilityState>(); if (IsFiring == FireModes.OpenFire) { fcinstance.IsEngaging = true; DateTime dateTimeNow = _entityCommanding.Manager.ManagerSubpulses.StarSysDateTime; foreach (var wpn in fcinstance.AssignedWeapons) { StaticRefLib.ProcessorManager.RunInstanceProcessOnEntity(nameof(WeaponProcessor), _entityCommanding, dateTimeNow); } } else if (IsFiring == FireModes.CeaseFire) { fcinstance.IsEngaging = false; } IsRunning = true; } }
public void OnAddTarget() { ComponentInstance fc = SelectedFireControl; Entity target = SelectedAttackTarget; if (SelectedFireControl == null || _fireControlList.SelectedIndex == -1) { return; } if (SelectedAttackTarget == null || _attackTargetList.SelectedIndex == -1) { return; } fc.GetAbilityState <FireControlAbilityState>().Target = target; // Get the currently selected ship and fire control and the currently selected list of targets // Add the currently selected target to the selected ship's target // Update GUI RefreshFireControlList(0, 0); }