/// <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); }
public void removeComObj(CombatObject comObj) { ownships.Remove(comObj); friendly.Remove(comObj); neutral.Remove(comObj); hostile.Remove(comObj); }
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); }
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; } }
public override void calc(CombatObject comObj) { base.calc(comObj); CombatControlledObject ccobj = (CombatControlledObject)comObj; List <CombatWeapon> comWpn = ccobj.Weapons.ToList(); }
public override void calc(CombatObject comObj) { base.calc(comObj); CombatControlledObject targetObj = inputs[0] as CombatControlledObject; output = targetObj.combatfleet.combatObjects; }
public override void calc(CombatObject comObj) { base.calc(comObj); var cobj = (CombatObject)inputs[0]; output = cobj; }
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); }
public override void calc(CombatObject comObj) { base.calc(comObj); CombatObject obj = (CombatObject)inputs[0]; output = obj.cmbt_mass; }
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); }
/// <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; }
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; }
public override void calc(CombatObject comObj) { base.calc(comObj); Compass c1 = (Compass)inputs[0]; Compass c2 = (Compass)inputs[1]; output = c1 + c2; }
public override void calc(CombatObject comObj) { base.calc(comObj); Compass c1 = (Compass)inputs[0]; Fix16 c2 = (Fix16)inputs[1]; output = c1.Degrees + c2; }
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); }
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; }
public Object getOutput(CombatObject comObj) { if (output == null) { calc(comObj); } return(this.output); }
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) { } }
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); }
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); }
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; }
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; }
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; } } }
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; }
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; }
public override void calc(CombatObject comObj) { base.calc(comObj); output = new CombatWaypoint((PointXd)inputs[0], (PointXd)inputs[1]); }
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; }
public override void calc(CombatObject comObj) { //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. output = inputtype; }
public Object getNewOutput(CombatObject comObj) { reCalc(comObj); return(this.output); }
public void reCalc(CombatObject comObj) { zeroize(); calc(comObj); }