Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }