Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
 internal override void ActionCommand(Game game)
 {
     if (!IsRunning)
     {
         _fireControlComponent.GetAbilityState <FireControlAbilityState>().Target = _targetActualEntity;
     }
 }
Esempio n. 3
0
 internal override void ActionCommand(DateTime atDateTime)
 {
     if (!IsRunning)
     {
         _fireControlComponent.GetAbilityState <FireControlAbilityState>().SetTarget(_targetActualEntity);
     }
 }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
 internal override void ActionCommand(DateTime atDateTime)
 {
     if (!IsRunning)
     {
         var wpnState = _weaponInstance.GetAbilityState <WeaponState>();
         wpnState.FireWeaponInstructions.AssignOrdnance(_ordnanceAssigned);
         IsRunning = true;
     }
 }
Esempio n. 6
0
        internal override void ActionCommand(DateTime atDateTime)
        {
            if (!IsRunning)
            {
                var fcState = _fireControlComponent.GetAbilityState <FireControlAbilityState>();

                fcState.SetChildren(_weaponsAssigned.ToArray());
                IsRunning = true;
            }
        }
Esempio n. 7
0
 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;
     }
 }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
 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;
     }
 }
Esempio n. 10
0
        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);
        }