/**
* (c) Urs Zeidler
*/
package de.urszeidler.eclipse.shr5.gameplay.impl;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import de.urszeidler.eclipse.shr5.AbstraktPersona;
import de.urszeidler.eclipse.shr5.gameplay.GameplayPackage;
import de.urszeidler.eclipse.shr5.gameplay.Initative;
import de.urszeidler.eclipse.shr5.gameplay.util.GameplayTools;
import de.urszeidler.shr5.gameplay.dice.IniDice;
/**
* <!-- begin-user-doc -->
* An implementation of the model object '<em><b>Initative</b></em>'.
* <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link de.urszeidler.eclipse.shr5.gameplay.impl.InitativeImpl#getIni <em>Ini</em>}</li>
* <li>{@link de.urszeidler.eclipse.shr5.gameplay.impl.InitativeImpl#getActualIni <em>Actual Ini</em>}</li>
* <li>{@link de.urszeidler.eclipse.shr5.gameplay.impl.InitativeImpl#isSizeInitative <em>Size Initative</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class InitativeImpl extends SubjectCommandImpl implements Initative {
/**
* The default value of the '{@link #getIni() <em>Ini</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getIni()
* @generated
* @ordered
*/
protected static final int INI_EDEFAULT = 0;
/**
* The cached value of the '{@link #getIni() <em>Ini</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getIni()
* @generated
* @ordered
*/
protected int ini = INI_EDEFAULT;
/**
* The default value of the '{@link #getActualIni() <em>Actual Ini</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getActualIni()
* @generated
* @ordered
*/
protected static final int ACTUAL_INI_EDEFAULT = 0;
/**
* The cached value of the '{@link #getActualIni() <em>Actual Ini</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getActualIni()
* @generated
* @ordered
*/
protected int actualIni = ACTUAL_INI_EDEFAULT;
/**
* The default value of the '{@link #isSizeInitative() <em>Size Initative</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isSizeInitative()
* @generated
* @ordered
*/
protected static final boolean SIZE_INITATIVE_EDEFAULT = false;
/**
* The cached value of the '{@link #isSizeInitative() <em>Size Initative</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isSizeInitative()
* @generated
* @ordered
*/
protected boolean sizeInitative = SIZE_INITATIVE_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected InitativeImpl() {
super();
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return GameplayPackage.Literals.INITATIVE;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public int getIni() {
return ini;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setIni(int newIni) {
int oldIni = ini;
ini = newIni;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GameplayPackage.INITATIVE__INI, oldIni, ini));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public int getActualIni() {
return actualIni;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setActualIni(int newActualIni) {
int oldActualIni = actualIni;
actualIni = newActualIni;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GameplayPackage.INITATIVE__ACTUAL_INI, oldActualIni, actualIni));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean isSizeInitative() {
return sizeInitative;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setSizeInitative(boolean newSizeInitative) {
boolean oldSizeInitative = sizeInitative;
sizeInitative = newSizeInitative;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, GameplayPackage.INITATIVE__SIZE_INITATIVE, oldSizeInitative, sizeInitative));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @generated not
*/
public int nextPass(int actualPhase) {
int physicalDamage = subject.getPhysicalDamage() / 3;
int mentalDamage = subject.getMentalDamage() / 3;
int ini1 = ini - (physicalDamage + mentalDamage);
while (ini1 > actualPhase) {
ini1 = ini1 - 10;
}
return ini1;
}
@Override
public boolean isCanExecute() {
return subject != null && subject.getCharacter() != null && subject.getCharacter().getPersona() != null && !executed;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
*/
public void redo() {
if (!isCanExecute())
return;
IniDice iniDice = new IniDice();
AbstraktPersona persona = subject.getCharacter().getPersona();
int initative = persona.getInitative() + GameplayTools.getWoundMod(getSubject(), null);
ini = iniDice.ini(initative, persona.getInitativWuerfel());
executed = true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case GameplayPackage.INITATIVE__INI:
return getIni();
case GameplayPackage.INITATIVE__ACTUAL_INI:
return getActualIni();
case GameplayPackage.INITATIVE__SIZE_INITATIVE:
return isSizeInitative();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case GameplayPackage.INITATIVE__INI:
setIni((Integer)newValue);
return;
case GameplayPackage.INITATIVE__ACTUAL_INI:
setActualIni((Integer)newValue);
return;
case GameplayPackage.INITATIVE__SIZE_INITATIVE:
setSizeInitative((Boolean)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case GameplayPackage.INITATIVE__INI:
setIni(INI_EDEFAULT);
return;
case GameplayPackage.INITATIVE__ACTUAL_INI:
setActualIni(ACTUAL_INI_EDEFAULT);
return;
case GameplayPackage.INITATIVE__SIZE_INITATIVE:
setSizeInitative(SIZE_INITATIVE_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case GameplayPackage.INITATIVE__INI:
return ini != INI_EDEFAULT;
case GameplayPackage.INITATIVE__ACTUAL_INI:
return actualIni != ACTUAL_INI_EDEFAULT;
case GameplayPackage.INITATIVE__SIZE_INITATIVE:
return sizeInitative != SIZE_INITATIVE_EDEFAULT;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException {
switch (operationID) {
case GameplayPackage.INITATIVE___NEXT_PASS__INT:
return nextPass((Integer)arguments.get(0));
}
return super.eInvoke(operationID, arguments);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (ini: ");
result.append(ini);
result.append(", actualIni: ");
result.append(actualIni);
result.append(", sizeInitative: ");
result.append(sizeInitative);
result.append(')');
return result.toString();
}
} // InitativeImpl