feat: add RequestBuilder and test base
This commit is contained in:
parent
588633fe46
commit
bd442bedfc
@ -0,0 +1,139 @@
|
||||
package uulm.teamname.marvelous.gamelibrary.requests;
|
||||
|
||||
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.Entity;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.EntityID;
|
||||
import uulm.teamname.marvelous.gamelibrary.entities.StoneType;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
/**
|
||||
* A class made for building all sorts of {@link Request}s as nicely as possible.
|
||||
* It works by taking .with[KEY]() functions and then building a specific request at the end.
|
||||
*/
|
||||
public class RequestBuilder {
|
||||
private RequestType type;
|
||||
|
||||
// Keys used primarily in GameRequests, but also in others
|
||||
private EntityID targetEntity;
|
||||
private IntVector2 targetField;
|
||||
private Integer value;
|
||||
|
||||
// Keys used primarily in CharacterRequests
|
||||
private EntityID originEntity;
|
||||
private IntVector2 originField;
|
||||
private StoneType stoneType;
|
||||
|
||||
/**
|
||||
* Creates a new {@link RequestBuilder} used for building {@link Request}s.
|
||||
* @param requestType is the type of Event that the final event will have
|
||||
*/
|
||||
public RequestBuilder(RequestType requestType) {
|
||||
this.type = requestType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #RequestBuilder(RequestType)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public RequestBuilder withType(RequestType type) {
|
||||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestBuilder withTargetEntity(EntityID targetEntity) {
|
||||
this.targetEntity = targetEntity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestBuilder withTargetField(IntVector2 targetField) {
|
||||
this.targetField = targetField;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestBuilder withValue(Integer value) {
|
||||
this.value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestBuilder withOriginEntity(EntityID originEntity) {
|
||||
this.originEntity = originEntity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestBuilder withOriginField(IntVector2 originField) {
|
||||
this.originField = originField;
|
||||
return this;
|
||||
}
|
||||
|
||||
public RequestBuilder withStoneType(StoneType stoneType) {
|
||||
this.stoneType = stoneType;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a {@link GameRequest} from the values given to the builder.
|
||||
* <ul>
|
||||
* <li>type is the {@link RequestType} of the {@link GameRequest}.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return a {@link GameRequest} based on the builder
|
||||
*/
|
||||
public GameRequest buildGameRequest() throws IllegalStateException {
|
||||
var gameRequest = new GameRequest();
|
||||
gameRequest.type = this.type;
|
||||
return gameRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an {@link CharacterRequest} from the values given to the builder.
|
||||
* <ul>
|
||||
* <li>type is the {@link RequestType} of the EntityEvent</li>
|
||||
* <li>targetEntity is the target {@link Entity}</li>
|
||||
* <li>targetField is the target field in the form of an {@link IntVector2}</li>
|
||||
* <li>amount is a generic amount, for example damage taken</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return an {@link CharacterRequest} based on the builder
|
||||
*/
|
||||
public CharacterRequest buildCharacterRequest() throws IllegalStateException {
|
||||
var characterRequest = new CharacterRequest();
|
||||
characterRequest.type = this.type;
|
||||
characterRequest.originEntity = this.originEntity;
|
||||
characterRequest.originField = this.originField;
|
||||
characterRequest.targetEntity = this.targetEntity;
|
||||
characterRequest.targetField = this.targetField;
|
||||
characterRequest.value = this.value;
|
||||
characterRequest.stoneType = this.stoneType;
|
||||
return characterRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringJoiner joiner = new StringJoiner("\n");
|
||||
joiner.add("RequestBuilder(all) {");
|
||||
for(Field field: this.getClass().getDeclaredFields()) {
|
||||
try {
|
||||
joiner.add(field.getName() + " = " + field.get(this));
|
||||
}catch(IllegalAccessException ignore) { }
|
||||
}
|
||||
joiner.add("}");
|
||||
return joiner.toString();
|
||||
}
|
||||
|
||||
public String notNullToString() {
|
||||
StringJoiner joiner = new StringJoiner("\n");
|
||||
joiner.add("RequestBuilder(non-null) {");
|
||||
for(Field field: this.getClass().getDeclaredFields()) {
|
||||
try {
|
||||
Object value = field.get(this);
|
||||
if(value != null) {
|
||||
joiner.add(field.getName() + " = " + value);
|
||||
}
|
||||
}catch(IllegalAccessException ignore) { }
|
||||
}
|
||||
joiner.add("}");
|
||||
return joiner.toString();
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package uulm.teamname.marvelous.gamelibrary.gamelogic;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import uulm.teamname.marvelous.gamelibrary.IntVector2;
|
||||
import uulm.teamname.marvelous.gamelibrary.events.Event;
|
||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestBuilder;
|
||||
import uulm.teamname.marvelous.gamelibrary.requests.RequestType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class GameLogicTest {
|
||||
|
||||
@Test
|
||||
void executeRequest() {
|
||||
GameState state = new GameState(new IntVector2(10, 10));
|
||||
//build a nice state (add entities and stuff)
|
||||
ArrayList<Event> result = GameLogic.executeRequest(state, new RequestBuilder(RequestType.MeleeAttackRequest)
|
||||
//build a nice request to check
|
||||
//.withOriginEntity()
|
||||
.buildCharacterRequest());
|
||||
//check if result contains the right events
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildGameStateEvent() {
|
||||
}
|
||||
|
||||
@Test
|
||||
void checkRequest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
void applyEvent() {
|
||||
}
|
||||
|
||||
@Test
|
||||
void checkWinConditions() {
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user