use of main.system.math.Formula in project Eidolons by IDemiurge.
the class PriorityManagerImpl method evaluatePriorityFormula.
@Override
public int evaluatePriorityFormula(Action action, String property) {
Boolean less_or_more_for_health = null;
for (PRIORITY_FUNCS p : PRIORITY_FUNCS.values()) {
String text = StringMaster.wrapInBraces(p.name().toLowerCase());
if (!property.contains(text)) {
continue;
}
float i = 1;
switch(p) {
case DURATION:
i = new Float(getDurationMultiplier(action)) / 100;
break;
case CAPACITY:
i = calculateCapacity(action.getSource());
break;
case DANGER:
i = getSituationAnalyzer().getMeleeDangerFactor(getUnit(), false, true) / 100;
break;
}
property = property.replace(text, "" + i);
}
if (property.contains("[less]")) {
less_or_more_for_health = true;
property = property.replace("[less]", "");
}
if (property.contains("[more]")) {
less_or_more_for_health = false;
property = property.replace("[more]", "");
}
if (less_or_more_for_health != null) {
int unitPriority = getUnitPriority(action.getTarget(), less_or_more_for_health);
property = property.replace("{target_power}", "" + unitPriority);
}
Integer p = new Formula(property).getInt(action.getRef());
return p;
}
use of main.system.math.Formula in project Eidolons by IDemiurge.
the class DC_FeatObj method parseParamBonusString.
private void parseParamBonusString() {
String prop = getProperty(PROPS.PARAMETER_BONUSES);
if (!prop.endsWith(";")) {
prop = prop + ";";
}
prop = prop + getProperty(PROPS.ATTRIBUTE_BONUSES);
for (String substring : StringMaster.open(prop)) {
// String[] array = substring.split(" ");
// array[array.length - 1];
String bonus = VariableManager.getVar(substring);
boolean mod = false;
if (bonus.contains("%")) {
mod = true;
bonus = bonus.replace("%", "");
} else if (bonus.contains("mod")) {
mod = true;
bonus = bonus.replace("mod", "");
}
String paramName = VariableManager.removeVarPart(substring);
// substring.replace(bonus, "");
PARAMETER param = ContentManager.getPARAM(paramName);
if (param == null) {
param = ContentManager.getMastery(paramName);
}
if (param == null) {
param = ContentManager.findPARAM(paramName);
}
if (param == null) {
param = ContentManager.findMastery(paramName);
}
if (param == null) {
continue;
}
getRef().setInfoEntity(this);
bonus = TextParser.parse(bonus, getRef(), TextParser.ABILITY_PARSING_CODE);
// StringMaster.getInteger(bonus);
Integer amount = new Formula(bonus).getInt(getRef());
if (amount == 0) {
continue;
}
if (mod) {
getModMap().put(param, bonus);
} else {
getBonusMap().put(param, bonus);
}
paramStringParsed = true;
}
paramStringParsed = true;
}
use of main.system.math.Formula in project Eidolons by IDemiurge.
the class DebugMaster method summon.
private void summon(Boolean me, DC_TYPE units, Ref ref) {
Player player = Player.NEUTRAL;
if (me != null) {
player = game.getPlayer(me);
if (!me) {
if (ALT_AI_PLAYER) {
if (altAiPlayer == null) {
altAiPlayer = new DC_Player("", null, false);
}
player = altAiPlayer;
}
}
}
/*
* alt mode: >> random >> preset >> last
*/
ref.setPlayer(player);
String typeName;
if (arg instanceof Unit) {
Obj obj = arg;
typeName = (obj.getType().getName());
}
if (altMode) {
typeName = lastType;
// RandomWizard.getRandomType(units).getName();
} else {
typeName = ListChooser.chooseType(units);
}
if (!DataManager.isTypeName(typeName)) {
typeName = DialogMaster.inputText("Then enter it yourself...");
}
if (typeName == null) {
return;
}
if (!DataManager.isTypeName(typeName)) {
ObjType foundType = DataManager.findType(typeName, units);
if (foundType == null) {
return;
}
typeName = foundType.getName();
}
if (arg instanceof Obj) {
Obj obj = arg;
ref.setTarget(game.getCellByCoordinate(obj.getCoordinates()).getId());
} else if (!new SelectiveTargeting(new Conditions(ConditionMaster.getTYPECondition(DC_TYPE.TERRAIN))).select(ref)) {
return;
}
lastType = typeName;
SummonEffect effect = (me == null) ? new CreateObjectEffect(typeName, true) : new SummonEffect(typeName);
if (units == DC_TYPE.UNITS) {
if (checkAddXp()) {
Formula xp = new Formula("" + (DC_Formulas.getTotalXpForLevel(DataManager.getType(typeName, DC_TYPE.UNITS).getIntParam(PARAMS.LEVEL) + DialogMaster.inputInt()) - DC_Formulas.getTotalXpForLevel(DataManager.getType(typeName, DC_TYPE.UNITS).getIntParam(PARAMS.LEVEL))));
effect = new SummonEffect(typeName, xp);
}
}
effect.setOwner(player);
effect.apply(ref);
if (player.isAi()) {
game.getAiManager().getCustomUnitGroup((Unit) effect.getUnit()).add(effect.getUnit());
}
game.getManager().refreshAll();
}
use of main.system.math.Formula in project Eidolons by IDemiurge.
the class DebugMaster method executeDebugFunction.
public Object executeDebugFunction(DEBUG_FUNCTIONS func) {
executedFunctions.push(func.toString());
boolean transmitted = false;
if (game.isOnline()) {
if (func.transmitted) {
transmitted = true;
}
}
if (target != null) {
arg = target;
}
Unit infoObj = target instanceof Unit ? (Unit) target : null;
Ref ref = null;
if (infoObj == null) {
try {
infoObj = (Unit) getObj();
} catch (Exception e) {
}
}
if (infoObj == null) {
infoObj = game.getManager().getActiveObj();
}
if (game.getManager().getActiveObj() != null) {
ref = new Ref(game, game.getManager().getActiveObj().getId());
} else {
ref = new Ref(game);
}
ref.setDebug(true);
Coordinates coordinate = null;
String data = null;
DC_TYPE TYPE;
debugFunctionRunning = true;
try {
switch(func) {
case SET_GLOBAL_ILLUMINATION:
game.getVisionMaster().getIlluminationMaster().setGlobalIllumination(DialogMaster.inputInt("SET_GLOBAL_ILLUMINATION", game.getVisionMaster().getIlluminationMaster().getGlobalIllumination()));
break;
case SET_GLOBAL_CONCEALMENT:
game.getVisionMaster().getIlluminationMaster().setGlobalConcealment(DialogMaster.inputInt("SET_GLOBAL_CONCEALMENT", game.getVisionMaster().getIlluminationMaster().getGlobalConcealment()));
break;
case TEST_CLONE_STATE:
StateCloner.test();
break;
case TEST_LOAD_STATE:
StatesKeeper.testLoad();
return null;
case RUN_AUTO_TESTS:
AutoTestMaster.runTests();
break;
case AUTO_TEST_INPUT:
WaitMaster.receiveInput(WAIT_OPERATIONS.AUTO_TEST_INPUT, true);
break;
case SET_OPTION:
OptionsMaster.promptSetOption();
break;
case ADD_GROUP:
File groupFile = ListChooser.chooseFile(PathFinder.getUnitGroupPath());
if (groupFile == null) {
break;
}
if (arg instanceof DC_Cell) {
coordinate = arg.getCoordinates();
} else {
coordinate = getGame().getBattleFieldManager().pickCoordinate();
}
if (coordinate == null) {
break;
}
data = FileManager.readFile(groupFile);
UnitGroupMaster.setCurrentGroupHeight(MathMaster.getMaxY(data));
UnitGroupMaster.setCurrentGroupWidth(MathMaster.getMaxX(data));
UnitGroupMaster.setMirror(isAltMode());
// UnitGroupMaster.setFlip(null);
try {
DC_ObjInitializer.createUnits(game.getPlayer(isAltMode()), data, coordinate);
} catch (Exception e) {
main.system.ExceptionMaster.printStackTrace(e);
} finally {
UnitGroupMaster.setMirror(false);
}
break;
case TOGGLE_DUMMY:
game.setDummyMode(!game.isDummyMode());
TestMasterContent.setForceFree(game.isDummyMode());
break;
case TOGGLE_DUMMY_PLUS:
game.setDummyPlus(!game.isDummyPlus());
TestMasterContent.setForceFree(game.isDummyMode());
break;
case PRESET:
PresetMaster.handlePreset(isAltMode());
break;
case TOGGLE_DUNGEON_DEBUG:
{
mapDebugOn = !mapDebugOn;
break;
}
case HIDDEN_FUNCTION:
{
int i = DialogMaster.optionChoice(HIDDEN_DEBUG_FUNCTIONS.values(), "...");
if (i != -1) {
executeHiddenDebugFunction(HIDDEN_DEBUG_FUNCTIONS.values()[i]);
}
break;
}
case TOGGLE_AUTO_UNIT:
if (!infoObj.isOwnedBy(game.getPlayer(true))) {
infoObj.setOriginalOwner(game.getPlayer(true));
infoObj.setOwner(game.getPlayer(true));
} else {
infoObj.setAiControlled(!infoObj.isAiControlled());
}
WaitMaster.receiveInput(WAIT_OPERATIONS.ACTION_COMPLETE, true);
break;
case EDIT_AI:
break;
case SAVE:
Saver.save("test");
break;
case LOAD:
Loader.loadGame("test.xml");
break;
case PAUSE:
DC_Game.game.getLoop().setPaused(!DC_Game.game.getLoop().isPaused());
break;
case TOGGLE_OMNIVISION:
omnivision = !omnivision;
break;
case AUTO_COMBAT:
game.getPlayer(true).setAi(!game.getPlayer(true).isAi());
WaitMaster.receiveInput(WAIT_OPERATIONS.ACTION_COMPLETE, true);
break;
case ADD_TEST_SPELLS:
TestMasterContent.addTestActives(false, infoObj.getType(), true);
break;
case ADD_ALL_SPELLS:
TestMasterContent.addTestActives(true, infoObj.getType(), true);
break;
case TOGGLE_GRAPHICS_TEST:
DrawMasterStatic.GRAPHICS_TEST_MODE = !DrawMasterStatic.GRAPHICS_TEST_MODE;
if (DrawMasterStatic.GRAPHICS_TEST_MODE) {
DrawMasterStatic.FULL_GRAPHICS_TEST_MODE = DialogMaster.confirm("Full test on?");
} else {
DrawMasterStatic.FULL_GRAPHICS_TEST_MODE = false;
}
break;
case TOGGLE_LOG:
{
String e = ListChooser.chooseEnum(LOG_CHANNEL.class);
LogMaster.toggle(e);
break;
}
case TOGGLE_QUIET:
quiet = !quiet;
break;
case TOGGLE_FREE_ACTIONS:
TestMasterContent.toggleFree();
break;
case GOD_MODE:
TestMasterContent.toggleImmortal();
// game.getManager().refreshAll();
break;
case RESTART:
// if (!altMode) {
// if (DialogMaster.confirm("Select anew?")) {
// FAST_DC.getLauncher().selectiveInit();
// }
// }
game.getManager().getDeathMaster().killAllUnits(true, false, quiet);
game.getBattleMaster().getSpawner().spawnCustomParty(true);
game.getBattleMaster().getSpawner().spawnCustomParty(false);
game.getManager().refreshAll();
WaitMaster.receiveInput(WAIT_OPERATIONS.ACTION_COMPLETE, true);
return func;
case CLEAR:
boolean respawn = isAltMode();
game.getManager().getDeathMaster().killAllUnits(!isAltMode());
if (respawn) {
// /respawn!
game.getBattleMaster().getSpawner().spawnCustomParty(true);
game.getBattleMaster().getSpawner().spawnCustomParty(false);
}
game.getManager().refreshAll();
break;
case KILL_ALL_UNITS:
game.getManager().getDeathMaster().killAll(isAltMode());
break;
case ACTIVATE_UNIT:
if (isAltMode()) {
getObj().modifyParameter(PARAMS.C_N_OF_ACTIONS, 100);
}
if (getObj().isMine()) {
game.getManager().setActivatingAction(null);
game.getManager().activeSelect(getObj());
} else {
WaitMaster.receiveInput(WAIT_OPERATIONS.ACTION_COMPLETE, true);
WaitMaster.WAIT(1234);
getObj().modifyParameter(PARAMS.C_N_OF_ACTIONS, 100);
}
game.getVisionMaster().refresh();
break;
case ADD_ITEM:
if (isAltMode()) {
TYPE = DC_TYPE.WEAPONS;
} else {
TYPE = (DC_TYPE) DialogMaster.getChosenOption("Choose item type...", DC_TYPE.WEAPONS, DC_TYPE.ARMOR, DC_TYPE.ITEMS, DC_TYPE.JEWELRY);
}
if (isAltMode()) {
if (!selectWeaponType()) {
break;
}
} else if (!selectType(TYPE)) {
break;
}
if (!selectTarget(ref)) {
selectedTarget = infoObj;
}
if (selectedTarget == null) {
break;
}
boolean quick = false;
if (isAltMode()) {
quick = false;
} else if (TYPE == DC_TYPE.ITEMS) {
quick = true;
} else if (TYPE == DC_TYPE.WEAPONS) {
quick = DialogMaster.confirm("quick slot item?");
}
DC_HeroItemObj item = ItemFactory.createItemObj(selectedType, selectedTarget.getOwner(), game, ref, quick);
if (!quick) {
if (TYPE != DC_TYPE.JEWELRY) {
selectedTarget.equip(item, TYPE == DC_TYPE.ARMOR ? ItemEnums.ITEM_SLOT.ARMOR : ItemEnums.ITEM_SLOT.MAIN_HAND);
}
} else {
selectedTarget.addQuickItem((DC_QuickItemObj) item);
}
// selectedTarget.addItemToInventory(item);
game.getManager().refreshGUI();
break;
case ADD_SPELL:
if (!selectType(DC_TYPE.SPELLS)) {
break;
}
if (!selectTarget(ref)) {
selectedTarget = infoObj;
}
if (selectedTarget == null) {
break;
}
TestMasterContent.setTEST_LIST(TestMasterContent.getTEST_LIST() + selectedType.getName() + ";");
selectedTarget.getSpells().add(new DC_SpellObj(selectedType, selectedTarget.getOwner(), game, selectedTarget.getRef()));
game.getManager().refreshGUI();
break;
case ADD_SKILL:
case ADD_ACTIVE:
PROPERTY prop = G_PROPS.ACTIVES;
DC_TYPE T = DC_TYPE.ACTIONS;
if (func == DEBUG_FUNCTIONS.ADD_SKILL) {
prop = PROPS.SKILLS;
T = DC_TYPE.SKILLS;
}
String type = ListChooser.chooseType(T);
if (type == null) {
break;
}
if (!new SelectiveTargeting(new Conditions(ConditionMaster.getTYPECondition(C_OBJ_TYPE.BF_OBJ))).select(ref)) {
break;
}
lastType = type;
new AddBuffEffect(type + " hack", new ModifyPropertyEffect(prop, MOD_PROP_TYPE.ADD, type), new Formula("1")).apply(ref);
if (func == DEBUG_FUNCTIONS.ADD_ACTIVE) {
infoObj.getActives().add(game.getActionManager().getAction(type, infoObj));
game.getActionManager().constructActionMaps(infoObj);
}
// instead of toBase()
break;
case ADD_PASSIVE:
// same method
infoObj.getPassives().add(AbilityConstructor.getPassive(ListChooser.chooseType(DC_TYPE.ABILS), infoObj));
infoObj.activatePassives();
break;
case CHANGE_OWNER:
// if already has, make permanent
new AddBuffEffect("ownership hack", new OwnershipChangeEffect(), new Formula("1")).apply(ref);
break;
case END_TURN:
game.getManager().setActivatingAction(null);
WaitMaster.receiveInput(WAIT_OPERATIONS.ACTION_INPUT, null);
return func;
case KILL_UNIT:
if (arg != null) {
arg.kill(infoObj, !isAltMode(), isAltMode());
} else {
infoObj.kill(infoObj, !isAltMode(), isAltMode());
}
// .getInfoObj());
break;
case ADD_CHAR:
summon(true, DC_TYPE.CHARS, ref);
break;
case ADD_OBJ:
summon(null, DC_TYPE.BF_OBJ, new Ref(game));
break;
case ADD_UNIT:
summon(true, DC_TYPE.UNITS, ref);
break;
case SET_WAVE_POWER:
Integer forcedPower;
forcedPower = DialogMaster.inputInt();
if (forcedPower < 0) {
forcedPower = null;
}
ArenaBattleMaster a = (ArenaBattleMaster) game.getBattleMaster();
a.getWaveAssembler().setForcedPower(forcedPower);
break;
case SPAWN_CUSTOM_WAVE:
coordinate = getGame().getBattleFieldManager().pickCoordinate();
ObjType waveType = ListChooser.chooseType_(DC_TYPE.ENCOUNTERS);
Wave wave = new Wave(coordinate, waveType, game, ref, game.getPlayer(!isAltMode()));
String value = new ListChooser(SELECTION_MODE.MULTIPLE, StringMaster.openContainer(wave.getProperty(PROPS.UNIT_TYPES)), DC_TYPE.UNITS).choose();
wave.setProperty(PROPS.UNIT_TYPES, value);
// PROPS.EXTENDED_PRESET_GROUP
break;
case SPAWN_PARTY:
coordinate = getGame().getBattleFieldManager().pickCoordinate();
ObjType party = ListChooser.chooseType_(DC_TYPE.PARTY);
game.getBattleMaster().getSpawner().spawnCustomParty(coordinate, null, party);
break;
case SPAWN_WAVE:
if (!isAltMode()) {
coordinate = getGame().getBattleFieldManager().pickCoordinate();
} else {
// FACING_DIRECTION side = new EnumChooser<FACING_DIRECTION>()
// .choose(FACING_DIRECTION.class);
// if (side== FACING_DIRECTION.NONE)
// game.getBattleMaster().getSpawner().getPositioner().setForcedSide(side);
}
String typeName = ListChooser.chooseType(DC_TYPE.ENCOUNTERS);
if (typeName == null) {
return func;
}
try {
game.getBattleMaster().getSpawner().spawnWave(typeName, game.getPlayer(ALT_AI_PLAYER), coordinate);
} catch (Exception e) {
main.system.ExceptionMaster.printStackTrace(e);
} finally {
// game.getBattleMaster().getSpawner().getPositioner().setForcedSide(null);
}
game.getManager().refreshAll();
break;
case ADD_ENEMY_UNIT:
summon(false, DC_TYPE.UNITS, new Ref(game));
// game.getManager().refreshAll();
break;
case TOGGLE_ALT_AI:
{
game.getPlayer(true).setAi(!game.getPlayer(true).isAi());
ALT_AI_PLAYER = !ALT_AI_PLAYER;
break;
}
case TOGGLE_DEBUG:
{
game.setDebugMode(!game.isDebugMode());
Launcher.setDEBUG_MODE(!Launcher.isDEBUG_MODE_DEFAULT());
break;
}
case WAITER_INPUT:
{
String input = DialogMaster.inputText("operation");
WAIT_OPERATIONS operation = new EnumMaster<WAIT_OPERATIONS>().retrieveEnumConst(WAIT_OPERATIONS.class, input);
if (operation == null) {
operation = new EnumMaster<WAIT_OPERATIONS>().retrieveEnumConst(WAIT_OPERATIONS.class, input, true);
}
if (operation == null) {
DialogMaster.error("no such operation");
return func;
}
input = DialogMaster.inputText("input");
WaitMaster.receiveInput(operation, input);
}
case REMOVE_HACKS:
break;
// break;
case TOGGLE_LIGHTING:
break;
case TOGGLE_FOG:
break;
case GUI_EVENT:
EmitterController.getInstance();
String string = ListChooser.chooseEnum(GuiEventType.class);
GuiEventManager.trigger(new EnumMaster<GuiEventType>().retrieveEnumConst(GuiEventType.class, string), null);
break;
case SFX_PLAY_LAST:
EmitterController.getInstance();
GuiEventManager.trigger(GuiEventType.SFX_PLAY_LAST, null);
break;
case SFX_ADD:
EmitterController.getInstance();
GuiEventManager.trigger(GuiEventType.CREATE_EMITTER, null);
break;
case SFX_ADD_RANDOM:
EmitterController.getInstance().getInstance();
GuiEventManager.trigger(GuiEventType.CREATE_EMITTER, true);
break;
case SFX_MODIFY:
EmitterController.getInstance().modify();
break;
case SFX_SET:
EmitterController.getInstance().setForActive();
break;
case SFX_SAVE:
EmitterController.getInstance().save();
break;
}
} catch (Exception e) {
main.system.ExceptionMaster.printStackTrace(e);
} finally {
debugFunctionRunning = false;
}
if (isResetRequired(func))
reset();
if (transmitted) {
// String transmittedData = lastType + StringMaster.NET_DATA_SEPARATOR + infoObj
// + StringMaster.NET_DATA_SEPARATOR + data + StringMaster.NET_DATA_SEPARATOR
// + ref;
// game.getCommunicator().transmitDebugFunction(func, transmittedData);
}
return func;
}
use of main.system.math.Formula in project Eidolons by IDemiurge.
the class DealDamageEffectTest method dealDamageObjectTest.
@Test
public void dealDamageObjectTest() {
assertTrue(source != null);
assertTrue(target != null);
int origToughness = target.getIntParam(PARAMS.C_TOUGHNESS);
int origEndurance = target.getIntParam(PARAMS.C_ENDURANCE);
DealDamageEffect eff = new DealDamageEffect(new Formula("50"), GenericEnums.DAMAGE_TYPE.BLUDGEONING.getName(), DAMAGE_MODIFIER.UNBLOCKABLE);
Damage dmg = DamageFactory.getDamageFromEffect(eff, 25);
dmg.getRef().setTarget(target.getId());
DamageDealer.dealDamage(dmg);
Integer newToughness = target.getIntParam(PARAMS.C_TOUGHNESS);
Integer newEndurance = target.getIntParam(PARAMS.C_ENDURANCE);
assertTrue(newToughness < origToughness);
assertTrue(newEndurance < origEndurance);
}
Aggregations