19 public void onHit(DamagingProjectileAPI projectile, CombatEntityAPI target,
20 Vector2f point,
boolean shieldHit, ApplyDamageResultAPI damageResult, CombatEngineAPI engine) {
21 if (!shieldHit && target instanceof ShipAPI) {
26 public static void dealArmorDamage(DamagingProjectileAPI projectile, ShipAPI target, Vector2f point,
float armorDamage) {
29 ArmorGridAPI grid = target.getArmorGrid();
30 int[] cell = grid.getCellAtLocation(point);
31 if (cell ==
null)
return;
33 int gridWidth = grid.getGrid().length;
34 int gridHeight = grid.getGrid()[0].length;
38 float damageDealt = 0f;
39 for (
int i = -2; i <= 2; i++) {
40 for (
int j = -2; j <= 2; j++) {
41 if ((i == 2 || i == -2) && (j == 2 || j == -2))
continue;
46 if (cx < 0 || cx >= gridWidth || cy < 0 || cy >= gridHeight)
continue;
48 float damMult = 1/30f;
49 if (i == 0 && j == 0) {
51 }
else if (i <= 1 && i >= -1 && j <= 1 && j >= -1) {
57 float armorInCell = grid.getArmorValue(cx, cy);
58 float damage = armorDamage * damMult * damageTypeMult;
59 damage = Math.min(damage, armorInCell);
60 if (damage <= 0)
continue;
62 target.getArmorGrid().setArmorValue(cx, cy, Math.max(0, armorInCell - damage));
63 damageDealt += damage;
67 if (damageDealt > 0) {
68 if (Misc.shouldShowDamageFloaty(projectile.getSource(), target)) {
69 engine.addFloatingDamageText(point, damageDealt, Misc.FLOATY_ARMOR_DAMAGE_COLOR, target, projectile.getSource());
71 target.syncWithArmorGridState();