package com.spbsu.crawl.bl.crawlSystemView;
import com.spbsu.crawl.bl.events.HeroListener;
import com.spbsu.crawl.data.impl.PlayerInfoMessage;
import com.spbsu.crawl.data.impl.system.EmptyFieldsDefault;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class HeroView extends Subscribable.Stub<HeroListener> implements Subscribable<HeroListener> {
private Updater updater = new Updater();
private int time = 0;
private int turn = 0;
private int currentHealthPoints;
private int totalHealthPoints;
private int currentManaPoints;
private int totalManaPoints;
private int gold;
private int x;
private int y;
private int strength;
private int maxStrength;
private int intelegence;
private int maxIntelegence;
private int dexterity;
private int maxDexterity;
private int armorClass;
private int shieldClass;
private int evasion;
private int experienceLevel;
private int nextExpLevelProgress;
private String level;
private Set<String> statusSet = new HashSet<>();
private Set<String> statusSetLight = new HashSet<>();
private List<PlayerInfoMessage.PlayerStatus> status;
public int healthPoints() {
return currentHealthPoints;
}
public int manaPoints() {
return currentManaPoints;
}
public int gold() {
return gold;
}
public String level() {
return level;
}
public int y() {
return y;
}
public int x() {
return x;
}
public Updater updater() {
return updater;
}
public class Updater {
public void message(final PlayerInfoMessage message) {
updateStats(message);
updatePosition(message);
updateExperience(message);
updateStatus(message);
if (EmptyFieldsDefault.notEmpty(message.turn())) {
time = message.time();
turn = message.turn();
}
}
private void updateStatus(final PlayerInfoMessage message) {
if (message.statuses() != null) {
status = message.statuses();
for (PlayerInfoMessage.PlayerStatus st : status) {
statusSet.add(st.text());
statusSetLight.add(st.lightText());
}
}
}
private void updateStats(final PlayerInfoMessage message) {
if (EmptyFieldsDefault.notEmpty(message.healthPoints())) {
currentHealthPoints = message.healthPoints();
listeners().forEach(heroListener -> heroListener.hp(currentHealthPoints));
}
if (EmptyFieldsDefault.notEmpty(message.maxHealthPoints())) {
totalHealthPoints = message.maxHealthPoints();
}
if (EmptyFieldsDefault.notEmpty(message.maxManaPoints())) {
totalManaPoints = message.maxManaPoints();
}
if (EmptyFieldsDefault.notEmpty(message.manaPoints())) {
currentManaPoints = message.manaPoints();
}
if (EmptyFieldsDefault.notEmpty(message.dexterity())) {
dexterity = message.dexterity();
}
if (EmptyFieldsDefault.notEmpty(message.maxDexterity())) {
maxDexterity = message.dexterity();
}
if (EmptyFieldsDefault.notEmpty(message.strength())) {
strength = message.strength();
}
if (EmptyFieldsDefault.notEmpty(message.maxStrength())) {
maxStrength = message.maxStrength();
}
if (EmptyFieldsDefault.notEmpty(message.intelligence())) {
intelegence = message.intelligence();
}
if (EmptyFieldsDefault.notEmpty(message.maxIntelligence())) {
maxIntelegence = message.maxIntelligence();
}
if (EmptyFieldsDefault.notEmpty(message.evasion())) {
evasion = message.evasion();
}
if (EmptyFieldsDefault.notEmpty(message.shieldClass())) {
shieldClass = message.shieldClass();
}
if (EmptyFieldsDefault.notEmpty(message.armorClass())) {
armorClass = message.armorClass();
}
}
private void updatePosition(final PlayerInfoMessage message) {
if (EmptyFieldsDefault.notEmpty(message.position())) {
x = message.position().x();
y = message.position().y();
listeners().forEach(heroListener -> heroListener.heroPosition(x, y));
}
}
private void updateExperience(final PlayerInfoMessage message) {
if (EmptyFieldsDefault.notEmpty(message.experienceLevel())) {
experienceLevel = message.experienceLevel();
}
if (EmptyFieldsDefault.isEmpty(message.nextExpLevelProgress())) {
nextExpLevelProgress = message.nextExpLevelProgress();
}
}
}
}