32 Vector2f v =
fleet.getVelocity();
33 float angle = Misc.getAngleInDegrees(v);
34 float speed = v.length();
35 if (speed < 10) angle =
fleet.getFacing();
37 float mult = Misc.getFleetRadiusTerrainEffectMult(
fleet);
40 float arc = 120f - 60f * mult;
42 angle += (float) Math.random() * arc - arc/2f;
46 if (Misc.isSlowMoving(
fleet) || mult <= 0) {
49 }
else if (
fleet.isInCurrentLocation()) {
51 WeightedRandomPicker<FleetMemberAPI> targets =
new WeightedRandomPicker<FleetMemberAPI>();
52 for (FleetMemberAPI member :
fleet.getFleetData().getMembersListCopy()) {
54 switch (member.getHullSpec().getHullSize()) {
55 case CAPITAL_SHIP: w = 20f;
break;
56 case CRUISER: w = 10f;
break;
57 case DESTROYER: w = 5f;
break;
58 case FRIGATE: w = 1f;
break;
60 targets.add(member, w);
63 FleetMemberAPI member = targets.pick();
65 float damageMult =
fleet.getCurrBurnLevel() - Misc.getGoSlowBurnLevel(
fleet);
66 if (damageMult < 1) damageMult = 1;
67 Misc.applyDamage(member,
null, damageMult,
true,
"asteroid_impact",
"Asteroid impact",
68 true,
null, member.getShipName() +
" suffers damage from an asteroid impact");
74 if (!dealDamage &&
fleet.isPlayerFleet()) {
75 Global.
getSector().getCampaignUI().addMessage(
"Asteroid impact on drive bubble", Misc.getNegativeHighlightColor());
79 float dist = Misc.getDistance(test,
fleet.getLocation());
84 float volumeMult = 0.75f;
85 volumeMult *= 0.5f + 0.5f * mult;
127 float size = 10f + (float) Math.random() * 6f;
129 AsteroidAPI asteroid =
fleet.getContainingLocation().addAsteroid(size);
130 asteroid.setFacing((
float) Math.random() * 360f);
131 Vector2f av = Misc.getUnitVectorAtDegreeAngle(angle + 180f);
132 av.scale(
fleet.getVelocity().length() + (20f + 20f * (float) Math.random()) * mult);
133 asteroid.getVelocity().set(av);
134 Vector2f al = Misc.getUnitVectorAtDegreeAngle(angle + 180f);
136 al.scale(
fleet.getRadius());
137 Vector2f.add(al,
fleet.getLocation(), al);
140 float sign = Math.signum(asteroid.getRotation());
141 asteroid.setRotation(sign * (50f + 50f * (
float) Math.random()));
143 Misc.fadeInOutAndExpire(asteroid, 0.2f, 1f + 1f * (
float) Math.random(), 1f);
146 Vector2f iv =
fleet.getVelocity();
147 iv =
new Vector2f(iv);
149 float glowSize = 100f + 100f * mult + 50f * (float) Math.random();
150 Color color =
new Color(255, 165, 100, 255);
151 Misc.addHitGlow(
fleet.getContainingLocation(), al, iv, glowSize, color);
154 dV = Misc.getUnitVectorAtDegreeAngle(angle);
156 float impact = speed * 1f * (0.5f + mult * 0.5f);