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.Axis2D; import com.indignado.logicbricks.core.data.LogicBrick; import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.RadarSensor; 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.RadarSensorBuilder; import org.junit.Test; import static org.junit.Assert.*; /** * @author Rubentxu */ public class RadarSensorSystemTest extends BaseSensorSystemTest<RadarSensor, RadarSensorSystem> { 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"; identityPlayer.category = categoryBitsManager.getCategoryBits(identityPlayer.tag); 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(RadarSensorBuilder.class) .setAngle(90) .setAxis(Axis2D.Ynegative) .setDistance(4F) .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"; identityGround.category = categoryBitsManager.getCategoryBits(identityGround.tag); 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 radarAxisYnegativeTest() { identityPlayer.collisionMask = (short) identityGround.category; engine.addEntity(player); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "C) 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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); } @Test public void radarAxisYnegativeTargetTagTest() { identityPlayer.collisionMask = (short) identityGround.category; sensor.targetTag = "Ground"; engine.addEntity(player); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "C) 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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); } @Test public void radarAxisYnegativeTargetTagInvalidTest() { identityPlayer.collisionMask = (short) identityGround.category; sensor.targetTag = "test"; engine.addEntity(player); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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, -1.5F)); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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, 4)); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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, 0)); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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("RadarSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); } @Test public void radarAxisYnegativeTargetPropertyTest() { identityPlayer.collisionMask = (short) identityGround.category; sensor.targetPropertyName = "GroundProperty"; engine.addEntity(player); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "C) 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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); } @Test public void radarAxisYnegativeTargetPropertyInvalidTest() { identityPlayer.collisionMask = (short) identityGround.category; sensor.targetPropertyName = "test"; engine.addEntity(player); game.singleStep(1); Log.debug("RadarSensorSystemTest", "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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "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("RadarSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertEquals(0, sensor.contactList.size); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); } }