Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="attacker"></param>
        /// <param name="target"></param>
        /// <returns>t in seconds</returns>
        public Fix16 boltTimeToTarget(CombatObject attacker, CombatObject target)
        {
            Fix16 distance_toTarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc);
            Fix16 boltTimetoTarget  = distance_toTarget / boltClosingSpeed(attacker, target);

            return(boltTimetoTarget);
        }
Example #2
0
 public void removeComObj(CombatObject comObj)
 {
     ownships.Remove(comObj);
     friendly.Remove(comObj);
     neutral.Remove(comObj);
     hostile.Remove(comObj);
 }
Example #3
0
        public static Fix16 seekerClosingSpeed_base(CombatObject attacker, CombatObject target)
        {
            Fix16 shotspeed        = 0;// boltSpeed; //speed of bullet when ship is at standstill (0 for seekers)
            Fix16 shotspeed_actual = shotspeed + NMath.closingRate(attacker.cmbt_loc, attacker.cmbt_vel, target.cmbt_loc, target.cmbt_vel);

            return(shotspeed_actual);
        }
Example #4
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            List <CombatObject> comObjects = (List <CombatObject>)inputs[1];
            CombatObject        thisObj    = (CombatObject)inputs[0];

            filter = inputs[2].GetType();
            Fix16 distance = Fix16.MaxValue;


            if (comObjects != null && comObjects.Count > 0)
            {
                CombatObject closest = comObjects[0];
                foreach (CombatObject othercomObj in comObjects)
                {
                    Fix16 thisdist = NewtMath.f16.NMath.distance(thisObj.cmbt_loc, othercomObj.cmbt_loc);
                    if (filter.IsAssignableFrom(closest.GetType()) && thisdist < distance)
                    {
                        distance = thisdist;
                        closest  = othercomObj;
                    }
                }
                output = closest;
            }
        }
Example #5
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);

            CombatControlledObject ccobj  = (CombatControlledObject)comObj;
            List <CombatWeapon>    comWpn = ccobj.Weapons.ToList();
        }
Example #6
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            CombatControlledObject targetObj = inputs[0] as CombatControlledObject;

            output = targetObj.combatfleet.combatObjects;
        }
Example #7
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            var cobj = (CombatObject)inputs[0];

            output = cobj;
        }
Example #8
0
        public static Fix16 seekerTimeToTarget(CombatObject attacker, CombatObject target, SeekingWeaponInfo skrinfo)
        {
            //Fix16 distance_toTarget = Trig.distance(attacker.cmbt_loc, target.cmbt_loc);
            PointXd px = new PointXd(attacker.cmbt_loc - target.cmbt_loc);
            Fix16   distance_toTarget = px.Length;
            //SeekingWeaponInfo seekerinfo = (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo;
            int   hitpoints    = skrinfo.SeekerDurability;
            Fix16 mass         = hitpoints * 0.1;
            int   wpnskrspd    = skrinfo.SeekerSpeed;
            Fix16 Thrust       = calcFowardThrust(skrinfo);
            Fix16 acceleration = Thrust / mass * -1; //*-1 because we should be accelerating towards the target, not away.
            Fix16 startV       = seekerClosingSpeed_base(attacker, target);
            //Fix16 endV = ???
            Fix16 baseTimetoTarget = distance_toTarget / startV;

            //Fix16 deltaV = baseTimetoTarget
            //Fix16[] ttt = NMath.quadratic(acceleration, startV, distance_toTarget);
            Fix64[] ttt2 = NMath.quadratic64(acceleration, startV, distance_toTarget);

            Fix16 TimetoTarget;

            if (ttt2[2] == 1)
            {
                TimetoTarget = Fix16.Max((Fix16)ttt2[0], (Fix16)ttt2[1]);
            }
            else
            {
                TimetoTarget = (Fix16)ttt2[0];
            }
#if DEBUG
            Console.WriteLine("SeekerTimeToTarget = " + TimetoTarget);
#endif
            return(TimetoTarget);
        }
Example #9
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            CombatObject obj = (CombatObject)inputs[0];

            output = obj.cmbt_mass;
        }
Example #10
0
        public bool isinRange(CombatObject attacker, CombatObject target)
        {
            bool  inrange           = false;
            var   wpninfo           = weapon.Template.ComponentTemplate.WeaponInfo;
            Fix16 distance_toTarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc);

            string weaponRangeinfo = "RangeInfo:\r\n ";


            if (weaponType == "Beam")          //beam
            {
                if (distance_toTarget <= maxRange && distance_toTarget >= minRange)
                {
                    inrange          = true;
                    weaponRangeinfo += "Range for Beam is good \r\n";
                }
            }
            else if (weaponType == "Bolt") //projectile
            {
                inrange = bolt_isinRange(attacker, target);
            }
            else if (weaponType == "Seeker")       //seeker
            {
                inrange = seeker_isinRange(attacker, target);
            }

            attacker.debuginfo += weaponRangeinfo;
            return(inrange);
        }
Example #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="attacker"></param>
        /// <param name="target"></param>
        /// <returns>speed in meters per second</returns>
        public Fix16 boltClosingSpeed(CombatObject attacker, CombatObject target)
        {
            Fix16 shotspeed        = boltSpeed; //speed of bullet when ship is at standstill
            Fix16 shotspeed_actual = shotspeed + NMath.closingRate(attacker.cmbt_loc, attacker.cmbt_vel, target.cmbt_loc, target.cmbt_vel);

            return(shotspeed_actual);// / Battle_Space.TicksPerSecond;
        }
Example #12
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            CombatObject targetObj = (CombatObject)inputs[0];
            Compass      angle     = new Compass(targetObj.cmbt_head.Degrees, false);

            output = angle;
        }
