package com.iambookmaster.client.player;
import com.iambookmaster.client.beans.NPC;
import com.iambookmaster.client.locale.AppConstants;
import com.iambookmaster.client.locale.AppMessages;
public abstract class BattleListenerAdapter implements BattleListener {
private static final int ROUND_HERO=0;
private static final int ROUND_FRIEND=1;
private static final int ROUND_ENEMY=2;
private int hero;
private AppConstants appConstants;
private AppMessages appMessages;
private PlayerState playerState;
public BattleListenerAdapter(AppConstants appConstants,AppMessages appMessages, PlayerState playerState) {
this.appConstants = appConstants;
this.appMessages = appMessages;
this.playerState = playerState;
}
public void battleEffort(int attack, int defense, int damage) {
if (playerState.getCurrentBattle().isAttackDefense()) {
addMessage(appMessages.battleEffortAD(attack,defense,damage));
} else {
String whom;
switch (hero) {
case ROUND_ENEMY:
if (attack>defense) {
whom = appConstants.battleDamageToVictim();
} else {
whom = appConstants.battleDamageToNPC();
}
break;
case ROUND_FRIEND:
if (attack>defense) {
whom = appConstants.battleDamageToNPCFromVictim();
} else {
whom = appConstants.battleDamageToVictimFromNPC();
}
break;
default://hero
if (attack>defense) {
whom = appConstants.battleDamageToNPC();
} else {
whom = appConstants.battleDamageToHero();
}
}
addMessage(appMessages.battleEffortAA(attack,defense,damage,whom));
}
}
public void battleEffortDied() {
addMessage(appConstants.battleDied());
}
public void battleEffortKill() {
addMessage(appConstants.battleKill());
}
public void battleFatalStrike() {
addMessage(appConstants.battleFatalStrike());
}
public void battleNoEffort(int attack, int defense) {
if (playerState.getCurrentBattle().isAttackDefense()) {
addMessage(appMessages.battleNoEffortAD(attack,defense));
} else if (hero==ROUND_HERO){
addMessage(appMessages.battleNoEffortAA(attack,defense));
} else {
//hero can defense only
addMessage(appMessages.battleNoEffortAD(attack,defense));
}
}
public void battleFatalStrikeBack() {
addMessage(appConstants.battleFatalStrikeBack());
}
public void heroAttack(NPC npc) {
hero=ROUND_HERO;
addMessage(appMessages.battleHeroAttack(getNPCName(npc,true)));
}
public void heroDefence(NPC npc) {
hero=ROUND_ENEMY;
addMessage(appMessages.battleHeroDefense(getNPCName(npc,false)));
}
private String getNPCName(NPC npc,boolean genitive) {
if (genitive && npc.getGenitiveName() != null) {
return npc.getGenitiveName().replace('<', ' ');
} else {
return npc.getName().replace('<', ' ');
}
}
public void victimAttack(NPC victim, NPC enemy) {
hero=ROUND_FRIEND;
addMessage(appMessages.battleVictimAtack(getNPCName(victim,false),getNPCName(enemy,true)));
}
public void victimDefence(NPC victim, NPC enemy) {
hero=ROUND_ENEMY;
addMessage(appMessages.battleVictimDefence(getNPCName(victim,true),getNPCName(enemy,false)));
}
protected abstract void addMessage(String message);
}