From a8c70bdb058b1fe06a8d458c3d99ebb43c7aad01 Mon Sep 17 00:00:00 2001 From: Pan Date: Sat, 9 Feb 2019 18:44:05 +1300 Subject: [PATCH] home --- core/AssetManager.java | 2 +- enemyAI/microManagementAI.java | 50 +++++++++++++++++++--------------- entity/rocketTank.java | 2 ++ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/core/AssetManager.java b/core/AssetManager.java index 2fdcdaf..7a0e8d0 100644 --- a/core/AssetManager.java +++ b/core/AssetManager.java @@ -234,7 +234,7 @@ public class AssetManager { //if(i == 0) { rocketTank l = new rocketTank(new vector(j*0.25f+ 1.125f,-0.3f, 22.125f - i*0.25f), 90, 1); - //l.damageMultiplier =2; + l.damageMultiplier =2; addRocketTank(l); //techCenter.rocketTankResearched_enemy = true; diff --git a/enemyAI/microManagementAI.java b/enemyAI/microManagementAI.java index 391c93a..b791172 100644 --- a/enemyAI/microManagementAI.java +++ b/enemyAI/microManagementAI.java @@ -69,35 +69,44 @@ public class microManagementAI { //Prioritize searching for targets among static defenses boolean suitableTargertFound = false; + float distanceToDesination = 999; + solidObject target = null; for(int j = 0; j < playerStaticDefenceInMinimap.length; j++) { if(playerStaticDefenceInMinimap[j] != null && !playerStaticDefenceInMinimap[j].willDieFromIncomingAttack()){ x1 = playerStaticDefenceInMinimap[j].centre.x; x2 = unitInCombatRadius[i].centre.x; z1 = playerStaticDefenceInMinimap[j].centre.z; z2 = unitInCombatRadius[i].centre.z; - float distanceToDesination = (x1 - x2)*(x1 - x2) + (z1 - z2)*(z1 - z2); - if(distanceToDesination < scanRange){ - unitInCombatRadius[i].attack(playerStaticDefenceInMinimap[j]); + float d = (x1 - x2)*(x1 - x2) + (z1 - z2)*(z1 - z2); + if(d < scanRange && d < distanceToDesination){ + distanceToDesination = d; + target = playerStaticDefenceInMinimap[j]; - unitInCombatRadius[i].currentCommand = solidObject.attackCautiously; - unitInCombatRadius[i].secondaryCommand = solidObject.StandBy; - - suitableTargertFound = true; - - if(distanceToDesination < myRange) { - int myDamage = unitInCombatRadius[i].myDamage; - if(techCenter.rocketTankResearched_enemy) { - myDamage*=2; - } - myDamage = (int)(myDamage*rocketTank.damageAginstBuildingMulitplier); - - playerStaticDefenceInMinimap[j].incomingDamage+=myDamage*2; - } - break; } } } + if(target != null) { + unitInCombatRadius[i].attack(target); + + unitInCombatRadius[i].currentCommand = solidObject.attackCautiously; + unitInCombatRadius[i].secondaryCommand = solidObject.StandBy; + + suitableTargertFound = true; + + if(distanceToDesination < myRange) { + int myDamage = unitInCombatRadius[i].myDamage; + if(techCenter.rocketTankResearched_enemy) { + myDamage*=2; + } + myDamage = (int)(myDamage*rocketTank.damageAginstBuildingMulitplier); + + target.incomingDamage+=myDamage*2; + } + } + + + if(suitableTargertFound) continue; @@ -117,9 +126,6 @@ public class microManagementAI { }else { - - - //find targets among moving unites for(int j=0; j < numberOfPlayerUnitsOnMinimap; j++){ if(playerUnitInMinimap[j] != null && !playerUnitInMinimap[j].willDieFromIncomingAttack()){ @@ -127,7 +133,7 @@ public class microManagementAI { x2 = unitInCombatRadius[i].centre.x; z1 = playerUnitInMinimap[j].centre.z; z2 = unitInCombatRadius[i].centre.z; - float distanceToDesination = (x1 - x2)*(x1 - x2) + (z1 - z2)*(z1 - z2); + distanceToDesination = (x1 - x2)*(x1 - x2) + (z1 - z2)*(z1 - z2); if(distanceToDesination < myRange){ unitInCombatRadius[i].attack(playerUnitInMinimap[j]); diff --git a/entity/rocketTank.java b/entity/rocketTank.java index a5b731c..486479f 100644 --- a/entity/rocketTank.java +++ b/entity/rocketTank.java @@ -694,6 +694,8 @@ public class rocketTank extends solidObject{ //attack a single unit, ignore any hostile units it encounters public void performAttackLogic(){ + if(targetObject == null) + return; destinationX = targetObject.getRealCentre().x; destinationY = targetObject.getRealCentre().z;