Example #13
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            Compass c1 = (Compass)inputs[0];
            Compass c2 = (Compass)inputs[1];

            output = c1 + c2;
        }
Example #14
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            Compass c1 = (Compass)inputs[0];
            Fix16   c2 = (Fix16)inputs[1];

            output = c1.Degrees + c2;
        }
Example #15
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            CombatObject obj0 = (CombatObject)inputs[0];
            CombatObject obj1 = (CombatObject)inputs[1];

            output = NMath.distance(obj0.cmbt_loc, obj1.cmbt_loc);
        }
Example #16
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            CombatObject targetObj = (CombatObject)inputs[0];
            Compass      angle     = new Compass(Trig.angleA(targetObj.cmbt_vel));

            output = angle;
        }
Example #17
0
 public Object getOutput(CombatObject comObj)
 {
     if (output == null)
     {
         calc(comObj);
     }
     return(this.output);
 }
Example #18
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            Fix16 rangecurrent          = 0;
            List <CombatWeapon> weapons = inputs[0] as List <CombatWeapon>;

            foreach (CombatWeapon wpn in weapons)
            {
            }
        }
Example #19
0
        private bool seeker_isinRange(CombatObject attacker, CombatObject target)
        {
            bool  isinRange          = false;
            Fix16 seekerTimeToTarget = CombatSeeker.seekerTimeToTarget(attacker, target, (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo);

            if (seekerTimeToTarget < maxRange_time)
            {
                isinRange = true;
            }
            return(isinRange);
        }
Example #20
0
        private bool bolt_isinRange(CombatObject attacker, CombatObject target)
        {
            bool  isinRange = false;
            Fix16 boltTTT   = boltTimeToTarget(attacker, target);

            //remember, maxRange is bolt lifetime in seconds
            if (boltTTT <= maxRange && boltTTT >= minRange)
            {
                isinRange = true;
            }
            return(isinRange);
        }
Example #21
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj);
            CombatObject formateObj = (CombatObject)inputs[0];
            Fix16        range      = (Fix16)inputs[1];
            Compass      angle      = (Compass)inputs[2];
            //angle.Degrees += formateObj.cmbt_head.Degrees;
            PointXd formatePoint = Trig.sides_ab(range, angle.Radians);

            formatePoint += formateObj.cmbt_loc;
            output        = formatePoint;
        }
Example #22
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj); //get inputs
            List <CombatObject> comObjects = (List <CombatObject>)inputs[0];
            Fix16 min = (Fix16)inputs[1];
            Fix16 max = (Fix16)inputs[2];
            List <CombatObject> filteredObjects = new List <CombatObject>();

            foreach (CombatObject comobj in comObjects)
            {
                if (comobj.cmbt_mass > min && comobj.cmbt_mass < max)
                {
                    filteredObjects.Add(comobj);
                }
            }
            output = filteredObjects;
        }
Example #23
0
 public virtual void calc(CombatObject comObj)
 {
     for (int i = 0; i < inputLnks.Length; i++)
     {
         StrategyBaseBlock lnk = inputLnks[i];
         if (lnk == null)
         {
             inputs[i] = DefaultValues[i];
         }
         else
         {
             if (lnk.output == null)
             {
                 lnk.calc(comObj);
             }
             inputs[i] = lnk.output;
         }
     }
 }
Example #24
0
        public override void calc(CombatObject comObj)
        {
            base.calc(comObj); //get inputs
            List <CombatObject> comObjects = (List <CombatObject>)inputs[0];

            Fix16 min = (Fix16)inputs[1];
            Fix16 max = (Fix16)inputs[2];
            List <CombatObject> filteredObjects = new List <CombatObject>();

            foreach (CombatObject loopcomobj in comObjects)
            {
                Fix16 checkitem = loopcomobj.WorkingObject.ShieldHitpoints;
                if (checkitem > min && checkitem < max)
                {
                    filteredObjects.Add(loopcomobj);
                }
            }
            output = filteredObjects;
        }
Example #25
0
        public CombatSeeker(CombatObject attacker, CombatWeapon launcher, int ID)
            : base(null, new PointXd(attacker.cmbt_loc), new PointXd(attacker.cmbt_vel), ID, "SKR")
        {
            WorkingObject = this;
            SeekingWeaponInfo skrinfo = (SeekingWeaponInfo)launcher.weapon.Template.ComponentTemplate.WeaponInfo;

            Hitpoints = MaxHitpoints = skrinfo.SeekerDurability;
            cmbt_mass = (Fix16)Hitpoints * 0.1;//(Fix16)s.MaxHitpoints; // sure why not?


            maxfowardThrust = calcFowardThrust(skrinfo);
            maxStrafeThrust = calcStrafeThrust(skrinfo);
            maxRotate       = calcRotate(skrinfo);


            cmbt_thrust = new PointXd(0, 0, 0);
            cmbt_accel  = new PointXd(0, 0, 0);

            newDice(ID);
#if DEBUG
            Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass);
#endif
            this.launcher = launcher;
        }
Example #26
0
 public override void calc(CombatObject comObj)
 {
     base.calc(comObj);
     output = new CombatWaypoint((PointXd)inputs[0], (PointXd)inputs[1]);
 }
Example #27
0
 public override void calc(CombatObject comObj)
 {
     //base.calc(comObj); dont need this, should be at the top of the chain - no inputs.
     output = comObj.empire.ownships;
 }
Example #28
0
 public override void calc(CombatObject comObj)
 {
     //base.calc(comObj); dont need this, should be at the top of the chain - no inputs.
     output = inputtype;
 }
Example #29
0
 public Object getNewOutput(CombatObject comObj)
 {
     reCalc(comObj);
     return(this.output);
 }
Example #30
0
 public void reCalc(CombatObject comObj)
 {
     zeroize();
     calc(comObj);
 }