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 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();
|
||||
Map<Unit,FightStats> unitsBonuses;
|
||||
@ -25,16 +24,17 @@ public class Fight {
|
||||
unitsBonuses = Heroes.heroFightBonuses(gc, def.getHero(), def.getHeroLevel(), false);
|
||||
|
||||
// Tower & wall
|
||||
cityBaseStats = Buildings.cityBaseStats(def.getWallLevel());
|
||||
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, Buildings.wallBonus(def.getWallLevel()));
|
||||
if(def.hasTrojanDefense()) {
|
||||
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())
|
||||
// Add 10% to all units
|
||||
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.cst(0.1));
|
||||
|
||||
// Powers
|
||||
|
||||
//TODO powers
|
||||
|
||||
// Researches
|
||||
if(def.hasDivineSelection())
|
||||
for(Unit u : gc.getUnits())
|
||||
@ -51,17 +51,33 @@ public class Fight {
|
||||
|
||||
// Counsellors
|
||||
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())
|
||||
if(u.isGround())
|
||||
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())
|
||||
for(Unit u : gc.getUnits())
|
||||
if(u.isNaval())
|
||||
unitsBonuses.put(u, FightStats.add(unitsBonuses.getOrDefault(u, FightStats.zero()), FightStats.cst(0.2)));
|
||||
everyoneStatsBonus = FightStats.add(everyoneStatsBonus, FightStats.naval(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
|
||||
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",
|
||||
"divine_battle_strategy_rare", "divine_battle_strategy_epic", "naval_battle_strategy_rare",
|
||||
"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) {
|
||||
return List.of("divine_selection","phalanx","ram")
|
||||
|
||||
@ -18,33 +18,67 @@ public class DefContext {
|
||||
Map<Unit, Integer> units;
|
||||
|
||||
// HEROS
|
||||
Hero hero;
|
||||
int heroLevel;
|
||||
Hero hero = null;
|
||||
int heroLevel = 0;
|
||||
|
||||
// BUILDINGS
|
||||
int wallLevel;
|
||||
boolean hasTower;
|
||||
int wallLevel = 0;
|
||||
boolean hasTower=false;
|
||||
|
||||
// RESEARCHES
|
||||
boolean divineSelection, phalanx, ram;
|
||||
boolean divineSelection= false, phalanx = false, ram=false;
|
||||
|
||||
// COUNSELLORS
|
||||
boolean commander;
|
||||
boolean priest;
|
||||
boolean captain;
|
||||
boolean commander= false;
|
||||
boolean priest = false;
|
||||
boolean captain = false;
|
||||
|
||||
// EFFECTS
|
||||
boolean acumen, divineSenses, myrmidionAttack, trojanDefense,
|
||||
defenseBoost, defensePenalty, longtermDefenseBoost, assassinsAcumen,
|
||||
rareDefenseBoost, epicDefenseBoost, missionsPower4,
|
||||
divineBattleStrategyRare, divineBattleStrategyEpic, navalBattleStrategyRare,
|
||||
navalBattleStrategyEpic, landBattleStrategyRare, landBattleStrategyEpic;
|
||||
// PC x2
|
||||
boolean acumen = false;
|
||||
// PC x4
|
||||
boolean divineSenses= false;
|
||||
// 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;
|
||||
// Def +5%*level
|
||||
int olympicTorchGrepolympiaSummerLevel = 0;
|
||||
// Df +0.7%*level
|
||||
int soteriasShrineLevel = 0;
|
||||
|
||||
// BONUSES
|
||||
boolean nightBonus;
|
||||
boolean nightBonus = false;
|
||||
|
||||
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) {
|
||||
@ -55,7 +89,7 @@ public class DefContext {
|
||||
this.hasTower = hasTower;
|
||||
if(powers.contains("acumen"))this.acumen = 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("defense_boost"))this.defenseBoost = 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_epic"))this.landBattleStrategyEpic = true;
|
||||
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("phalanx"))this.phalanx = true;
|
||||
if(researches.contains("ram"))this.ram = true;
|
||||
@ -208,6 +243,8 @@ public class DefContext {
|
||||
return soteriasShrineLevel;
|
||||
}
|
||||
|
||||
|
||||
public boolean hasNarcissism() {
|
||||
return narcissism;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -27,6 +27,10 @@ public class FightStats implements Cloneable{
|
||||
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) {
|
||||
return new FightStats(value, value, value, value);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user