Added effects to simulator
This commit is contained in:
parent
b783361264
commit
8454e3a711
@ -15,7 +15,6 @@ import com.bernard.greposimu.model.game.units.Unit;
|
|||||||
public class Fight {
|
public class Fight {
|
||||||
|
|
||||||
public static FightStats computeDefStats(GameConfig gc, DefContext def) {
|
public static FightStats computeDefStats(GameConfig gc, DefContext def) {
|
||||||
//TODO replace def getters with more complex getters (.getCounsellors.contains -> .hasCounsellor; .getUnits.get -> .getUnitCount)
|
|
||||||
|
|
||||||
FightStats everyoneStatsBonus = FightStats.zero();
|
FightStats everyoneStatsBonus = FightStats.zero();
|
||||||
Map<Unit,FightStats> unitsBonuses;
|
Map<Unit,FightStats> unitsBonuses;
|
||||||
@ -25,16 +24,17 @@ public class Fight {
|
|||||||
unitsBonuses = Heroes.heroFightBonuses(gc, def.getHero(), def.getHeroLevel(), false);
|
unitsBonuses = Heroes.heroFightBonuses(gc, def.getHero(), def.getHeroLevel(), false);
|
||||||
|
|
||||||
// Tower & wall
|
// Tower & wall
|
||||||
cityBaseStats = Buildings.cityBaseStats(def.getWallLevel());
|
if(def.hasTrojanDefense()) {
|
||||||
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, Buildings.wallBonus(def.getWallLevel()));
|
cityBaseStats = Buildings.cityBaseStats(def.getWallLevel()+1);
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, Buildings.wallBonus(def.getWallLevel()+1));
|
||||||
|
} else {
|
||||||
|
cityBaseStats = Buildings.cityBaseStats(def.getWallLevel());
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, Buildings.wallBonus(def.getWallLevel()));
|
||||||
|
}
|
||||||
if(def.hasTower())
|
if(def.hasTower())
|
||||||
// Add 10% to all units
|
// Add 10% to all units
|
||||||
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.cst(0.1));
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.cst(0.1));
|
||||||
|
|
||||||
// Powers
|
|
||||||
|
|
||||||
//TODO powers
|
|
||||||
|
|
||||||
// Researches
|
// Researches
|
||||||
if(def.hasDivineSelection())
|
if(def.hasDivineSelection())
|
||||||
for(Unit u : gc.getUnits())
|
for(Unit u : gc.getUnits())
|
||||||
@ -51,17 +51,33 @@ public class Fight {
|
|||||||
|
|
||||||
// Counsellors
|
// Counsellors
|
||||||
if(def.hasPriest())
|
if(def.hasPriest())
|
||||||
for(Unit u : gc.getUnits())
|
|
||||||
if(u.isMythological())
|
|
||||||
unitsBonuses.put(u, FightStats.add(unitsBonuses.getOrDefault(u, FightStats.zero()), FightStats.cst(0.2)));
|
|
||||||
if(def.hasCommander())
|
|
||||||
for(Unit u : gc.getUnits())
|
for(Unit u : gc.getUnits())
|
||||||
if(u.isGround())
|
if(u.isGround())
|
||||||
unitsBonuses.put(u, FightStats.add(unitsBonuses.getOrDefault(u, FightStats.zero()), FightStats.cst(0.2)));
|
unitsBonuses.put(u, FightStats.add(unitsBonuses.getOrDefault(u, FightStats.zero()), FightStats.cst(0.2)));
|
||||||
|
if(def.hasCommander())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(0.2));
|
||||||
if(def.hasCaptain())
|
if(def.hasCaptain())
|
||||||
for(Unit u : gc.getUnits())
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.naval(0.2));
|
||||||
if(u.isNaval())
|
|
||||||
unitsBonuses.put(u, FightStats.add(unitsBonuses.getOrDefault(u, FightStats.zero()), FightStats.cst(0.2)));
|
// Powers
|
||||||
|
if(def.hasMyrmidionAttack())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(-0.1));
|
||||||
|
if(def.hasDefenseBoost())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(+0.05));
|
||||||
|
if(def.hasDefensePenalty())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(-0.1));
|
||||||
|
if(def.hasLongtermDefenseBoost())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(+0.05));
|
||||||
|
if(def.hasRareDefenseBoost())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(+0.05));
|
||||||
|
if(def.hasEpicDefenseBoost())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(+0.1));
|
||||||
|
if(def.getOlympicTorchGrepolympiaSummerLevel()!=0)
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(+0.05*def.getOlympicTorchGrepolympiaSummerLevel()));
|
||||||
|
if(def.getSoteriasShrineLevel()!=0)
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(+0.007*def.getOlympicTorchGrepolympiaSummerLevel()));
|
||||||
|
if(def.hasNarcissism())
|
||||||
|
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.terrestre(-0.1));
|
||||||
|
|
||||||
// Night Bonus
|
// Night Bonus
|
||||||
if(def.isNightBonus())
|
if(def.isNightBonus())
|
||||||
@ -99,7 +115,7 @@ public class Fight {
|
|||||||
"epic_defense_boost", "olympic_torch.grepolympia_summer", "olympic_senses.grepolympia_summer", "missions_power_4.missions_dionysia",
|
"epic_defense_boost", "olympic_torch.grepolympia_summer", "olympic_senses.grepolympia_summer", "missions_power_4.missions_dionysia",
|
||||||
"divine_battle_strategy_rare", "divine_battle_strategy_epic", "naval_battle_strategy_rare",
|
"divine_battle_strategy_rare", "divine_battle_strategy_epic", "naval_battle_strategy_rare",
|
||||||
"naval_battle_strategy_epic", "land_battle_strategy_rare", "land_battle_strategy_epic",
|
"naval_battle_strategy_epic", "land_battle_strategy_rare", "land_battle_strategy_epic",
|
||||||
"soterias_shrine.not_cast");
|
"soterias_shrine.not_cast","narcissism");
|
||||||
}
|
}
|
||||||
public static List<Research> relevantDefResearches(GameConfig gd) {
|
public static List<Research> relevantDefResearches(GameConfig gd) {
|
||||||
return List.of("divine_selection","phalanx","ram")
|
return List.of("divine_selection","phalanx","ram")
|
||||||
|
|||||||
@ -18,33 +18,67 @@ public class DefContext {
|
|||||||
Map<Unit, Integer> units;
|
Map<Unit, Integer> units;
|
||||||
|
|
||||||
// HEROS
|
// HEROS
|
||||||
Hero hero;
|
Hero hero = null;
|
||||||
int heroLevel;
|
int heroLevel = 0;
|
||||||
|
|
||||||
// BUILDINGS
|
// BUILDINGS
|
||||||
int wallLevel;
|
int wallLevel = 0;
|
||||||
boolean hasTower;
|
boolean hasTower=false;
|
||||||
|
|
||||||
// RESEARCHES
|
// RESEARCHES
|
||||||
boolean divineSelection, phalanx, ram;
|
boolean divineSelection= false, phalanx = false, ram=false;
|
||||||
|
|
||||||
// COUNSELLORS
|
// COUNSELLORS
|
||||||
boolean commander;
|
boolean commander= false;
|
||||||
boolean priest;
|
boolean priest = false;
|
||||||
boolean captain;
|
boolean captain = false;
|
||||||
|
|
||||||
// EFFECTS
|
// EFFECTS
|
||||||
boolean acumen, divineSenses, myrmidionAttack, trojanDefense,
|
// PC x2
|
||||||
defenseBoost, defensePenalty, longtermDefenseBoost, assassinsAcumen,
|
boolean acumen = false;
|
||||||
rareDefenseBoost, epicDefenseBoost, missionsPower4,
|
// PC x4
|
||||||
divineBattleStrategyRare, divineBattleStrategyEpic, navalBattleStrategyRare,
|
boolean divineSenses= false;
|
||||||
navalBattleStrategyEpic, landBattleStrategyRare, landBattleStrategyEpic;
|
// Attq +10%, Def -10%
|
||||||
|
boolean myrmidionAttack= false;
|
||||||
|
// Remparts +1, Milice+5/farm (level max 25)
|
||||||
|
boolean trojanDefense= false;
|
||||||
|
// Def +5%
|
||||||
|
boolean defenseBoost= false;
|
||||||
|
// Def -10%
|
||||||
|
boolean defensePenalty= false;
|
||||||
|
// Def +5%
|
||||||
|
boolean longtermDefenseBoost= false;
|
||||||
|
// PC +50%
|
||||||
|
boolean assassinsAcumen= false;
|
||||||
|
// Def +5%
|
||||||
|
boolean rareDefenseBoost= false;
|
||||||
|
// Def +10%
|
||||||
|
boolean epicDefenseBoost= false;
|
||||||
|
// +50% PC
|
||||||
|
boolean missionsPower4= false;
|
||||||
|
// PC+50% (sauf BC, transport)
|
||||||
|
boolean divineBattleStrategyRare= false;
|
||||||
|
// PC+100% (sauf BC, transport)
|
||||||
|
boolean divineBattleStrategyEpic= false;
|
||||||
|
// PC+50% against naval (sauf BC,transports)
|
||||||
|
boolean navalBattleStrategyRare= false;
|
||||||
|
// PC+100% against naval (sauf BC, transport)
|
||||||
|
boolean navalBattleStrategyEpic= false;
|
||||||
|
// PC+50% against terrestres
|
||||||
|
boolean landBattleStrategyRare= false;
|
||||||
|
// PC+100% against terrestre
|
||||||
|
boolean landBattleStrategyEpic= false;
|
||||||
|
// Def -10%
|
||||||
|
boolean narcissism= false;
|
||||||
|
// PC+10%*level
|
||||||
int olympicSensesGrepolympiaSummerLevel = 0;
|
int olympicSensesGrepolympiaSummerLevel = 0;
|
||||||
|
// Def +5%*level
|
||||||
int olympicTorchGrepolympiaSummerLevel = 0;
|
int olympicTorchGrepolympiaSummerLevel = 0;
|
||||||
|
// Df +0.7%*level
|
||||||
int soteriasShrineLevel = 0;
|
int soteriasShrineLevel = 0;
|
||||||
|
|
||||||
// BONUSES
|
// BONUSES
|
||||||
boolean nightBonus;
|
boolean nightBonus = false;
|
||||||
|
|
||||||
public DefContext(Map<Unit, Integer> units, Hero hero, int heroLevel, int wallLevel, boolean hasTower,
|
public DefContext(Map<Unit, Integer> units, Hero hero, int heroLevel, int wallLevel, boolean hasTower,
|
||||||
Set<String> powers, int soteriasShrinePowerLevel, int olympicTorchGrepolympiaSummerLevel, int olympicSensesGrepolympiaSummerLevel, Set<String> researches, Set<String> counsellors, boolean nightBonus) {
|
Set<String> powers, int soteriasShrinePowerLevel, int olympicTorchGrepolympiaSummerLevel, int olympicSensesGrepolympiaSummerLevel, Set<String> researches, Set<String> counsellors, boolean nightBonus) {
|
||||||
@ -55,7 +89,7 @@ public class DefContext {
|
|||||||
this.hasTower = hasTower;
|
this.hasTower = hasTower;
|
||||||
if(powers.contains("acumen"))this.acumen = true;
|
if(powers.contains("acumen"))this.acumen = true;
|
||||||
if(powers.contains("divine_senses"))this.divineSenses = true;
|
if(powers.contains("divine_senses"))this.divineSenses = true;
|
||||||
if(powers.contains("myrmdion_attack"))this.myrmidionAttack = true;
|
if(powers.contains("myrmidion_attack"))this.myrmidionAttack = true;
|
||||||
if(powers.contains("trojan_defense"))this.trojanDefense = true;
|
if(powers.contains("trojan_defense"))this.trojanDefense = true;
|
||||||
if(powers.contains("defense_boost"))this.defenseBoost = true;
|
if(powers.contains("defense_boost"))this.defenseBoost = true;
|
||||||
if(powers.contains("defense_penalty"))this.defensePenalty = true;
|
if(powers.contains("defense_penalty"))this.defensePenalty = true;
|
||||||
@ -73,6 +107,7 @@ public class DefContext {
|
|||||||
if(powers.contains("land_battle_strategy_rare"))this.landBattleStrategyRare = true;
|
if(powers.contains("land_battle_strategy_rare"))this.landBattleStrategyRare = true;
|
||||||
if(powers.contains("land_battle_strategy_epic"))this.landBattleStrategyEpic = true;
|
if(powers.contains("land_battle_strategy_epic"))this.landBattleStrategyEpic = true;
|
||||||
if(powers.contains("soterias_shrine"))this.soteriasShrineLevel = soteriasShrinePowerLevel;
|
if(powers.contains("soterias_shrine"))this.soteriasShrineLevel = soteriasShrinePowerLevel;
|
||||||
|
if(powers.contains("narcissism"))this.narcissism = true;
|
||||||
if(researches.contains("divine_selection"))this.divineSelection = true;
|
if(researches.contains("divine_selection"))this.divineSelection = true;
|
||||||
if(researches.contains("phalanx"))this.phalanx = true;
|
if(researches.contains("phalanx"))this.phalanx = true;
|
||||||
if(researches.contains("ram"))this.ram = true;
|
if(researches.contains("ram"))this.ram = true;
|
||||||
@ -208,6 +243,8 @@ public class DefContext {
|
|||||||
return soteriasShrineLevel;
|
return soteriasShrineLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasNarcissism() {
|
||||||
|
return narcissism;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,10 @@ public class FightStats implements Cloneable{
|
|||||||
return new FightStats(value, value, value, 0.0);
|
return new FightStats(value, value, value, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final FightStats naval(double value) {
|
||||||
|
return new FightStats(0.0, 0.0, 0.0, value);
|
||||||
|
}
|
||||||
|
|
||||||
public static final FightStats cst(double value) {
|
public static final FightStats cst(double value) {
|
||||||
return new FightStats(value, value, value, value);
|
return new FightStats(value, value, value, value);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user