package org.pokenet.server.battle.mechanics;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
/**
* This class represents a stat multiplier. Such a multiplier might be instated
* because of a move, but hold items and intrinsic abilities do not use this
* class. They might later, but they don't now.
* @author Colin
*/
@Root
public class StatMultiplier {
/**
* Multipliers used for statistics.
*/
private static final double[] m_stats = new double[] {
4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 2.0/3.0, 0.5, 0.4, 1.0/3.0, 2.0/7.0, 0.25
};
/**
* Multipliers used for accuracy and evasion.
*/
private static final double[] m_acc = new double[] {
3.0, 8.0/3.0, 7.0/3.0, 2.0, 5.0/3.0, 4.0/3.0, 1.0, 0.75, 0.6, 0.5, 3.0/7.0, 3.0/8.0, 1.0/3.0
};
@Element
private int m_position = 6; // Centre of the stat multipliers.
@Element
private double[] m_multipliers;
@Element
private double m_secondary = 1.0;
public StatMultiplier() {
m_multipliers = m_stats;
}
public StatMultiplier(boolean bAccuracy) {
m_multipliers = (bAccuracy ? m_acc : m_stats);
}
public void multiplyBy(double factor) {
m_secondary *= factor;
}
public void divideBy(double factor) {
m_secondary /= factor;
}
public void setSecondaryMultiplier(double m) {
m_secondary = m;
}
public double getSecondaryMultiplier() {
return m_secondary;
}
public double getMultiplier() {
return (m_multipliers[m_position] * m_secondary);
}
public boolean decreaseMultiplier() {
if (m_position == (m_multipliers.length - 1)) return false;
++m_position;
return true;
}
public boolean increaseMultiplier() {
if (m_position == 0) return false;
--m_position;
return true;
}
}