/**
*
*/
package de.urszeidler.eclipse.shr5.gameplay.tests;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import junit.framework.TestCase;
import com.google.common.collect.Collections2;
import de.urszeidler.eclipse.shr5.AbstaktFernKampfwaffe;
import de.urszeidler.eclipse.shr5.Fertigkeit;
import de.urszeidler.eclipse.shr5.FeuerModus;
import de.urszeidler.eclipse.shr5.Feuerwaffe;
import de.urszeidler.eclipse.shr5.PersonaFertigkeit;
import de.urszeidler.eclipse.shr5.Reichweite;
import de.urszeidler.eclipse.shr5.Shr5Factory;
import de.urszeidler.eclipse.shr5.Shr5Package;
import de.urszeidler.eclipse.shr5.gameplay.ProbeMod;
import de.urszeidler.eclipse.shr5.gameplay.util.GameplayTools;
import de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter;
import de.urszeidler.eclipse.shr5.runtime.RuntimePackage;
import de.urszeidler.eclipse.shr5.runtime.Zustand;
/**
* @author urs
*/
public class GameplayToolsTest extends TestCase {
/**
* Test method for
* {@link de.urszeidler.eclipse.shr5.gameplay.util.GameplayTools#getWoundMod(de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter, java.util.List)}
* .
*/
public void testGetWoundMod() {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
character1.setPhysicalDamage(3);
assertEquals(-1, GameplayTools.getWoundMod(character1, null));
character1.setPhysicalDamage(6);
assertEquals(-2, GameplayTools.getWoundMod(character1, null));
character1.setMentalDamage(3);
assertEquals(-3, GameplayTools.getWoundMod(character1, null));
character1.setPhysicalDamage(5);
assertEquals(-2, GameplayTools.getWoundMod(character1, null));
ArrayList<ProbeMod> arrayList = new ArrayList<ProbeMod>();
assertEquals(-2, GameplayTools.getWoundMod(character1, arrayList));
assertEquals(1, arrayList.size());
ProbeMod probeMod = arrayList.get(0);
assertEquals(-2, probeMod.getValue());
assertEquals(character1, probeMod.getType().getEObject());
assertEquals(RuntimePackage.Literals.PHYICAL_STATE__ZUSTAND, probeMod.getType().getEFeature());
assertEquals(0, GameplayTools.getWoundMod(null, null));
}
/**
* Test method for
* {@link de.urszeidler.eclipse.shr5.gameplay.util.GameplayTools#getRangeMod(de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter, de.urszeidler.eclipse.shr5.AbstaktFernKampfwaffe, int, java.util.List)}
* .
*/
public void testGetRangeMod() {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
AbstaktFernKampfwaffe weapon = Shr5Factory.eINSTANCE.createFeuerwaffe();
Reichweite reichweite = Shr5Factory.eINSTANCE.createReichweite();
weapon.setReichweite(reichweite);
reichweite.setMin(0);
reichweite.setKurz(5);
reichweite.setMittel(10);
reichweite.setWeit(15);
reichweite.setExtrem(20);
assertEquals(0, GameplayTools.getRangeMod(character1, weapon, 0, null));
assertEquals(0, GameplayTools.getRangeMod(character1, weapon, 4, null));
assertEquals(-1, GameplayTools.getRangeMod(character1, weapon, 5, null));
assertEquals(-3, GameplayTools.getRangeMod(character1, weapon, 10, null));
assertEquals(-6, GameplayTools.getRangeMod(character1, weapon, 15, null));
assertEquals(Integer.MIN_VALUE, GameplayTools.getRangeMod(character1, weapon, 21, null));
ArrayList<ProbeMod> arrayList = new ArrayList<ProbeMod>();
assertEquals(-6, GameplayTools.getRangeMod(character1, weapon, 15, arrayList));
assertEquals(1, arrayList.size());
ProbeMod probeMod = arrayList.get(0);
assertEquals(-6, probeMod.getValue());
assertEquals(weapon, probeMod.getType().getEObject());
assertEquals(Shr5Package.Literals.ABSTAKT_FERN_KAMPFWAFFE__REICHWEITE, probeMod.getType().getEFeature());
}
public void testDefseMod() throws Exception {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
GameplayTools.inreaseDefenceMod(character1, 1);
assertEquals(1, GameplayTools.getDefenceMod(character1, null));
ArrayList<ProbeMod> arrayList = new ArrayList<ProbeMod>();
assertEquals(1, GameplayTools.getDefenceMod(character1, arrayList));
assertEquals(1, arrayList.size());
ProbeMod probeMod = arrayList.get(0);
assertEquals(1, probeMod.getValue());
assertEquals(character1, probeMod.getType().getEObject());
assertEquals(Shr5Package.Literals.SPEZIELLE_ATTRIBUTE__AUSWEICHEN, probeMod.getType().getEFeature());
GameplayTools.clearDefseMod(character1);
assertEquals(0, GameplayTools.getDefenceMod(character1, arrayList));
GameplayTools.clearDefseMod(null);
assertEquals(0, GameplayTools.getDefenceMod(null, arrayList));
}
public void testGetSkillDicePool() throws Exception {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
Fertigkeit fertigkeit = Shr5Factory.eINSTANCE.createFertigkeit();
fertigkeit.setAttribut(Shr5Package.Literals.KOERPERLICHE_ATTRIBUTE__GESCHICKLICHKEIT);
character1.getCharacter().getPersona().setGeschicklichkeitBasis(5);
assertEquals(4, GameplayTools.getSkillDicePool(fertigkeit, character1));
PersonaFertigkeit personaFertigkeit = Shr5Factory.eINSTANCE.createPersonaFertigkeit();
personaFertigkeit.setFertigkeit(fertigkeit);
personaFertigkeit.setStufe(5);
character1.getCharacter().getPersona().getFertigkeiten().add(personaFertigkeit);
assertEquals(10, GameplayTools.getSkillDicePool(fertigkeit, character1));
}
public void testRecoilMod() throws Exception {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
character1.getCharacter().getPersona().setStaerkeBasis(3);
Feuerwaffe weapon = Shr5Factory.eINSTANCE.createFeuerwaffe();
Reichweite reichweite = Shr5Factory.eINSTANCE.createReichweite();
weapon.setReichweite(reichweite);
weapon.setRueckstoss(-2);
assertEquals(0, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.inceaseRecoilMod(character1, weapon, 1);
assertEquals(-1, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.inceaseRecoilMod(character1, weapon, -1);
assertEquals(0, GameplayTools.getRecoilMod(character1, weapon, null));
weapon.setRueckstoss(-1);
GameplayTools.inceaseRecoilMod(character1, weapon, 1);
assertEquals(0, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.inceaseRecoilMod(character1, weapon, 1);
assertEquals(-1, GameplayTools.getRecoilMod(character1, weapon, null));
character1.getCharacter().getPersona().setStaerkeBasis(5);
assertEquals(-1, GameplayTools.getRecoilMod(character1, weapon, null));
character1.getCharacter().getPersona().setStaerkeBasis(6);
assertEquals(0, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.inceaseRecoilMod(character1, weapon, 1);
assertEquals(-1, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.clearRecoilMod(character1);
assertEquals(-1, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.clearRecoilMod(character1);
assertEquals(0, GameplayTools.getRecoilMod(character1, weapon, null));
GameplayTools.inceaseRecoilMod(character1, weapon, 3);
ArrayList<ProbeMod> arrayList = new ArrayList<ProbeMod>();
assertEquals(-1, GameplayTools.getRecoilMod(character1, weapon, arrayList));
assertEquals(1, arrayList.size());
ProbeMod probeMod = arrayList.get(0);
assertEquals(-1, probeMod.getValue());
assertEquals(character1, probeMod.getType().getEObject());
assertEquals(Shr5Package.Literals.FEUERWAFFE__RUECKSTOSS, probeMod.getType().getEFeature());
}
public void testFireModus() throws Exception {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
character1.getCharacter().getPersona().setStaerkeBasis(3);
Feuerwaffe weapon = Shr5Factory.eINSTANCE.createFeuerwaffe();
Reichweite reichweite = Shr5Factory.eINSTANCE.createReichweite();
weapon.setReichweite(reichweite);
weapon.setRueckstoss(-2);
weapon.getModie().add(FeuerModus.EM);
weapon.getModie().add(FeuerModus.HM);
assertEquals(FeuerModus.EM, GameplayTools.getFireArmModus(character1, weapon));
GameplayTools.setFireModus(character1, weapon, FeuerModus.HM);
assertEquals(FeuerModus.HM, GameplayTools.getFireArmModus(character1, weapon));
}
public void testGetActiveCharacters() throws Exception {
RuntimeCharacter character1 = GameplayTools.createRuntimeCharacter();
RuntimeCharacter character2 = GameplayTools.createRuntimeCharacter();
ArrayList<RuntimeCharacter> arrayList = new ArrayList<RuntimeCharacter>();
arrayList.add(character1);
arrayList.add(character2);
List<RuntimeCharacter> activeCharacters = GameplayTools.getActiveCharacters(arrayList);
assertEquals(2, activeCharacters.size());
character1.setZustand(Zustand.STERBEND);
List<RuntimeCharacter> activeCharacters2 = GameplayTools.getActiveCharacters(arrayList);
assertEquals(1, activeCharacters2.size());
assertEquals(character2, activeCharacters2.get(0));
}
public void testPushTheLimit() throws Exception {
int edgeValue = 100;
List<Integer> rollPushTheLimit = GameplayTools.rollPushTheLimit(edgeValue);
assertTrue(rollPushTheLimit.size()>=edgeValue);
Collection<Integer> filter = Collections2.filter(rollPushTheLimit, new GameplayTools.PushTheLimitPredicate());
assertEquals(filter.size()+edgeValue, rollPushTheLimit.size());
edgeValue = 200;
rollPushTheLimit = GameplayTools.rollPushTheLimit(edgeValue);
assertTrue(rollPushTheLimit.size()>=edgeValue);
filter = Collections2.filter(rollPushTheLimit, new GameplayTools.PushTheLimitPredicate());
assertEquals(filter.size()+edgeValue, rollPushTheLimit.size());
edgeValue = 300;
rollPushTheLimit = GameplayTools.rollPushTheLimit(edgeValue);
assertTrue(rollPushTheLimit.size()>=edgeValue);
filter = Collections2.filter(rollPushTheLimit, new GameplayTools.PushTheLimitPredicate());
assertEquals(filter.size()+edgeValue, rollPushTheLimit.size());
}
}