use of main.entity.Ref in project Eidolons by IDemiurge.
the class LocationSpawner method getCreepGroupForBlock.
private Wave getCreepGroupForBlock(int preferredPower, Dungeon dungeon, MapBlock block, int min, int max) {
// alt? vielleicht fur einige spezielle orte...
String property = dungeon.getProperty(PROPS.ENCOUNTERS);
int mod = block.getSpawningPriority();
if (mod == 0) {
mod = 100;
}
Wave wave;
List<ObjType> list = DataManager.toTypeList(property, DC_TYPE.ENCOUNTERS);
Collections.shuffle(list);
ObjType type = null;
for (ObjType t : list) {
type = t;
if (EncounterMaster.getPower(type, false) < min * mod / 100) {
continue;
}
if (EncounterMaster.getPower(type, false) > max * mod / 100) {
continue;
}
break;
}
if (type == null) {
type = new RandomWizard<ObjType>().getObjectByWeight(property, ObjType.class);
}
wave = new Wave(type, game, new Ref(game), game.getPlayer(false));
wave.setPreferredPower(preferredPower * mod / 100);
wave.setBlock(block);
return wave;
}
use of main.entity.Ref in project Eidolons by IDemiurge.
the class LocationSpawner method spawnDungeonCreeps.
public void spawnDungeonCreeps(Location dungeon) {
String info = dungeon.getProperty(PROPS.ENCOUNTER_INFO);
Map<Coordinates, Integer> delayMap = new HashMap<>();
for (String substring : StringMaster.open(info)) {
Coordinates c = new Coordinates(substring.split("")[0]);
int round = StringMaster.getInteger(substring.split("=")[1]);
delayMap.put(c, round);
}
/*
* Assign block per creep group? So a dungeon has a repertoire and map template...
* then we calculate total power...
* First, spawn the 'must have' groups, around entrances and treasures
*/
if (dungeon.isSublevel()) {
} else {
// different alg?
}
// PartyManager.getParty().getTotalPower();
// int power = DungeonMaster.getDungeonPowerTotal(dungeon);
// int maxGroups = dungeon.getIntParam(PARAMS.MAX_GROUPS);
int power = 0;
int preferredPower = dungeon.getLevel() + // + PartyManager.getParty().getPower()
getBattleMaster().getOptionManager().getOptions().getBattleLevel();
int min = preferredPower * 2 / 3;
int max = preferredPower * 3 / 2;
for (MapBlock block : dungeon.getPlan().getBlocks()) {
Wave group;
if (specialEncounters.get(dungeon) != null) {
Map<Coordinates, ObjType> specEncounters = specialEncounters.get(dungeon).get(block);
for (Coordinates c : specEncounters.keySet()) {
ObjType waveType = specEncounters.get(c);
if (waveType.getGroup().equalsIgnoreCase("Substitute")) {
waveType = EncounterMaster.getSubstituteEncounterType(waveType, dungeon.getDungeon(), preferredPower);
}
group = new Wave(waveType, game, new Ref(), game.getPlayer(false));
group.setCoordinates(c);
Integer delay = delayMap.get(c);
// TODO getBattleMaster().getConstructor().scheduleEncounter(group, delay);
// spawnWave(group, true);
// initGroup(group);
power += group.getPower();
}
} else {
// TODO POWER PER BLOCK!
if (!autoSpawnOn) {
continue;
}
// break;
if (!checkSpawnBlock(block)) {
continue;
}
// sort blocks! by spawn priority...
// can be more than 1 group, right? maybe merge?
group = getCreepGroupForBlock(preferredPower, dungeon.getDungeon(), block, min, max);
group.setPreferredPower(preferredPower);
// spawnWave(group, true);
// initGroup(group);
// power -= group.getPower();
power += group.getPower();
}
}
if (power > min) {
// spawn wandering creeps - apart from groups? in max distance from
// them?
}
}
use of main.entity.Ref in project Eidolons by IDemiurge.
the class ArenaSpawner method newWave.
public void newWave(DC_Player player) {
String type = ListChooser.chooseType(DC_TYPE.ENCOUNTERS);
if (type == null) {
return;
}
newWave(new Wave(DataManager.getType(type, DC_TYPE.ENCOUNTERS), game, new Ref(game), player));
}
use of main.entity.Ref in project Eidolons by IDemiurge.
the class GridPanel method onIngameEvent.
private EventCallback onIngameEvent() {
return param -> {
Event event = (Event) param.get();
Ref ref = event.getRef();
boolean caught = false;
if (event.getType() == STANDARD_EVENT_TYPE.EFFECT_HAS_BEEN_APPLIED) {
GuiEventManager.trigger(GuiEventType.EFFECT_APPLIED, event.getRef());
caught = true;
} else if (event.getType() == STANDARD_EVENT_TYPE.UNIT_HAS_CHANGED_FACING || event.getType() == STANDARD_EVENT_TYPE.UNIT_HAS_TURNED_CLOCKWISE || event.getType() == STANDARD_EVENT_TYPE.UNIT_HAS_TURNED_ANTICLOCKWISE) {
BattleFieldObject hero = (BattleFieldObject) ref.getObj(KEYS.TARGET);
// if (hero.isMainHero()) TODO this is an experiment (insane) feature...
// if (hero.isMine()) {
// turnField(event.getType());
// }
BaseView view = viewMap.get(hero);
if (view != null && view instanceof GridUnitView) {
GridUnitView unitView = ((GridUnitView) view);
unitView.updateRotation(hero.getFacing().getDirection().getDegrees());
// SoundController.getCustomEventSound(SOUND_EVENT.UNIT_TURNS, );
if (hero instanceof Unit)
DC_SoundMaster.playTurnSound((Unit) hero);
}
caught = true;
} else if (event.getType() == STANDARD_EVENT_TYPE.UNIT_HAS_FALLEN_UNCONSCIOUS) {
GuiEventManager.trigger(UNIT_GREYED_OUT_ON, ref.getSourceObj());
} else if (event.getType() == STANDARD_EVENT_TYPE.UNIT_HAS_RECOVERED_FROM_UNCONSCIOUSNESS) {
GuiEventManager.trigger(UNIT_GREYED_OUT_OFF, ref.getSourceObj());
} else if (event.getType() == STANDARD_EVENT_TYPE.UNIT_HAS_BEEN_KILLED) {
GuiEventManager.trigger(UNIT_GREYED_OUT_OFF, ref.getSourceObj());
if (!DeathAnim.isOn() || ref.isDebug()) {
GuiEventManager.trigger(DESTROY_UNIT_MODEL, ref.getTargetObj());
}
caught = true;
} else if (event.getType() == STANDARD_EVENT_TYPE.UNIT_BEING_MOVED) {
if (// || AnimMaster.isAnimationOffFor(ref.getSourceObj(), viewMap.get(ref.getSourceObj())))
!MoveAnimation.isOn())
removeUnitView((BattleFieldObject) ref.getSourceObj());
caught = true;
} else if (event.getType() == STANDARD_EVENT_TYPE.UNIT_FINISHED_MOVING) {
if (!MoveAnimation.isOn() || AnimMaster.isAnimationOffFor(ref.getSourceObj(), viewMap.get(ref.getSourceObj())))
moveUnitView((BattleFieldObject) ref.getSourceObj());
caught = true;
} else if (event.getType().name().startsWith("PARAM_BEING_MODIFIED")) {
caught = true;
} else if (event.getType().name().startsWith("PROP_")) {
caught = true;
} else if (event.getType().name().startsWith("ABILITY_")) {
caught = true;
} else if (event.getType().name().startsWith("EFFECT_")) {
caught = true;
} else if (event.getType().name().startsWith("PARAM_MODIFIED")) {
if (GuiEventManager.isParamEventAlwaysFired(event.getType().getArg())) {
UnitView view = (UnitView) getViewMap().get(event.getRef().getSourceObj());
if (view != null)
if (view.isVisible())
if (view.getHpBar() != null)
// if (view.getHpBar( ).getDataSource().canHpBarBeVisible())
view.resetHpBar(new ResourceSourceImpl((BattleFieldObject) event.getRef().getSourceObj()));
}
caught = true;
}
if (!caught) {
/* System.out.println("catch ingame event: " + event.getType() + " in " + event.getRef());
*/
}
};
}
use of main.entity.Ref in project Eidolons by IDemiurge.
the class StringMaster method getInteger.
public static Integer getInteger(String value, Ref ref) {
if (value == null)
return 0;
if (!isInteger(value)) {
return new Formula(value).getInt(ref == null ? new Ref() : ref);
}
if (value.contains(".")) {
value = value.split(Pattern.quote("."))[0];
}
if (isFAST_INTEGER_MODE()) {
int result = 0;
boolean negative = false;
for (int i = 0; i < value.length(); i++) {
char c = value.toCharArray()[i];
if (c == ('.')) {
break;
}
if (c == ('-')) {
negative = true;
} else {
result += getInteger(c) * Math.pow(10, value.length() - i - 1);
}
}
if (negative) {
// for length
result = -result;
}
return result;
} else {
String result = "";
for (char c : value.toCharArray()) {
if (c == ('.')) {
break;
}
if (c == ('-') || Character.isDigit(c)) {
result += c;
}
}
if (!result.isEmpty()) {
return Integer.valueOf(result);
}
}
return 0;
}
Aggregations