Skip to content

Commit cb7d2c3

Browse files
committed
implement getDamageTo/From
1 parent d76fef9 commit cb7d2c3

File tree

3 files changed

+55
-13
lines changed

3 files changed

+55
-13
lines changed

src/main/java/bwapi/Game.java

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,17 +1107,59 @@ public Region getRegionAt(final Position position) {
11071107
//
11081108
// public TilePosition getBuildLocation(UnitType type, TilePosition desiredPosition, int maxRange, boolean creep);
11091109
//
1110-
// public int getDamageFrom(UnitType fromType, UnitType toType, Player fromPlayer);
1111-
//
1112-
// public int getDamageFrom(UnitType fromType, UnitType toType);
1113-
//
1114-
// public int getDamageFrom(UnitType fromType, UnitType toType, Player fromPlayer, Player toPlayer);
1115-
//
1116-
// public int getDamageTo(UnitType toType, UnitType fromType, Player toPlayer);
1117-
//
1118-
// public int getDamageTo(UnitType toType, UnitType fromType);
1119-
//
1120-
// public int getDamageTo(UnitType toType, UnitType fromType, Player toPlayer, Player fromPlayer);
1110+
1111+
private static final int damageRatio[][] = {
1112+
// Ind, Sml, Med, Lrg, Non, Unk
1113+
{ 0, 0, 0, 0, 0, 0 }, // Independent
1114+
{ 0, 128, 192, 256, 0, 0 }, // Explosive
1115+
{ 0, 256, 128, 64, 0, 0 }, // Concussive
1116+
{ 0, 256, 256, 256, 0, 0 }, // Normal
1117+
{ 0, 256, 256, 256, 0, 0 }, // Ignore_Armor
1118+
{ 0, 0, 0, 0, 0, 0 }, // None
1119+
{ 0, 0, 0, 0, 0, 0 } // Unknown
1120+
};
1121+
1122+
private int getDamageFromImpl(UnitType fromType, UnitType toType, Player fromPlayer, Player toPlayer) {
1123+
// Retrieve appropriate weapon
1124+
final WeaponType wpn = toType.isFlyer() ? fromType.airWeapon() : fromType.groundWeapon();
1125+
if ( wpn == WeaponType.None || wpn == WeaponType.Unknown )
1126+
return 0;
1127+
1128+
// Get initial weapon damage
1129+
int dmg = fromPlayer != null ? fromPlayer.damage(wpn) : wpn.damageAmount() * wpn.damageFactor();
1130+
1131+
// If we need to calculate using armor
1132+
if ( wpn.damageType() != DamageType.Ignore_Armor && toPlayer != null ) {
1133+
dmg -= Math.min(dmg, toPlayer.armor(toType));
1134+
}
1135+
1136+
return dmg * damageRatio[wpn.damageType().id][toType.size().id] / 256;
1137+
}
1138+
1139+
1140+
public int getDamageFrom(final UnitType fromType, final UnitType toType, final Player fromPlayer) {
1141+
return getDamageFrom(fromType, toType, fromPlayer, null);
1142+
}
1143+
1144+
public int getDamageFrom(final UnitType fromType, UnitType toType) {
1145+
return getDamageFrom(fromType, toType, null);
1146+
}
1147+
1148+
public int getDamageFrom(final UnitType fromType, final UnitType toType, final Player fromPlayer, final Player toPlayer) {
1149+
return getDamageFromImpl(fromType, toType, fromPlayer, toPlayer == null ? self() : toPlayer);
1150+
}
1151+
1152+
public int getDamageTo(final UnitType toType, final UnitType fromType, final Player toPlayer){
1153+
return getDamageTo(toType, fromType, toPlayer, null);
1154+
}
1155+
1156+
public int getDamageTo(final UnitType toType, final UnitType fromType) {
1157+
return getDamageTo(toType, fromType, null);
1158+
}
1159+
1160+
public int getDamageTo(final UnitType toType, final UnitType fromType, final Player toPlayer, final Player fromPlayer) {
1161+
return getDamageFromImpl(fromType, toType, fromPlayer == null ? self() : fromPlayer, toPlayer);
1162+
}
11211163

11221164
//Since 4.2.0
11231165
public int getRandomSeed() {

src/main/java/bwapi/types/DamageType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public enum DamageType {
99
None(5),
1010
Unknown(6);
1111

12-
private int id;
12+
public final int id;
1313

1414
DamageType(int id){
1515
this.id = id;

src/main/java/bwapi/types/UnitSizeType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public enum UnitSizeType {
99
None(4),
1010
Unknown(5);
1111

12-
private int id;
12+
public final int id;
1313

1414
UnitSizeType(int id) {
1515
this.id = id;

0 commit comments

Comments
 (0)