/**
* Colloid project
*
* Combat log analyzer.
*
* copyright: (c) 2013 by Darek <netmik12 [AT] gmail [DOT] com>
* license: BSD, see LICENSE for more details
*/
package colloid.model.event;
import java.util.Date;
import java.util.EventObject;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import colloid.model.event.Actor;
import colloid.model.event.DoesNotExist;
import colloid.model.event.Target;
import colloid.model.event.Combat;
import colloid.model.event.Fight;
public class CombatEvent extends EventObject implements Combat.Event {
private static final long serialVersionUID = -2692281973951200556L;
protected String logdata;
static final Pattern pattern = Pattern.compile(".*\\((\\d+)(.*)");
protected Combat.Actor actor;
protected Combat.Target target;
protected Effect effect;
protected Fight fight;
protected Date timestamp;
protected Ability ability;
protected double value;
public enum EventType {
HEAL, DAMAGE
}
public CombatEvent(Object source) {
super(source);
timestamp = new Date();
}
public CombatEvent(Object source, String logdata) {
super(source);
timestamp = new Date();
this.logdata = logdata;
try {
actor = new Actor(logdata);
} catch (DoesNotExist e1) {
actor = null;
}
try {
target = new Target(logdata);
} catch (DoesNotExist e) {
target = null;
}
try {
ability = new Ability(this);
} catch (DoesNotExist ex) {
ability = null;
}
try {
effect = new Effect(this);
} catch (DoesNotExist ex) {
effect = null;
}
}
public CombatEvent(Object source, String logdata, Fight fight) {
super(source);
timestamp = new Date();
this.logdata = logdata;
try {
actor = new Actor(logdata);
} catch (DoesNotExist e1) {
actor = null;
}
try {
target = new Target(logdata);
} catch (DoesNotExist e) {
target = null;
}
this.fight = fight;
try {
ability = new Ability(logdata);
} catch (DoesNotExist ex) {
ability = null;
}
}
@Override
public Fight getFight() {
return this.fight;
}
@Override
public void setFight(Fight fight) {
this.fight = fight;
}
@Override
public void add(Combat.Actor actor, Combat.Target target, Combat.Effect effect) {
this.actor = actor;
this.target = target;
this.effect = (Effect) effect;
}
@Override
public void add(Combat.Actor actor, Combat.Effect effect) {
this.actor = actor;
this.target = null;
this.effect = (Effect) effect;
}
public String info() {
return String.format("%s --> %s -> %s",
actor.getName(), target.getName(), value);
}
@Override
public String toString() {
return String.format("CombatEvent [actor=%s, fight=%s, value=%s]",
actor, fight, value);
}
public String getLogdata() {
return logdata;
}
@Override
public double getValue() {
if (Double.isNaN(value) || value == 0) {
value = parseValue(logdata);
}
return value;
}
public static double parseValue(String logdata) {
double result = 0;
String[] data = logdata.substring(1).split("\\]\\s\\[");
try {
Matcher matcher = pattern.matcher(data[4].trim());
if (matcher.matches()) {
String firstGroup = matcher.group(1);
result = Double.parseDouble(firstGroup);
}
} catch (NumberFormatException ex) {
System.out.println(ex);
} catch (IllegalStateException ex) {
System.out.println(ex);
}
return result;
}
void compile(String logdata) {
try {
try {
actor = new Actor(logdata);
} catch (DoesNotExist e1) {
actor = null;
}
try {
target = new Target(logdata);
} catch (DoesNotExist e) {
actor = null;
}
try {
ability = new Ability(logdata);
} catch (DoesNotExist ex) {
ability = null;
}
//effect = data[4];
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
}
public Date getTimestamp() {
return timestamp;
}
public Ability getAbility() {
return ability;
}
public void setAbility(Ability ability) {
this.ability = ability;
}
public Combat.Actor getActor() {
return actor;
}
public Effect getEffect() {
return effect;
}
}