package com.indignado.logicbricks.systems.sensors;
import com.indignado.logicbricks.components.IdentityComponent;
import com.indignado.logicbricks.core.controllers.ConditionalController;
import com.indignado.logicbricks.core.data.LogicBrick;
import com.indignado.logicbricks.core.sensors.DelaySensor;
import com.indignado.logicbricks.core.sensors.Sensor;
import com.indignado.logicbricks.systems.sensors.base.ActuatorTest;
import com.indignado.logicbricks.systems.sensors.base.BaseSensorSystemTest;
import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder;
import com.indignado.logicbricks.utils.builders.sensors.DelaySensorBuilder;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Rubentxu
*/
public class DelaySensorSystemTest extends BaseSensorSystemTest<DelaySensor, DelaySensorSystem> {
@Override
public void tearDown() {
player = null;
sensor = null;
}
@Override
protected void createContext() {
// Create Player Entity
entityBuilder.initialize();
IdentityComponent identityPlayer = entityBuilder.getComponent(IdentityComponent.class);
identityPlayer.tag = "Player";
sensor =builders.getBrickBuilder(DelaySensorBuilder.class)
.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();
}
@Test
public void defaultTest() {
engine.addEntity(player);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON);
assertFalse(sensor.positive);
engine.update(1);
assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF);
assertFalse(sensor.positive);
}
@Test
public void delayTest() {
sensor.delay = 1.5f;
engine.addEntity(player);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
}
@Test
public void durationTest() {
sensor.duration = 2f;
engine.addEntity(player);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(0.5f);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(0.21f);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void delayAndDurationTest() {
sensor.delay = 1.5f;
sensor.duration = 1.5f;
engine.addEntity(player);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(0.5f);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(0.5f);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void delayDurationAndPulseModeTrueTest() {
sensor.delay = 1.5f;
sensor.duration = 1.5f;
sensor.pulse = Sensor.Pulse.PM_TRUE.getValue();
engine.addEntity(player);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(0.5f);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(0.5f);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
}
@Test
public void delayDurationAndPulseModeFalseTest() {
sensor.delay = 1.5f;
sensor.duration = 1.5f;
sensor.pulse = Sensor.Pulse.PM_FALSE.getValue();
engine.addEntity(player);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(0.5f);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState);
engine.update(0.5f);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState);
}
}