Skip to content

Commit dca2870

Browse files
author
Bytekeeper
committed
Small improvement to prevent sqrt twice for kiting units (and using double for one)
1 parent 1f08775 commit dca2870

File tree

5 files changed

+25
-25
lines changed

5 files changed

+25
-25
lines changed

src/main/java/org/bk/ass/AgentUtil.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,22 @@ private AgentUtil() {
1414
// Utility class
1515
}
1616

17-
public static void moveToward(Agent agent, Agent target, int distanceSquared) {
18-
if (distanceSquared <= agent.speedSquared) {
17+
public static void moveToward(Agent agent, Agent target, float distance) {
18+
if (distance <= agent.speed) {
1919
agent.vx = target.x - agent.x;
2020
agent.vy = target.y - agent.y;
2121
} else {
22-
float distance = (float) sqrt(distanceSquared);
2322
agent.vx = (int) ((target.x - agent.x) * agent.speed / distance);
2423
agent.vy = (int) ((target.y - agent.y) * agent.speed / distance);
2524
}
2625
}
2726

28-
public static void moveAwayFrom(Agent agent, Agent target, int distanceSquared) {
29-
if (distanceSquared == 0) {
27+
public static void moveAwayFrom(Agent agent, Agent target, float distance) {
28+
if (distance == 0) {
3029
double a = rnd.nextDouble(Math.PI * 2);
3130
agent.vx = (int) (cos(a) * agent.speed);
3231
agent.vy = (int) (sin(a) * agent.speed);
3332
} else {
34-
float distance = (float) sqrt(distanceSquared);
3533
agent.vx = (int) ((agent.x - target.x) * agent.speed / distance);
3634
agent.vy = (int) ((agent.y - target.y) * agent.speed / distance);
3735
}

src/main/java/org/bk/ass/AttackerBehavior.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ public boolean simUnit(
4646
&& enemy.detected
4747
&& !enemy.isStasised
4848
&& prioCmp >= 0) {
49-
int distanceSquared = distanceSquared(agent, enemy);
50-
if (distanceSquared >= wpn.minRangeSquared
51-
&& (distanceSquared < selectedDistanceSquared || prioCmp > 0)) {
52-
selectedDistanceSquared = distanceSquared;
49+
int distanceSq = distanceSquared(agent, enemy);
50+
if (distanceSq >= wpn.minRangeSquared
51+
&& (distanceSq < selectedDistanceSquared || prioCmp > 0)) {
52+
selectedDistanceSquared = distanceSq;
5353
selectedEnemy = enemy;
5454
selectedWeapon = wpn;
5555

@@ -127,13 +127,13 @@ private void simCombatMove(
127127
&& agent.cooldown > 0
128128
&& selectedEnemy.weaponVs(agent).minRangeSquared <= selectedDistanceSquared
129129
&& selectedEnemy.speed < agent.speed;
130+
float distance = (float) sqrt(selectedDistanceSquared);
130131
if (shouldKite) {
131-
double distance = sqrt(selectedDistanceSquared);
132132
if (distance + agent.speed < selectedWeapon.maxRange) {
133-
moveAwayFrom(agent, selectedEnemy, selectedDistanceSquared);
133+
moveAwayFrom(agent, selectedEnemy, distance);
134134
}
135135
} else {
136-
moveToward(agent, selectedEnemy, selectedDistanceSquared);
136+
moveToward(agent, selectedEnemy, distance);
137137
}
138138
}
139139
}

src/main/java/org/bk/ass/HealerBehavior.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public boolean simUnit(
3939
&& !agent.healedThisFrame
4040
&& ally != agent) {
4141

42-
int distance = distanceSquared(agent, ally);
43-
if (distance < selectedDistanceSquared) {
44-
selectedDistanceSquared = distance;
42+
int distanceSq = distanceSquared(agent, ally);
43+
if (distanceSq < selectedDistanceSquared) {
44+
selectedDistanceSquared = distanceSq;
4545
selectedAlly = ally;
4646

4747
// If we can heal it this frame, we're done searching
@@ -58,7 +58,7 @@ public boolean simUnit(
5858
return false;
5959
}
6060

61-
moveToward(agent, selectedAlly, selectedDistanceSquared);
61+
moveToward(agent, selectedAlly, (float) Math.sqrt(selectedDistanceSquared));
6262
if (selectedDistanceSquared > MEDICS_HEAL_RANGE_SQUARED) {
6363
return true;
6464
}

src/main/java/org/bk/ass/RepairerBehavior.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.bk.ass.Simulator.Behavior;
44
import org.bk.ass.collection.UnorderedCollection;
55

6+
import static java.lang.Math.sqrt;
67
import static org.bk.ass.AgentUtil.distanceSquared;
78
import static org.bk.ass.AgentUtil.moveToward;
89

@@ -33,9 +34,9 @@ public boolean simUnit(
3334
&& ally.healthShifted < ally.maxHealthShifted
3435
&& ally != agent) {
3536

36-
int distance = distanceSquared(agent, ally);
37-
if (distance < selectedDistanceSquared) {
38-
selectedDistanceSquared = distance;
37+
int distanceSq = distanceSquared(agent, ally);
38+
if (distanceSq < selectedDistanceSquared) {
39+
selectedDistanceSquared = distanceSq;
3940
selectedAlly = ally;
4041

4142
// If we can repair it this frame, we're done searching
@@ -52,7 +53,7 @@ public boolean simUnit(
5253
return false;
5354
}
5455

55-
moveToward(agent, selectedAlly, selectedDistanceSquared);
56+
moveToward(agent, selectedAlly, (float) sqrt(selectedDistanceSquared));
5657
if (selectedDistanceSquared > SCV_REPAIR_RANGE_SQUARED) {
5758
return true;
5859
}

src/main/java/org/bk/ass/RetreatBehavior.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.bk.ass.Simulator.Behavior;
44
import org.bk.ass.collection.UnorderedCollection;
55

6+
import static java.lang.Math.sqrt;
67
import static org.bk.ass.AgentUtil.distanceSquared;
78
import static org.bk.ass.AgentUtil.moveAwayFrom;
89

@@ -22,9 +23,9 @@ static boolean simFlee(Agent agent, UnorderedCollection<Agent> enemies) {
2223
Agent enemy = enemies.get(i);
2324
Weapon wpn = enemy.weaponVs(agent);
2425
if (wpn.damageShifted != 0) {
25-
int distance = distanceSquared(agent, enemy);
26-
if (distance >= wpn.minRangeSquared && distance < selectedDistanceSquared) {
27-
selectedDistanceSquared = distance;
26+
int distanceSq = distanceSquared(agent, enemy);
27+
if (distanceSq >= wpn.minRangeSquared && distanceSq < selectedDistanceSquared) {
28+
selectedDistanceSquared = distanceSq;
2829
selectedEnemy = enemy;
2930

3031
// If we can hit it this frame, we're done searching
@@ -37,7 +38,7 @@ static boolean simFlee(Agent agent, UnorderedCollection<Agent> enemies) {
3738
if (selectedEnemy == null) {
3839
return false;
3940
}
40-
moveAwayFrom(agent, selectedEnemy, selectedDistanceSquared);
41+
moveAwayFrom(agent, selectedEnemy, (float) sqrt(selectedDistanceSquared));
4142
return true;
4243
}
4344
}

0 commit comments

Comments
 (0)