package com.indignado.logicbricks.systems.sensors;
import com.badlogic.ashley.core.Entity;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.indignado.logicbricks.components.BlackBoardComponent;
import com.indignado.logicbricks.components.IdentityComponent;
import com.indignado.logicbricks.components.RigidBodiesComponents;
import com.indignado.logicbricks.core.CategoryBitsManager;
import com.indignado.logicbricks.core.controllers.ConditionalController;
import com.indignado.logicbricks.core.data.LogicBrick;
import com.indignado.logicbricks.core.data.Property;
import com.indignado.logicbricks.core.sensors.NearSensor;
import com.indignado.logicbricks.systems.sensors.base.ActuatorTest;
import com.indignado.logicbricks.systems.sensors.base.BaseSensorSystemTest;
import com.indignado.logicbricks.utils.Log;
import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder;
import com.indignado.logicbricks.utils.builders.sensors.NearSensorBuilder;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Rubentxu
*/
public class NearSensorSystemTest extends BaseSensorSystemTest<NearSensor, NearSensorSystem> {
IdentityComponent identityPlayer;
IdentityComponent identityGround;
private Body bodyPlayer;
private Body bodyGround;
@Override
public void tearDown() {
player = null;
bodyPlayer = null;
bodyGround = null;
sensor = null;
identityPlayer = null;
}
@Override
protected void createContext() {
// Create Player Entity
CategoryBitsManager categoryBitsManager = new CategoryBitsManager();
entityBuilder.initialize();
identityPlayer = entityBuilder.getComponent(IdentityComponent.class);
identityPlayer.tag = "Player";
bodyPlayer = bodyBuilder
.fixture(bodyBuilder.fixtureDefBuilder()
.boxShape(1, 1)
.restitution(0f))
.position(0, 6)
.mass(1f)
.type(BodyDef.BodyType.DynamicBody)
.build();
RigidBodiesComponents rigidByPlayer = entityBuilder.getComponent(RigidBodiesComponents.class);
rigidByPlayer.rigidBodies.add(bodyPlayer);
sensor =builders.getBrickBuilder(NearSensorBuilder.class)
.setDistance(4)
.setName("sensorPlayer")
.getBrick();
ConditionalController controllerGround =builders.getBrickBuilder(ConditionalControllerBuilder.class)
.setOp(ConditionalController.Op.OP_AND)
.getBrick();
ActuatorTest actuatorTest = new ActuatorTest();
player = entityBuilder
.addController(controllerGround, "Default")
.connectToSensor(sensor)
.connectToActuator(actuatorTest)
.getEntity();
// Create Ground Entity
entityBuilder.initialize();
identityGround = entityBuilder.getComponent(IdentityComponent.class);
identityGround.tag = "Ground";
BlackBoardComponent blackBoardGround = entityBuilder.getComponent(BlackBoardComponent.class);
blackBoardGround.addProperty(new Property("GroundProperty", "Value"));
bodyGround = bodyBuilder
.fixture(bodyBuilder.fixtureDefBuilder()
.boxShape(3, 1)
.restitution(0f))
.position(0, 0)
.mass(1f)
.type(BodyDef.BodyType.StaticBody)
.build();
RigidBodiesComponents rigidByGround = entityBuilder.getComponent(RigidBodiesComponents.class);
rigidByGround.rigidBodies.add(bodyGround);
Entity ground = entityBuilder.getEntity();
engine.addEntity(ground);
}
@Test
public void defaultTest() {
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
}
@Test
public void targetTagTest() {
sensor.targetTag = "Ground";
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
}
@Test
public void targetTagInvalidTest() {
sensor.targetTag = "test";
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void targetPropertyTest() {
sensor.targetPropertyName = "GroundProperty";
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
}
@Test
public void targetPropertyInvalidTest() {
sensor.targetPropertyName = "test";
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void defaultResetDistanceTest() {
sensor.resetDistance = 6;
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void resetDistanceTargetTagTest() {
sensor.targetTag = "Ground";
sensor.resetDistance = 6;
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 90));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void resetDistanceTargetTagInvalidTest() {
sensor.targetTag = "Test";
sensor.resetDistance = 6;
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void resetDistanceTargetPropertyTest() {
sensor.targetPropertyName = "GroundProperty";
sensor.resetDistance = 6;
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void resetDistanceTargetPropertyInvalidTest() {
identityPlayer.collisionMask = (short) identityGround.category;
sensor.targetPropertyName = "Test";
sensor.resetDistance = 6;
engine.addEntity(player);
game.singleStep(1);
Log.debug(tag, "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "B) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
bodyPlayer.setLinearVelocity(new Vector2(0, 80));
game.singleStep(1);
Log.debug(tag, "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
game.singleStep(1);
Log.debug(tag, "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition());
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
}