home
This commit is contained in:
parent
2a751e6e5d
commit
ac98f58955
@ -106,12 +106,12 @@ public class AssetManager {
|
||||
goldMines = new goldMine[16];
|
||||
goldMines[0] = new goldMine(2f,-0.515f, 1.25f, 45000);
|
||||
goldMines[1] = new goldMine(9.5f,-0.515f, 5.5f, 45000);
|
||||
goldMines[2] = new goldMine(2f,-0.515f, 28.25f, 50000);
|
||||
goldMines[3] = new goldMine(26f,-0.515f, 3.5f, 50000);
|
||||
goldMines[2] = new goldMine(2f,-0.515f, 28.25f, 52500);
|
||||
goldMines[3] = new goldMine(26f,-0.515f, 3.5f, 52500);
|
||||
goldMines[4] = new goldMine(29.75f,-0.515f, 30f, 45000);
|
||||
goldMines[5] = new goldMine(22.5f,-0.515f, 25.5f, 45000);
|
||||
goldMines[6] = new goldMine(15.75f,-0.515f, 18f, 55000);
|
||||
goldMines[7] = new goldMine(16.25f,-0.515f, 12.25f, 55000);
|
||||
goldMines[6] = new goldMine(15.75f,-0.515f, 18f, 52500);
|
||||
goldMines[7] = new goldMine(16.25f,-0.515f, 12.25f, 52500);
|
||||
|
||||
|
||||
//create trees from bitmap
|
||||
@ -241,19 +241,19 @@ public class AssetManager {
|
||||
|
||||
for(int i = 0; i < 10; i ++){
|
||||
|
||||
for(int j = 0; j < 1; j++){
|
||||
for(int j = 0; j < 6; j++){
|
||||
//heavyTank l = new heavyTank(new vector(i*0.25f+ 1.125f,-0.3f, 17.375f - 0.25f*j), 90, 0);
|
||||
//addHeavyTank(l);
|
||||
//l.hasMultiShotUpgrade = true;
|
||||
//lightTank l = new lightTank(new vector(i*0.25f + 1.125f,-0.3f, 0.5f + 18.625f + j*0.25f), 90, 0);
|
||||
//stealthTank l = new stealthTank(new vector(i*0.25f + 1.125f,-0.3f, 0.5f + 18.625f + j*0.25f), 90, 0);
|
||||
|
||||
//l.attackRange = 1.99f;
|
||||
|
||||
//lightTank.tileCheckList_player = lightTank.generateTileCheckList(6);
|
||||
|
||||
//addLightTank(l);
|
||||
//addStealthTank(l);
|
||||
//if(j == 0 && i == 0)
|
||||
//addGunTurret(new gunTurret(i*0.25f -0.125f + 28, -0.65f, 0.25f + 28.125f + j*0.25f, 1));
|
||||
//addMissileTurret(new missileTurret(i*0.25f -0.125f + 1, -0.65f, 0.25f + 17.125f + j*0.25f, 0));
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -506,7 +506,7 @@ public class mainThread extends JFrame implements KeyListener, ActionListener, M
|
||||
|
||||
|
||||
sleepTime = 0;
|
||||
while(System.currentTimeMillis()-lastDraw<frameInterval){
|
||||
/*while(System.currentTimeMillis()-lastDraw<frameInterval){
|
||||
|
||||
try {
|
||||
Thread.sleep(1);
|
||||
@ -515,7 +515,7 @@ public class mainThread extends JFrame implements KeyListener, ActionListener, M
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
|
@ -52,6 +52,9 @@ public class baseExpensionAI {
|
||||
lastExpansionLocation = 7;
|
||||
|
||||
lowGoldmineThreshold = 22500;
|
||||
|
||||
|
||||
System.out.println(expensionPiorityList[1]);
|
||||
}
|
||||
|
||||
|
||||
@ -162,7 +165,9 @@ public class baseExpensionAI {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(myMCV == null && expensionGoldMine.goldDeposite >= 17500 && (mainThread.ec.theEconomyManagerAI.preferedGoldMine.goldDeposite < lowGoldmineThreshold ||
|
||||
(!hasRefineryNearTheGoldmine(mainThread.ec.theEconomyManagerAI.preferedGoldMine) && !hasConstructionYardNearGoldMine(mainThread.ec.theEconomyManagerAI.preferedGoldMine)) ||
|
||||
(mainThread.ec.theEconomyManagerAI.preferedGoldMine == expensionGoldMine && !hasConstructionYardNearGoldMine(expensionGoldMine) && !hasRefineryNearTheGoldmine(expensionGoldMine)))){
|
||||
|
||||
int numberOfMCVOnQueue = 0;
|
||||
@ -171,17 +176,11 @@ public class baseExpensionAI {
|
||||
numberOfMCVOnQueue += mainThread.theAssetManager.factories[i].numOfMCVOnQueue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(numberOfMCVOnQueue == 0 && theBaseInfo.canBuildMCV){
|
||||
for(int i = 0; i < mainThread.theAssetManager.factories.length; i++){
|
||||
if(mainThread.theAssetManager.factories[i] != null && mainThread.theAssetManager.factories[i].teamNo != 0){
|
||||
|
||||
mainThread.theAssetManager.factories[i].cancelItemFromProductionQueue(factory.lightTankType);
|
||||
mainThread.theAssetManager.factories[i].cancelItemFromProductionQueue(factory.rocketTankType);
|
||||
mainThread.theAssetManager.factories[i].cancelItemFromProductionQueue(factory.stealthTankType);
|
||||
mainThread.theAssetManager.factories[i].cancelItemFromProductionQueue(factory.heavyTankType);
|
||||
mainThread.theAssetManager.factories[i].cancelBuilding();
|
||||
mainThread.theAssetManager.factories[i].buildMCV();
|
||||
break;
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ public class combatManagerAI {
|
||||
public combatManagerAI(){
|
||||
this.theBaseInfo = mainThread.ec.theBaseInfo;
|
||||
|
||||
standardAttackTime = 550;
|
||||
standardAttackTime = 600;
|
||||
rushAttackTime = 250 + gameData.getRandom()/4;
|
||||
|
||||
goldMines = mainThread.theAssetManager.goldMines;
|
||||
|
@ -421,7 +421,7 @@ public class defenseManagerAI {
|
||||
if(distanceToThreat > d + missileTurret.attackRange)
|
||||
d = distanceToThreat - missileTurret.attackRange;
|
||||
if(distanceToThreat < 2.2)
|
||||
d = 1.25f;
|
||||
d = 1f;
|
||||
|
||||
missileTurretDeployLocation.x = constructionYards[i].centre.x + (threatX - constructionYards[i].centre.x)/distanceToThreat*d;
|
||||
missileTurretDeployLocation.z = constructionYards[i].centre.z + (threatZ - constructionYards[i].centre.z)/distanceToThreat*d;
|
||||
|
@ -157,14 +157,14 @@ public class economyManagerAI {
|
||||
|
||||
//the ration between harvester and refinery should be 2:1
|
||||
//economyManager has a higher priority than combat manager AI, so the enemy AI will always queue harvester first if lost any.
|
||||
if(theBaseInfo.numberOfRefinery > 0 && numberOfharvesters < 4){
|
||||
if(numberOfharvesters/theBaseInfo.numberOfRefinery < 2){
|
||||
if(theBaseInfo.numberOfRefinery > 0 && numberOfharvesters < 6){
|
||||
if(numberOfharvesters < theBaseInfo.numberOfRefinery + 2){
|
||||
for(int i = 0; i < mainThread.theAssetManager.factories.length; i++){
|
||||
if(mainThread.theAssetManager.factories[i] != null && mainThread.theAssetManager.factories[i].teamNo != 0){
|
||||
if(mainThread.theAssetManager.factories[i].isIdle()){
|
||||
mainThread.theAssetManager.factories[i].buildHarvester();
|
||||
break;
|
||||
}
|
||||
mainThread.theAssetManager.factories[i].cancelBuilding();
|
||||
mainThread.theAssetManager.factories[i].buildHarvester();
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -450,7 +450,7 @@ public class mapAwarenessAI {
|
||||
|
||||
playerHasMostlyLightTanks = (numberOfLightTanks_player > 5 && lightTankRatio > 0.8f) || (frameAI < 420 && numberOfLightTanks_player > 1 && lightTankRatio >= 0.75f);
|
||||
playerHasMostlyHeavyTanks = numberOfHeavyTanks_player > 1 && (float)(numberOfHeavyTanks_player)/(totalNumberOfPlayerUnits) > 0.6f;
|
||||
playerHasManyLightTanksButNoHeavyTank = lightTankRatio > 0.5 && lightTankRatio <=0.8 && numberOfHeavyTanks_player < 3;
|
||||
playerHasManyLightTanksButNoHeavyTank = lightTankRatio > 0.5 && numberOfHeavyTanks_player < 3;
|
||||
|
||||
playIsRushingHighTierUnits = mainThread.gameFrame/30 > 250 && mainThread.gameFrame/30 < 400
|
||||
&& mainThread.ec.theMapAwarenessAI.numberOfTechCenter_player >0
|
||||
|
@ -154,15 +154,22 @@ public class microManagementAI {
|
||||
float myRange= unitInCombatRadius[i].attackRange * unitInCombatRadius[i].attackRange;
|
||||
|
||||
solidObject target = null;
|
||||
solidObject currentTarget = unitInCombatRadius[i].targetObject;
|
||||
int targetHP = 99999;
|
||||
int level = 0;
|
||||
|
||||
if(currentTarget != null) {
|
||||
level = currentTarget.level;
|
||||
}
|
||||
|
||||
|
||||
float distanceToDesination = 99999;
|
||||
|
||||
|
||||
for(int j=0; j < numberOfPlayerUnitsOnMinimap; j++){
|
||||
if(playerUnitInMinimap[j] != null && playerUnitInMinimap[j].currentHP > 0){
|
||||
|
||||
if((playerUnitInMinimap[j].getMaxHp() / playerUnitInMinimap[j].currentHP > 4 && !(unitInCombatRadius[i].targetObject!= null && unitInCombatRadius[i].targetObject.currentHP < playerUnitInMinimap[j].currentHP)) || playerUnitInMinimap[j].level > level){
|
||||
if(((playerUnitInMinimap[j].getMaxHp() / playerUnitInMinimap[j].currentHP >= 4) && !(currentTarget != null && currentTarget.currentHP < playerUnitInMinimap[j].currentHP)) || playerUnitInMinimap[j].level > level){
|
||||
x1 = playerUnitInMinimap[j].centre.x;
|
||||
x2 = unitInCombatRadius[i].centre.x;
|
||||
z1 = playerUnitInMinimap[j].centre.z;
|
||||
|
@ -110,7 +110,7 @@ public class unitProductionAI {
|
||||
}
|
||||
if(z != 999999) {
|
||||
|
||||
rallyPoint.set(x - 2.5f, 0, z - 2f);
|
||||
rallyPoint.set(x - 2.25f, 0, z - 1.75f);
|
||||
|
||||
if(frameAI < 240) {
|
||||
rallyPoint.set(mainThread.theAssetManager.goldMines[5].centre);
|
||||
@ -165,19 +165,28 @@ public class unitProductionAI {
|
||||
boolean playerHasMostlyHeavyAndStealthTanks = mainThread.ec.theMapAwarenessAI.playerHasMostlyHeavyAndStealthTanks;
|
||||
|
||||
|
||||
boolean b1 = (numberOfRocketTanks_AI < 3 && (frameAI > 400 || frameAI > 170 && frameAI < 240 && mainThread.ec.theMapAwarenessAI.numberOfConstructionYard_player > 0) && !playerHasMostlyLightTanks);
|
||||
int timeToBuildHeavyTank = 400;
|
||||
int timeToBuildStealthTank = 200;
|
||||
if(mainThread.ec.theMapAwarenessAI.canRushPlayer) {
|
||||
//when AI decides to rush the player, then dont build higher tier units so it can mass produce light tanks
|
||||
timeToBuildHeavyTank = 500;
|
||||
timeToBuildStealthTank = 500;
|
||||
}
|
||||
|
||||
boolean b1 = (numberOfRocketTanks_AI < 3 && !playerHasMostlyHeavyTanks && (frameAI > 400 || frameAI > 170 && frameAI < 240 && mainThread.ec.theMapAwarenessAI.numberOfConstructionYard_player > 0) && !playerHasMostlyLightTanks);
|
||||
boolean b2 = (numberOfRocketTanks_AI < numberOfPlayerGunTurrets + numberOfPlayerMissileTurrets*1.5);
|
||||
if( b1 || b2){
|
||||
currentProductionOrder = produceRocketTank;
|
||||
}else if(theBaseInfo.canBuildHeavyTank &&
|
||||
(playerHasMostlyHeavyAndStealthTanks ||
|
||||
}else if(theBaseInfo.canBuildHeavyTank && !playerHasMostlyHeavyTanks &&
|
||||
(playerHasMostlyHeavyAndStealthTanks || (frameAI > timeToBuildHeavyTank && numberOfHeavyTanks_AI < 3) ||
|
||||
!playerHasManyLightTanksButNoHeavyTank
|
||||
&& !playerHasMostlyLightTanks
|
||||
&& !(numberOfHeavyTanks_player == 0 && maxNumberOfStealthTanks_playerInLastFiveMinutes < 3 && frameAI > 600)
|
||||
&& !(playerHasMostlyHeavyTanks && numberOfStealthTanks_player < numberOfHeavyTanks_AI*2)
|
||||
&& (playIsRushingHighTierUnits || maxNumberOfStealthTanks_playerInLastFiveMinutes*4 > numberOfHeavyTanks_AI || (frameAI > 400 && frameAI < 500 && numberOfPlayerGunTurrets + numberOfPlayerMissileTurrets+ numberOfLightTanks_player + numberOfRocketTanks_player + numberOfHeavyTanks_player*5 < 5)))){
|
||||
&& (playIsRushingHighTierUnits || maxNumberOfStealthTanks_playerInLastFiveMinutes*4 > numberOfHeavyTanks_AI))){
|
||||
currentProductionOrder = produceHeavyTank;
|
||||
}else if(theBaseInfo.canBuildStealthTank && (playerHasMostlyLightTanks || playerLikelyCanNotProduceHighTierUnits || playerDoesntHaveMassHeavyTanks) && !playerHasMostlyHeavyTanks && (frameAI > 450 || numberOfLightTanks_player > 8)){
|
||||
}else if(theBaseInfo.canBuildStealthTank && !playerHasMostlyHeavyTanks && !(numberOfStealthTanksControlledByCombatAI >= 8 && frameAI < 600) && !(numberOfStealthTanksControlledByCombatAI >= 16 && frameAI > 600)
|
||||
&& (playerHasMostlyLightTanks || playerLikelyCanNotProduceHighTierUnits || playerDoesntHaveMassHeavyTanks) && !playerHasMostlyHeavyTanks && (frameAI > timeToBuildStealthTank || numberOfLightTanks_player > 8)){
|
||||
currentProductionOrder = produceStealthTank;
|
||||
}else{
|
||||
currentProductionOrder = produceLightTank;
|
||||
|
@ -55,7 +55,7 @@ public class gunTurret extends solidObject{
|
||||
public int turretAngleDelta, accumulatedDelta;
|
||||
|
||||
public int turretTurnRate = 8;
|
||||
public int myAttackCooldown= 25;
|
||||
public int myAttackCooldown= 24;
|
||||
public int attackCoolDown;
|
||||
public vector firingPosition;
|
||||
|
||||
|
@ -510,7 +510,7 @@ public class missileTurret extends solidObject{
|
||||
exposedCountDown --;
|
||||
|
||||
if(overCharge)
|
||||
myAttackCooldown = 10;
|
||||
myAttackCooldown = 9;
|
||||
|
||||
//mark itself on obstacle map
|
||||
mainThread.gridMap.currentObstacleMap[tileIndex[0]] = false;
|
||||
|
@ -1183,8 +1183,10 @@ public class stealthTank extends solidObject{
|
||||
myDamageModified=(int)(myDamage*2);
|
||||
}else if(targetObject.type==1 || targetObject.type==6){
|
||||
myDamageModified=(int)(myDamage*1.75);
|
||||
}else if(targetObject.type == 7 || targetObject.type > 100 || targetObject.type == 2 || targetObject.type == 3){
|
||||
myDamageModified=(int)(myDamage*0.4);
|
||||
}else if(targetObject.type > 100 || targetObject.type == 2 || targetObject.type == 3){
|
||||
myDamageModified=(int)(myDamage*0.3);
|
||||
}else if(targetObject.type == 7) {
|
||||
myDamageModified=(int)(myDamage*0.3);
|
||||
}
|
||||
|
||||
//damage and alert target unit
|
||||
@ -1310,8 +1312,10 @@ public class stealthTank extends solidObject{
|
||||
|
||||
}else if(targetObject.type==6){
|
||||
myDamageModified=(int)(myDamage*1.75);
|
||||
}else if(secondaryTargets[i].type == 7 || targetObject.type == 2 || targetObject.type == 3){
|
||||
myDamageModified=(int)(myDamage*0.4);
|
||||
}else if(targetObject.type == 2 || targetObject.type == 3){
|
||||
myDamageModified=(int)(myDamage*0.3);
|
||||
}else if(secondaryTargets[i].type == 7) {
|
||||
myDamageModified=0; //heavy tank is immue to secondary attack
|
||||
}
|
||||
|
||||
|
||||
|
@ -90,7 +90,7 @@ public class gameMenu {
|
||||
+ "\"a\" -- Force attack a unit. If no unit is under the cursor, then the selected units will \nbe set to attack move to the cursor location.\n\n"
|
||||
+ "\"h\" -- stop current action for the selected unit(s).\n\n"
|
||||
+ "\"Ctrl + number\" -- Create a control group and assigned the number to the group.\n\n"
|
||||
+ "\"Ctrl + Left Click\" -- Add/Remove the a unit to/from the selected units.\n\n"
|
||||
+ "\"Ctrl + Left Click\" -- Add/Remove a unit to/from the selected units.\n\n"
|
||||
+ "\"Ctrl + Mouse Drag\" -- Add units in the dragging box to the selected units.\n\n\n"
|
||||
+ " 1/4 ").toCharArray();
|
||||
|
||||
|
@ -100,7 +100,7 @@ public class rocket {
|
||||
return;
|
||||
|
||||
distanceToTarget = (float)Math.sqrt((target.centre.x - centre.x) * (target.centre.x - centre.x) + (target.centre.z - centre.z) * (target.centre.z - centre.z));
|
||||
if(distanceToTarget <= 0.06){
|
||||
if(distanceToTarget <= 0.065){
|
||||
|
||||
//spawn an explosion at the end of the rocket life
|
||||
float[] tempFloat = mainThread.theAssetManager.explosionInfo[mainThread.theAssetManager.explosionCount];
|
||||
@ -168,11 +168,15 @@ public class rocket {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(speed < 0.1)
|
||||
speed*=1.4f;
|
||||
if(attacker.type == 199) {
|
||||
if(speed < 0.1)
|
||||
speed*=1.5f;
|
||||
}else {
|
||||
if(speed < 0.1)
|
||||
speed*=1.4f;
|
||||
}
|
||||
|
||||
|
||||
distanceTravelled+=speed;
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user