private void Attack(SimulationState state, CombatUnit damagedUnit, CombatWeapon picked, CombatUnit unit) { if (!damagedUnit.IsGround) { return; } float dist = Target.DistSq(damagedUnit); if (dist >= 1.25f * 1.25f) { return; } if (dist >= 0.7812f * 0.7812f) { unit.Attack(state, picked, damagedUnit, false, 0.25f); return; } if (dist >= 0.4687f * 0.4687f) { unit.Attack(state, picked, damagedUnit, false, 0.5f); return; } unit.Attack(state, picked, damagedUnit, false, 1); }
public virtual void Perform(SimulationState state, CombatUnit unit) { if (Target == null) { return; } if (unit.FramesUntilNextAttack > 0) { return; } if (unit.AdditionalAttacksRemaining > 0 && unit.PreviousAttackTarget.Tag != Target.Tag) { unit.AdditionalAttacksRemaining = 0; } CombatWeapon picked = unit.GetWeapon(Target); if (picked == null) { return; } if (unit.DistSq(Target) > picked.Range * picked.Range) { unit.Move(Target.Pos); return; } unit.Attack(state, picked, Target, false); }
public virtual void Perform(SimulationState state, CombatUnit unit) { if (Target == null) { return; } if (unit.FramesUntilNextAttack > 0) { return; } CombatWeapon picked = unit.GetWeapon(Target); if (picked == null) { return; } if (unit.DistSq(Target) > picked.Range * picked.Range) { return; } foreach (CombatUnit damagedUnit in state.Player1Units) { Attack(state, damagedUnit, picked, unit); } foreach (CombatUnit damagedUnit in state.Player2Units) { Attack(state, damagedUnit, picked, unit); } }
public void Combat_Missle() { setupEnvironment1(); battle.Start(); Compass startHeading = new Compass(0, false); Compass angletoWaypoint = new Compass(0, false); PointXd waypntloc = new PointXd(0, 0, 0); PointXd waypndVel = new PointXd(0, 0, 0); CombatWaypoint waypoint = new CombatWaypoint(waypntloc, waypndVel); bool expectedThrustToWaypoint = true; Compass expectedHeading = new Compass(0, false); Tuple <Compass, bool> expectednav = new Tuple <Compass, bool>(expectedHeading, expectedThrustToWaypoint); CombatVehicle attacker = battle.CombatVehicles.ToArray()[0]; attacker.cmbt_loc = new PointXd(0, -100, 0); attacker.cmbt_vel = new PointXd(0, 0, 0); attacker.cmbt_head = new Compass(startHeading.Degrees, false); attacker.waypointTarget = waypoint; CombatWeapon wpn = attacker.Weapons.ToArray()[0]; CombatVehicle target = battle.CombatVehicles.ToArray()[1]; target.cmbt_loc = new PointXd(0, 100, 0); target.cmbt_vel = new PointXd(0, 0, 0); target.cmbt_head = new Compass(180, false); target.waypointTarget = waypoint; attacker.weaponTarget[0] = target; CombatSeeker testSeeker = new CombatSeeker(attacker, wpn, -1); battle.CombatNodes.Add(testSeeker); Tuple <Compass, bool?> nav = testSeeker.testNav(angletoWaypoint); battle.End(battle.CurrentTick); Assert.AreEqual(expectednav.Item1.Degrees, nav.Item1.Degrees); Assert.AreEqual(expectednav.Item2, nav.Item2); }
public override void Perform(SimulationState state, CombatUnit unit) { if (Target == null) { return; } if (unit.FramesUntilNextAttack > 0) { return; } if (unit.AdditionalAttacksRemaining > 0 && unit.PreviousAttackTarget.Tag != Target.Tag) { unit.AdditionalAttacksRemaining = 0; } CombatWeapon picked = unit.GetWeapon(Target); if (picked == null) { return; } if (unit.DistSq(Target) > picked.Range * picked.Range) { unit.Move(Target.Pos); return; } unit.Attack(state, picked, Target, false); foreach (Buff buff in Target.Buffs) { if (buff is ConcussiveShell) { buff.ExpireFrame = state.SimulationFrame + 24; return; } } Target.AddBuff(new ConcussiveShell(state.SimulationFrame + 24)); }