From 4c8417e1d33c9ed099c969e783fb8a3b0b35642d Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Fri, 9 Jan 2015 21:54:56 +0100 Subject: [PATCH 01/11] fix PlayerPlatform --- .../entities/PlayerPlatform.java | 15 +- .../entities/PlayerPlatformTemp.java | 343 ------------------ 2 files changed, 10 insertions(+), 348 deletions(-) delete mode 100644 functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatformTemp.java diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index a39c813..f74b591 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -241,7 +241,7 @@ public Entity createEntity() { /* State Jump/Fall to Change State Idle ---------------------------------------------------------------- ---------------------------------------------------------------------------------- */ DelaySensor delaySensorContactGround = BricksUtils.getBuilder(DelaySensorBuilder.class) - .setDelay(1f) + .setDelay(0.4f) .setDuration(3f) .setPulse(Sensor.Pulse.PM_TRUE) .getBrick(); @@ -275,7 +275,7 @@ public Entity createEntity() { .getBrick(); EditRigidBodyActuator editRigidBodyActuatorIdle = BricksUtils.getBuilder(EditRigidBodyActuatorBuilder.class) - .setFriction(10) + .setFriction(100) .setTargetRigidBody(bodyPlayer) .setName("editRigidBodyActuatorIdle") .getBrick(); @@ -285,9 +285,15 @@ public Entity createEntity() { .setActive(false) .getBrick(); + MotionActuator motionActuatorIdle = BricksUtils.getBuilder(MotionActuatorBuilder.class) + .setVelocity(new Vector2(0, 0)) + .setLimitVelocityX(7) + .setName("motionActuatorWalkingRight") + .getBrick(); + entityBuilder.addController(controllerIdle, "Idle") .connectToSensor(alwaysSensorIdle) - .connectToActuators(editRigidBodyActuatorIdle,pauseIdleEffectActuator); + .connectToActuators(editRigidBodyActuatorIdle,pauseIdleEffectActuator,motionActuatorIdle); /* State Walking ---------------------------------------------------------------- @@ -388,8 +394,7 @@ public Entity createEntity() { .getBrick(); MotionActuator motionActuatorJump = BricksUtils.getBuilder(MotionActuatorBuilder.class) - .setImpulse(new Vector2(0, 7)) - .setLimitVelocityX(7) + .setImpulse(new Vector2(0,8)) .setName("motionActuatorJump") .getBrick(); diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatformTemp.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatformTemp.java deleted file mode 100644 index fe7f72e..0000000 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatformTemp.java +++ /dev/null @@ -1,343 +0,0 @@ -package com.indignado.functional.test.levels.simpleplatform.entities; - -import com.badlogic.ashley.core.Entity; -import com.badlogic.gdx.Input; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.graphics.g2d.Animation; -import com.badlogic.gdx.graphics.g2d.ParticleEffect; -import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; -import com.badlogic.gdx.physics.box2d.BodyDef; -import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.IntMap; -import com.indignado.logicbricks.components.*; -import com.indignado.logicbricks.components.data.AnimationView; -import com.indignado.logicbricks.components.data.ParticleEffectView; -import com.indignado.logicbricks.components.data.Property; -import com.indignado.logicbricks.core.EntityFactory; -import com.indignado.logicbricks.core.World; -import com.indignado.logicbricks.core.actuators.*; -import com.indignado.logicbricks.core.controllers.ConditionalController; -import com.indignado.logicbricks.core.sensors.AlwaysSensor; -import com.indignado.logicbricks.core.sensors.KeyboardSensor; -import com.indignado.logicbricks.core.sensors.Sensor; -import com.indignado.logicbricks.utils.builders.BricksUtils; -import com.indignado.logicbricks.utils.builders.EntityBuilder; -import com.indignado.logicbricks.utils.builders.actuators.CameraActuatorBuilder; -import com.indignado.logicbricks.utils.builders.actuators.EditRigidBodyActuatorBuilder; -import com.indignado.logicbricks.utils.builders.actuators.MotionActuatorBuilder; -import com.indignado.logicbricks.utils.builders.actuators.TextureActuatorBuilder; -import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; -import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.KeyboardSensorBuilder; - -/** - * @author Rubentxu. - */ -public class PlayerPlatformTemp extends EntityFactory { - private String effect = "assets/particles/dust.pfx"; - private String atlas = "assets/animations/sprites.pack"; - - - public PlayerPlatformTemp(World world) { - super(world); - } - - - @Override - public void loadAssets() { - if (!world.getAssetManager().isLoaded(effect)) world.getAssetManager().load(effect, ParticleEffect.class); - if (!world.getAssetManager().isLoaded(atlas)) world.getAssetManager().load(atlas, TextureAtlas.class); - - } - - - @Override - public Entity createEntity() { - OrthographicCamera camera = world.getCamera(); - EntityBuilder entityBuilder = world.getEntityBuilder(); - entityBuilder.initialize(); - - // Assets entity - ParticleEffect dustEffect = world.getAssetManager().get(effect, ParticleEffect.class); - TextureAtlas textureAtlas = world.getAssetManager().get(atlas, TextureAtlas.class); - Array heroWalking = textureAtlas.findRegions("Andando"); - Array heroJump = textureAtlas.findRegions("Saltando"); - Array heroFall = textureAtlas.findRegions("Cayendo"); - Array heroIdle = textureAtlas.findRegions("Parado"); - - Animation walking = new Animation(0.02f, heroWalking, Animation.PlayMode.LOOP); - Animation jump = new Animation(0.02f * 7, heroJump, Animation.PlayMode.NORMAL); - Animation fall = new Animation(0.02f * 5, heroFall, Animation.PlayMode.NORMAL); - Animation idle = new Animation(0.02f * 4, heroIdle, Animation.PlayMode.LOOP); - - // Create General Components - IdentityComponent identity = entityBuilder.getComponent(IdentityComponent.class); - identity.tag = "Player"; - - StateComponent stateComponent = entityBuilder.getComponent(StateComponent.class); - stateComponent.createState("Idle"); - stateComponent.createState("Walking"); - - BlackBoardComponent blackBoardComponent = entityBuilder.getComponent(BlackBoardComponent.class); - blackBoardComponent.addProperty(new Property("isGround", false)); - - Body bodyPlayer = world.getBodyBuilder().fixture(world.getBodyBuilder().fixtureDefBuilder() - .boxShape(0.35f, 1) - .density(1)) - .type(BodyDef.BodyType.DynamicBody) - .fixedRotation() - .position(0, 5) - .mass(1) - .build(); - - RigidBodiesComponents rbc = entityBuilder.getComponent(RigidBodiesComponents.class); - rbc.rigidBodies.add(bodyPlayer); - - - AnimationView playerView = new AnimationView(); - playerView.setHeight(2.3f); - playerView.setWidth(1.8f); - playerView.setAttachedTransform(bodyPlayer.getTransform()); - playerView.animations = new IntMap<>(); - playerView.animations.put(stateComponent.getState("Idle"), idle); - playerView.animations.put(stateComponent.getState("Walking"), walking); - playerView.animations.put(stateComponent.getState("Jump"), jump); - playerView.animations.put(stateComponent.getState("Fall"), fall); - playerView.setLayer(1); - - ParticleEffectView particleEffectView = new ParticleEffectView(); - particleEffectView.setAttachedTransform(bodyPlayer.getTransform()); - particleEffectView.effect = dustEffect; - particleEffectView.setLocalPosition(new Vector2(0, -1)); - particleEffectView.setTint(Color.BLUE); - - ViewsComponent viewsComponent = entityBuilder.getComponent(ViewsComponent.class); - viewsComponent.views.add(playerView); - viewsComponent.views.add(particleEffectView); - - // State Walking - // Create Bricks Walking Right ---------------------------------------------------------------- - KeyboardSensor keyboardSensorWalkingRight = BricksUtils.getBuilder(KeyboardSensorBuilder.class) - .setKeyCode(Input.Keys.D) - .setPulse(Sensor.Pulse.PM_TRUE, Sensor.Pulse.PM_FALSE) - .setName("keyboardSensorWalkingRight") - .getBrick(); - - ConditionalController controllerWalkingRight = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .setName("controllerWalkingRight") - .getBrick(); - - - MotionActuator motionActuatorWalkingRight = BricksUtils.getBuilder(MotionActuatorBuilder.class) - .setImpulse(new Vector2(2, 0)) - .setLimitVelocityX(7) - .getBrick(); - - TextureActuator textureActuatorWalkingRight = BricksUtils.getBuilder(TextureActuatorBuilder.class) - .setFlipX(false) - .setTextureView(playerView) - .getBrick(); - - entityBuilder.addController(controllerWalkingRight, "Idle", "Walking") - .connectToSensor(keyboardSensorWalkingRight) - .connectToActuators(motionActuatorWalkingRight, textureActuatorWalkingRight); - - - // Create Bricks Walking Left ---------------------------------------------------------------- - KeyboardSensor keyboardSensorWalkingLeft = BricksUtils.getBuilder(KeyboardSensorBuilder.class) - .setKeyCode(Input.Keys.A) - .setPulse(Sensor.Pulse.PM_TRUE, Sensor.Pulse.PM_FALSE) - .getBrick(); - - ConditionalController controllerWalkingLeft = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .getBrick(); - - MotionActuator motionActuatorWalkingLeft = BricksUtils.getBuilder(MotionActuatorBuilder.class) - .setImpulse(new Vector2(-2, 0)) - .setLimitVelocityX(7) - .getBrick(); - - TextureActuator textureActuatorWalkingLeft = BricksUtils.getBuilder(TextureActuatorBuilder.class) - .setFlipX(true) - .setTextureView(playerView) - .getBrick(); - - entityBuilder.addController(controllerWalkingLeft, "Idle", "Walking") - .connectToSensor(keyboardSensorWalkingLeft) - .connectToActuators(motionActuatorWalkingLeft, textureActuatorWalkingLeft); - - - // Create Bricks Camera ---------------------------------------------------------------- - AlwaysSensor alwaysSensor = BricksUtils.getBuilder(AlwaysSensorBuilder.class) - .setPulse(Sensor.Pulse.PM_TRUE) - .getBrick(); - - ConditionalController controllerCamera = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .getBrick(); - - CameraActuator cameraActuator = BricksUtils.getBuilder(CameraActuatorBuilder.class) - .setHeight((short) 1) - .setCamera(camera) - .getBrick(); - - entityBuilder.addController(controllerCamera, "Idle", "Walking", "Jump", "Fall") - .connectToSensor(alwaysSensor) - .connectToActuator(cameraActuator); - - - // Create Bricks Idle ---------------------------------------------------------------- - ConditionalController controllerIdle = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_NOR) - .getBrick(); - - EditRigidBodyActuator editRigidBodyActuatorIdle = BricksUtils.getBuilder(EditRigidBodyActuatorBuilder.class) - .setFriction(40) - .setTargetRigidBody(bodyPlayer) - .getBrick(); - - StateActuator stateActuatorIdle = new StateActuator(); - stateActuatorIdle.changeState = stateComponent.getState("Idle"); - - entityBuilder.addController(controllerIdle, "Walking") - .connectToSensors(keyboardSensorWalkingRight, keyboardSensorWalkingLeft) - .connectToActuators(editRigidBodyActuatorIdle, stateActuatorIdle); - - - // Create Bricks Walking ---------------------------------------------------------------- - ConditionalController controllerWalking = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_OR) - .getBrick(); - - EditRigidBodyActuator editRigidBodyActuatorWalking = BricksUtils.getBuilder(EditRigidBodyActuatorBuilder.class) - .setFriction(0.3f) - .setTargetRigidBody(bodyPlayer) - .getBrick(); - - StateActuator stateActuatorWalking = new StateActuator(); - stateActuatorWalking.changeState = stateComponent.getState("Walking"); - - entityBuilder.addController(controllerWalking, "Idle") - .connectToSensors(keyboardSensorWalkingRight, keyboardSensorWalkingLeft) - .connectToActuators(editRigidBodyActuatorWalking, stateActuatorWalking); - - /* // Create Bricks Ground ---------------------------------------------------------------- - CollisionSensor collisionSensorGround = BricksUtils.getBuilder(CollisionSensorBuilder.class) - .setTargetName("Ground") - .getBrick(); - - ConditionalController controllerGround = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .getBrick(); - - PropertyActuator propertyActuatorInGround = BricksUtils.getBuilder(PropertyActuatorBuilder.class) - .setProperty("isGround") - .setValue(true) - .setMode(PropertyActuator.Mode.Assign) - .getBrick(); - - EditRigidBodyActuator editRigidBodyActuatorGround = BricksUtils.getBuilder(EditRigidBodyActuatorBuilder.class) - .setFriction(40) - .setTargetRigidBody(bodyPlayer) - .getBrick(); - - StateActuator stateActuatorIdleGround = new StateActuator(); - stateActuatorWalking.state = stateComponent.getState("Idle"); - - entityBuilder.addController(controllerGround, "Jump") - .connectToSensor(collisionSensorGround) - .connectToActuators(propertyActuatorInGround, editRigidBodyActuatorGround, stateActuatorIdleGround); - - // Create Bricks not Ground ---------------------------------------------------------------- - ConditionalController controllerNotGround = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_NOR) - .getBrick(); - - PropertyActuator propertyActuatorNotInGround = BricksUtils.getBuilder(PropertyActuatorBuilder.class) - .setProperty("isGround") - .setValue(false) - .setMode(PropertyActuator.Mode.Assign) - .getBrick(); - - entityBuilder.addController(controllerNotGround, "Idle", "Walking") - .connectToSensor(collisionSensorGround) - .connectToActuator(propertyActuatorNotInGround); - - - // Create Bricks Jump ---------------------------------------------------------------- - KeyboardSensor keySensorJump = BricksUtils.getBuilder(KeyboardSensorBuilder.class) - .setKeyCode(Input.Keys.W) - .getBrick(); - - PropertySensor propertySensorIsGround = BricksUtils.getBuilder(PropertySensorBuilder.class) - .setProperty("isGround") - .setEvaluationType(PropertySensor.EvaluationType.EQUAL) - .setValue(true) - .getBrick(); - - ConditionalController controllerJump = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .getBrick(); - - - MotionActuator motionActuatorJump = BricksUtils.getBuilder(MotionActuatorBuilder.class) - .setImpulse(new Vector2(0, 3)) - .setLimitVelocityY(7) - .getBrick(); - - StateActuator stateActuatorJump = new StateActuator(); - stateActuatorWalking.state = stateComponent.getState("Jump"); - - entityBuilder.addController(controllerJump, "Idle", "Walking") - .connectToSensors(keySensorJump, propertySensorIsGround) - .connectToActuator(motionActuatorJump); - - - // Effect On - *//*TimerSensor timerEffectOn = BricksUtils.getBuilder(TimerSensorBuilder.class) - .setRepeat(true) - .getBrick();*//* - - ConditionalController controllerEffectOn = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .getBrick(); - - - EffectActuator effectActuatorOn = BricksUtils.getBuilder(EffectActuatorBuilder.class) - .setActive(false) - .setEffectView(particleEffectView) - .getBrick(); - - *//* entityBuilder.addController(controllerEffectOn, "Walking") - .connectToSensor(timerEffectOn) - .connectToActuator(effectActuatorOn);*//* - - // Effect Off - *//*TimerSensor timerEffectOff = BricksUtils.getBuilder(TimerSensorBuilder.class) - .setRepeat(true) - .getBrick(); -*//* - ConditionalController controllerEffectOff = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .getBrick(); - - EffectActuator effectActuatorOff = BricksUtils.getBuilder(EffectActuatorBuilder.class) - .setActive(true) - .setEffectView(particleEffectView) - .getBrick(); - - *//*entityBuilder.addController(controllerEffectOff, "Idle") - .connectToSensor(timerEffectOff) - .connectToActuator(effectActuatorOff);*/ - - - return entityBuilder.getEntity(); - - } - -} From e6ec1d64037c4b0d7df5d8dcdf6f59fc052f6388 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Sat, 10 Jan 2015 06:58:36 +0100 Subject: [PATCH 02/11] ajustes en CollisionSensor y creado nuevo sensor 'RadarSensor' --- .../sensors/CollisionSensorComponent.java | 2 - .../sensors/KeyboardSensorComponent.java | 2 - .../sensors/MessageSensorComponent.java | 2 - .../sensors/MouseSensorComponent.java | 2 - .../sensors/RadarSensorComponent.java | 10 ++ .../com/indignado/logicbricks/core/World.java | 48 +++++- .../core/sensors/CollisionSensor.java | 5 +- .../logicbricks/core/sensors/RadarSensor.java | 37 ++++ .../sensors/CollisionSensorSystem.java | 70 ++++---- .../systems/sensors/RadarSensorSystem.java | 163 ++++++++++++++++++ .../sensors/CollisionSensorSystemTest.java | 8 +- 11 files changed, 299 insertions(+), 50 deletions(-) create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RadarSensorComponent.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/CollisionSensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/CollisionSensorComponent.java index 71124bc..2d65c15 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/CollisionSensorComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/CollisionSensorComponent.java @@ -3,8 +3,6 @@ import com.indignado.logicbricks.core.sensors.CollisionSensor; /** - * Created on 05/11/14. - * * @author Rubentxu */ public class CollisionSensorComponent extends SensorComponent { diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/KeyboardSensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/KeyboardSensorComponent.java index d3e3e95..7d0ec37 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/KeyboardSensorComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/KeyboardSensorComponent.java @@ -3,8 +3,6 @@ import com.indignado.logicbricks.core.sensors.KeyboardSensor; /** - * Created on 05/11/14. - * * @author Rubentxu */ public class KeyboardSensorComponent extends SensorComponent { diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MessageSensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MessageSensorComponent.java index afd06c7..940ddaf 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MessageSensorComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MessageSensorComponent.java @@ -3,8 +3,6 @@ import com.indignado.logicbricks.core.sensors.MessageSensor; /** - * Created on 05/11/14. - * * @author Rubentxu */ public class MessageSensorComponent extends SensorComponent { diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MouseSensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MouseSensorComponent.java index 9aadf3f..4c38e8a 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MouseSensorComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/MouseSensorComponent.java @@ -3,8 +3,6 @@ import com.indignado.logicbricks.core.sensors.MouseSensor; /** - * Created on 05/11/14. - * * @author Rubentxu */ public class MouseSensorComponent extends SensorComponent { diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RadarSensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RadarSensorComponent.java new file mode 100644 index 0000000..06f9512 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RadarSensorComponent.java @@ -0,0 +1,10 @@ +package com.indignado.logicbricks.components.sensors; + +import com.indignado.logicbricks.core.sensors.RadarSensor; + +/** + * @author Rubentxu + */ +public class RadarSensorComponent extends SensorComponent { + +} diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java index 802fdb5..c751fc7 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java @@ -9,7 +9,7 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectMap; @@ -28,7 +28,7 @@ /** * @author Rubentxu. */ -public class World implements Disposable { +public class World implements Disposable, ContactListener { private static int levelIndex = 0; private final AssetManager assetManager; private final com.badlogic.gdx.physics.box2d.World physics; @@ -75,7 +75,7 @@ public World(com.badlogic.gdx.physics.box2d.World physics, AssetManager assetMan input.addProcessor(engine.getSystem(KeyboardSensorSystem.class)); input.addProcessor(engine.getSystem(MouseSensorSystem.class)); Gdx.input.setInputProcessor(input); - physics.setContactListener(engine.getSystem(CollisionSensorSystem.class)); + physics.setContactListener(this); entityBuilder = new EntityBuilder(engine); bodyBuilder = new BodyBuilder(physics); @@ -244,7 +244,49 @@ public CategoryBitsManager getCategoryBitsManager() { } + public SpriteBatch getBatch() { return batch; } + + + @Override + public void beginContact(Contact contact) { + CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); + if(css != null) { + css.beginContact(contact); + } + + } + + + @Override + public void endContact(Contact contact) { + CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); + if(css != null) { + css.endContact(contact); + } + + } + + + @Override + public void preSolve(Contact contact, Manifold oldManifold) { + CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); + if(css != null) { + css.preSolve(contact,oldManifold); + } + + } + + + @Override + public void postSolve(Contact contact, ContactImpulse impulse) { + CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); + if(css != null) { + css.postSolve(contact,impulse); + } + + } + } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/CollisionSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/CollisionSensor.java index 9630de2..5c90d34 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/CollisionSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/CollisionSensor.java @@ -1,6 +1,7 @@ package com.indignado.logicbricks.core.sensors; import com.badlogic.gdx.physics.box2d.Contact; +import com.badlogic.gdx.utils.ObjectSet; /** * @author Rubentxu @@ -11,14 +12,14 @@ public class CollisionSensor extends Sensor { public String targetTag; // Signal Values - public Contact contact; + public ObjectSet contactList = new ObjectSet(); @Override public void reset() { super.reset(); targetTag = null; - contact = null; + contactList.clear(); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java new file mode 100644 index 0000000..2d8e3e8 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java @@ -0,0 +1,37 @@ +package com.indignado.logicbricks.core.sensors; + +import com.badlogic.gdx.physics.box2d.Contact; +import com.badlogic.gdx.utils.ObjectSet; + + +/** + * @author Rubentxu + */ +public class RadarSensor extends Sensor { + + public enum Axis { Xpositive, Xnegative, Ypositive, Ynegative } + + // Config Values + public String targetTag; + public String propertyName; + public Axis axis; + public float angle = 0; + public float distance = 0; + + // Signal Values + public ObjectSet contactList = new ObjectSet(); + + + @Override + public void reset() { + super.reset(); + targetTag = null; + propertyName = null; + axis = null; + angle = 0; + distance = 0; + contactList.clear(); + + } + +} \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java index 4acce5c..d6be72e 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java @@ -10,9 +10,12 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; +import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.sensors.CollisionSensorComponent; +import com.indignado.logicbricks.components.sensors.RadarSensorComponent; import com.indignado.logicbricks.core.LogicBricksEngine; import com.indignado.logicbricks.core.sensors.CollisionSensor; +import com.indignado.logicbricks.core.sensors.RadarSensor; import com.indignado.logicbricks.utils.Log; /** @@ -20,7 +23,6 @@ */ public class CollisionSensorSystem extends SensorSystem implements ContactListener, EntityListener { private final ObjectSet collisionSensors; - private LogicBricksEngine engine; private Array collisionsRules; @@ -40,9 +42,9 @@ public void addCollisionRule(ContactListener collisionRule) { @Override public boolean query(CollisionSensor sensor, float deltaTime) { - if (sensor.contact != null) { - Log.debug(tag, "sensor contact %b", sensor.contact.isTouching()); - return sensor.contact.isTouching(); + for (Contact contact : sensor.contactList) { + Log.debug(tag, "sensor contact %b", contact.isTouching()); + if(contact.isTouching()) return true; } return false; @@ -56,7 +58,14 @@ public void beginContact(Contact contact) { rule.beginContact(contact); } } - processContact(contact); + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + + if(collisionSensors.size > 0) { + processContactCollisionSensors(entityA, contact, true); + processContactCollisionSensors(entityB, contact, true); + + } } @@ -69,7 +78,14 @@ public void endContact(Contact contact) { rule.endContact(contact); } } - processContact(contact); + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + + if(collisionSensors.size > 0) { + processContactCollisionSensors(entityA, contact, false); + processContactCollisionSensors(entityB, contact, false); + + } } @@ -93,18 +109,12 @@ public void postSolve(Contact contact, ContactImpulse impulse) { } } - - private void processContact(Contact contact) { - Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - - for (CollisionSensor collisionSensor : collisionSensors) { - Array targetEntities = engine.getEntities(collisionSensor.targetTag); - - if (targetEntities.contains(entityA, false) || targetEntities.contains(entityB, false)) { - collisionSensor.contact = contact; - Log.debug(tag, "Process Contac %b entityA %s entityB %s sensor register size %d", contact.isTouching() - , entityA.getId(), entityB.getId(), collisionSensors.size); + private void processContactCollisionSensors(Entity entity, Contact contact, boolean addMode) { + IdentityComponent identityA = entity.getComponent(IdentityComponent.class); + for (CollisionSensor sensor : collisionSensors) { + if (identityA.tag.equals(sensor.targetTag)) { + if(addMode) sensor.contactList.add(contact); + else sensor.contactList.remove(contact); } } @@ -112,35 +122,29 @@ private void processContact(Contact contact) { @Override - public void addedToEngine(Engine engine) { - super.addedToEngine(engine); - this.engine = (LogicBricksEngine) engine; + public void entityAdded(Entity entity) { + Log.debug(tag, "EntityAdded add collisionSensors"); + sensorsHandler(entity,true); } @Override - public void entityAdded(Entity entity) { - Log.debug(tag, "EntityAdded"); - CollisionSensorComponent collisionSensorComponent = entity.getComponent(CollisionSensorComponent.class); - if (collisionSensorComponent != null) { - IntMap.Values> values = collisionSensorComponent.sensors.values(); - while (values.hasNext()) { - collisionSensors.addAll(values.next()); - } - } + public void entityRemoved(Entity entity) { + Log.debug(tag, "EntityAdded remove collisionSensors"); + sensorsHandler(entity,false); } - @Override - public void entityRemoved(Entity entity) { + public void sensorsHandler(Entity entity, boolean addMode) { CollisionSensorComponent collisionSensorComponent = entity.getComponent(CollisionSensorComponent.class); if (collisionSensorComponent != null) { IntMap.Values> values = collisionSensorComponent.sensors.values(); while (values.hasNext()) { for (CollisionSensor sensor : values.next()) { - collisionSensors.remove(sensor); + if (addMode) collisionSensors.add(sensor); + else collisionSensors.remove(sensor); } } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java new file mode 100644 index 0000000..69a683c --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -0,0 +1,163 @@ +package com.indignado.logicbricks.systems.sensors; + +import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntityListener; +import com.badlogic.gdx.physics.box2d.Contact; +import com.badlogic.gdx.physics.box2d.ContactImpulse; +import com.badlogic.gdx.physics.box2d.ContactListener; +import com.badlogic.gdx.physics.box2d.Manifold; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.IntMap; +import com.badlogic.gdx.utils.ObjectSet; +import com.indignado.logicbricks.components.BlackBoardComponent; +import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.components.sensors.RadarSensorComponent; +import com.indignado.logicbricks.core.LogicBricksEngine; +import com.indignado.logicbricks.core.sensors.RadarSensor; +import com.indignado.logicbricks.utils.Log; + +/** + * @author Rubentxu + */ +public class RadarSensorSystem extends SensorSystem implements ContactListener, EntityListener { + private final ObjectSet radarSensorsTargetProperty; + private final ObjectSet radarSensorsTargetTag; + + + public RadarSensorSystem() { + super(RadarSensorComponent.class); + radarSensorsTargetProperty = new ObjectSet(); + radarSensorsTargetTag = new ObjectSet(); + + } + + + + @Override + public boolean query(RadarSensor sensor, float deltaTime) { + for (Contact contact : sensor.contactList) { + Log.debug(tag, "sensor contact %b", contact.isTouching()); + if(contact.isTouching()) return true; + } + return false; + + } + + + @Override + public void beginContact(Contact contact) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + + if(radarSensorsTargetProperty.size > 0) { + processRadarSensorsTargetProperty(entityA,contact,true); + processRadarSensorsTargetProperty(entityB,contact,true); + + } + + if(radarSensorsTargetTag.size > 0) { + processRadarSensorsTargetTag(entityA,contact,true); + processRadarSensorsTargetTag(entityB,contact,true); + + } + + } + + + @Override + public void endContact(Contact contact) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + + if(radarSensorsTargetProperty.size > 0) { + processRadarSensorsTargetProperty(entityA,contact,false); + processRadarSensorsTargetProperty(entityB,contact,false); + + } + + if(radarSensorsTargetTag.size > 0) { + processRadarSensorsTargetTag(entityA,contact,false); + processRadarSensorsTargetTag(entityB,contact,false); + + } + + } + + + @Override + public void preSolve(Contact contact, Manifold oldManifold) { + + } + + + @Override + public void postSolve(Contact contact, ContactImpulse impulse) { + + } + + + private void processRadarSensorsTargetProperty(Entity entity,Contact contact, boolean addMode) { + BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); + if(blackBoard != null) { + for (RadarSensor radarSensor : radarSensorsTargetProperty) { + if(blackBoard.hasProperty(radarSensor.propertyName)) { + if(addMode) radarSensor.contactList.add(contact); + else radarSensor.contactList.remove(contact); + + } + + } + } + + } + + + private void processRadarSensorsTargetTag(Entity entity, Contact contact, boolean addMode) { + IdentityComponent identityA = entity.getComponent(IdentityComponent.class); + for (RadarSensor radarSensor : radarSensorsTargetTag) { + if (identityA.tag.equals(radarSensor.targetTag)) { + if(addMode) radarSensor.contactList.add(contact); + else radarSensor.contactList.remove(contact); + } + } + + } + + + @Override + public void entityAdded(Entity entity) { + Log.debug(tag, "EntityAdded add radarSensors"); + sensorsHandler(entity,true); + + } + + + @Override + public void entityRemoved(Entity entity) { + Log.debug(tag, "EntityRemove remove radarSensors"); + sensorsHandler(entity,false); + + } + + + public void sensorsHandler(Entity entity, boolean addMode) { + RadarSensorComponent radarSensorComponent = entity.getComponent(RadarSensorComponent.class); + if (radarSensorComponent != null) { + IntMap.Values> values = radarSensorComponent.sensors.values(); + while (values.hasNext()) { + for (RadarSensor sensor : values.next()) { + if(sensor.targetTag != null) { + if(addMode) radarSensorsTargetTag.add(sensor); + else radarSensorsTargetTag.remove(sensor); + } + if(sensor.propertyName != null) { + if(addMode) radarSensorsTargetProperty.add(sensor); + else radarSensorsTargetProperty.remove(sensor); + } + } + } + } + } + +} diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java index b85999a..6ba0811 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java @@ -140,7 +140,7 @@ public void bodyCollidesBodyTest() { physic.step(1, 8, 3); engine.update(1); - assertTrue(sensor.contact.isTouching()); + assertTrue(sensor.contactList.first().isTouching()); assertTrue(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); @@ -156,7 +156,7 @@ public void filterTest() { physic.step(1, 8, 3); engine.update(1); - assertNull(sensor.contact); + assertEquals(0, sensor.contactList.size); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -171,7 +171,7 @@ public void endBodyCollisionTest() { physic.step(1, 8, 3); engine.update(1); - assertTrue(sensor.contact.isTouching()); + assertTrue(sensor.contactList.first().isTouching()); assertTrue(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); @@ -184,7 +184,7 @@ public void endBodyCollisionTest() { System.out.println("Body position3: " + bodyPlayer.getPosition()); System.out.println("Body position4: " + bodyPlayer.getPosition()); - assertFalse(sensor.contact.isTouching()); + assertEquals(0,sensor.contactList.size); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); From 2987dfe6e9f722f980e690b4b38fd7e2f6ada2d0 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Sat, 10 Jan 2015 08:18:50 +0100 Subject: [PATCH 03/11] implementando RadarSensorSystem --- .../systems/sensors/RadarSensorSystem.java | 116 +++++------ .../builders/sensors/RadarSensorBuilder.java | 24 +++ .../sensors/RadarSensorSystemTest.java | 195 ++++++++++++++++++ 3 files changed, 272 insertions(+), 63 deletions(-) create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java create mode 100644 gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 69a683c..8ecec06 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -1,44 +1,40 @@ package com.indignado.logicbricks.systems.sensors; -import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntityListener; -import com.badlogic.gdx.physics.box2d.Contact; -import com.badlogic.gdx.physics.box2d.ContactImpulse; -import com.badlogic.gdx.physics.box2d.ContactListener; -import com.badlogic.gdx.physics.box2d.Manifold; -import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.components.sensors.RadarSensorComponent; -import com.indignado.logicbricks.core.LogicBricksEngine; +import com.indignado.logicbricks.core.LogicBricksException; +import com.indignado.logicbricks.core.World; import com.indignado.logicbricks.core.sensors.RadarSensor; import com.indignado.logicbricks.utils.Log; +import com.indignado.logicbricks.utils.builders.FixtureDefBuilder; /** * @author Rubentxu */ public class RadarSensorSystem extends SensorSystem implements ContactListener, EntityListener { - private final ObjectSet radarSensorsTargetProperty; - private final ObjectSet radarSensorsTargetTag; - + private final ObjectSet radarSensors; public RadarSensorSystem() { super(RadarSensorComponent.class); - radarSensorsTargetProperty = new ObjectSet(); - radarSensorsTargetTag = new ObjectSet(); + radarSensors = new ObjectSet(); } - @Override public boolean query(RadarSensor sensor, float deltaTime) { for (Contact contact : sensor.contactList) { Log.debug(tag, "sensor contact %b", contact.isTouching()); - if(contact.isTouching()) return true; + if (contact.isTouching()) return true; } return false; @@ -50,17 +46,8 @@ public void beginContact(Contact contact) { Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - if(radarSensorsTargetProperty.size > 0) { - processRadarSensorsTargetProperty(entityA,contact,true); - processRadarSensorsTargetProperty(entityB,contact,true); - - } - - if(radarSensorsTargetTag.size > 0) { - processRadarSensorsTargetTag(entityA,contact,true); - processRadarSensorsTargetTag(entityB,contact,true); - - } + processRadarSensors(entityA, contact, true); + processRadarSensors(entityB, contact, true); } @@ -70,17 +57,8 @@ public void endContact(Contact contact) { Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - if(radarSensorsTargetProperty.size > 0) { - processRadarSensorsTargetProperty(entityA,contact,false); - processRadarSensorsTargetProperty(entityB,contact,false); - - } - - if(radarSensorsTargetTag.size > 0) { - processRadarSensorsTargetTag(entityA,contact,false); - processRadarSensorsTargetTag(entityB,contact,false); - - } + processRadarSensors(entityA, contact, false); + processRadarSensors(entityB, contact, false); } @@ -97,38 +75,31 @@ public void postSolve(Contact contact, ContactImpulse impulse) { } - private void processRadarSensorsTargetProperty(Entity entity,Contact contact, boolean addMode) { + private void processRadarSensors(Entity entity, Contact contact, boolean addMode) { BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); - if(blackBoard != null) { - for (RadarSensor radarSensor : radarSensorsTargetProperty) { - if(blackBoard.hasProperty(radarSensor.propertyName)) { - if(addMode) radarSensor.contactList.add(contact); - else radarSensor.contactList.remove(contact); + IdentityComponent identityA = entity.getComponent(IdentityComponent.class); - } + for (RadarSensor radarSensor : radarSensors) { + if (blackBoard != null && radarSensor.propertyName != null && blackBoard.hasProperty(radarSensor.propertyName)) { + if (addMode) radarSensor.contactList.add(contact); + else radarSensor.contactList.remove(contact); } - } - - } - - - private void processRadarSensorsTargetTag(Entity entity, Contact contact, boolean addMode) { - IdentityComponent identityA = entity.getComponent(IdentityComponent.class); - for (RadarSensor radarSensor : radarSensorsTargetTag) { - if (identityA.tag.equals(radarSensor.targetTag)) { - if(addMode) radarSensor.contactList.add(contact); + if (radarSensor.targetTag != null && identityA.tag.equals(radarSensor.targetTag)) { + if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); } } + } @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add radarSensors"); - sensorsHandler(entity,true); + sensorsHandler(entity, true); + createRadar(entity); } @@ -136,24 +107,43 @@ public void entityAdded(Entity entity) { @Override public void entityRemoved(Entity entity) { Log.debug(tag, "EntityRemove remove radarSensors"); - sensorsHandler(entity,false); + sensorsHandler(entity, false); } - public void sensorsHandler(Entity entity, boolean addMode) { + private void createRadar(Entity entity) { + RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); + if (rigidBodiesComponent == null) + throw new LogicBricksException(tag, "Failed to create radar sensor, there is no rigidBody"); + Body body = rigidBodiesComponent.rigidBodies.first(); + FixtureDefBuilder fixtureBuilder = new FixtureDefBuilder(); + for (RadarSensor sensor : radarSensors) { + Vector2[] vertices = new Vector2[8]; + for (int i = 0; i < 7; i++) { + float angle = (float) (i / 6.0 * sensor.angle * MathUtils.degreesToRadians); + vertices[i + 1].set(sensor.distance * MathUtils.cos(angle), sensor.distance * MathUtils.sin(angle)); + } + FixtureDef radarFixture = fixtureBuilder + .polygonShape(vertices) + .sensor() + .build(); + body.createFixture(radarFixture); + + } + + } + + + private void sensorsHandler(Entity entity, boolean addMode) { RadarSensorComponent radarSensorComponent = entity.getComponent(RadarSensorComponent.class); if (radarSensorComponent != null) { IntMap.Values> values = radarSensorComponent.sensors.values(); while (values.hasNext()) { for (RadarSensor sensor : values.next()) { - if(sensor.targetTag != null) { - if(addMode) radarSensorsTargetTag.add(sensor); - else radarSensorsTargetTag.remove(sensor); - } - if(sensor.propertyName != null) { - if(addMode) radarSensorsTargetProperty.add(sensor); - else radarSensorsTargetProperty.remove(sensor); + if (sensor.targetTag != null || sensor.propertyName != null) { + if (addMode) radarSensors.add(sensor); + else radarSensors.remove(sensor); } } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java new file mode 100644 index 0000000..8e65457 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java @@ -0,0 +1,24 @@ +package com.indignado.logicbricks.utils.builders.sensors; + +import com.indignado.logicbricks.core.sensors.AlwaysSensor; + +/** + * @author Rubentxu. + */ +public class RadarSensorBuilder extends SensorBuilder { + + public RadarSensorBuilder() { + brick = new AlwaysSensor(); + + } + + + @Override + public AlwaysSensor getBrick() { + AlwaysSensor brickTemp = brick; + brick = new AlwaysSensor(); + return brickTemp; + + } + +} diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java new file mode 100644 index 0000000..47ca970 --- /dev/null +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -0,0 +1,195 @@ +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.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.utils.GdxNativesLoader; +import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.components.RigidBodiesComponents; +import com.indignado.logicbricks.core.CategoryBitsManager; +import com.indignado.logicbricks.core.LogicBrick; +import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.sensors.CollisionSensor; +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.builders.BodyBuilder; +import com.indignado.logicbricks.utils.builders.BricksUtils; +import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; +import com.indignado.logicbricks.utils.builders.sensors.CollisionSensorBuilder; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * @author Rubentxu + */ +public class RadarSensorSystemTest extends BaseSensorSystemTest { + RadarSensor sensor; + IdentityComponent identityPlayer; + IdentityComponent identityGround; + private World physic; + private Entity ground; + private Body bodyPlayer; + private Body bodyGround; + private RigidBodiesComponents rigidByPlayer; + private RigidBodiesComponents rigidByGround; + private CategoryBitsManager categoryBitsManager; + private BodyBuilder bodyBuilder; + + + public RadarSensorSystemTest() { + super(); + sensorSystem = new RadarSensorSystem(); + engine.addSystem(sensorSystem); + engine.addEntityListener(sensorSystem); + GdxNativesLoader.load(); + physic = new World(new Vector2(0, -9.81f), true); + physic.setContactListener(sensorSystem); + bodyBuilder = new BodyBuilder(physic); + + + } + + + @Override + public void tearDown() { + player = null; + ground = null; + bodyPlayer = null; + bodyGround = null; + rigidByPlayer = null; + rigidByGround = null; + sensor = null; + identityPlayer = null; + + } + + @Override + protected void createContext() { + // Create Player Entity + this.categoryBitsManager = new CategoryBitsManager(); + entityBuilder.initialize(); + identityPlayer = entityBuilder.getComponent(IdentityComponent.class); + identityPlayer.tag = "Player"; + identityPlayer.category = categoryBitsManager.getCategoryBits(identityPlayer.tag); + + + bodyPlayer = bodyBuilder + .fixture(bodyBuilder.fixtureDefBuilder() + .circleShape(1) + .restitution(0f)) + .position(40, 23) + .mass(1f) + .type(BodyDef.BodyType.DynamicBody) + .build(); + + rigidByPlayer = entityBuilder.getComponent(RigidBodiesComponents.class); + rigidByPlayer.rigidBodies.add(bodyPlayer); + + sensor = BricksUtils.getBuilder(RadarSensorBuilder.class) + .setTargetName("Ground") + .setName("sensorPlayer") + .getBrick(); + + ConditionalController controllerGround = BricksUtils.getBuilder(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); + + + bodyGround = bodyBuilder + .fixture(bodyBuilder.fixtureDefBuilder() + .boxShape(5, 1) + .restitution(0f)) + .position(40, 20) + .mass(1f) + .type(BodyDef.BodyType.StaticBody) + .build(); + + rigidByGround = entityBuilder.getComponent(RigidBodiesComponents.class); + rigidByGround.rigidBodies.add(bodyGround); + + ground = entityBuilder.getEntity(); + engine.addEntity(ground); + + } + + + @Test + public void bodyCollidesBodyTest() { + identityPlayer.collisionMask = (short) identityGround.category; + engine.addEntity(player); + + engine.update(1); + physic.step(1, 8, 3); + engine.update(1); + + assertTrue(sensor.contactList.first().isTouching()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + } + + + @Test + public void filterTest() { + identityPlayer.collisionMask = (short) ~identityGround.category; + engine.addEntity(player); + + engine.update(1); + physic.step(1, 8, 3); + engine.update(1); + + assertEquals(0, sensor.contactList.size); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + } + + + @Test + public void endBodyCollisionTest() { + engine.addEntity(player); + + engine.update(1); + physic.step(1, 8, 3); + engine.update(1); + + assertTrue(sensor.contactList.first().isTouching()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + bodyPlayer.applyForce(0, 60, bodyPlayer.getWorldCenter().x, bodyPlayer.getWorldCenter().y, true); + + physic.step(1f, 8, 3); + engine.update(1); + physic.step(1f, 8, 3); + engine.update(1); + System.out.println("Body position3: " + bodyPlayer.getPosition()); + + System.out.println("Body position4: " + bodyPlayer.getPosition()); + assertEquals(0,sensor.contactList.size); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + } + + +} From eb90cb84b708fbf18405d294fbcf37fb82552dde Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Sat, 10 Jan 2015 08:19:14 +0100 Subject: [PATCH 04/11] implementando RadarSensorSystem --- .../functional/test/base/LogicBricksTest.java | 2 +- .../levels/flyingDart/FlyingDartLevel.java | 1 - .../flyingDart/MousePositionScript.java | 1 - .../flyingDart/entities/TriggerDart.java | 4 ---- .../entities/PlayerPlatform.java | 17 +++++++------ .../components/StateComponent.java | 5 ++-- .../core/LogicBricksException.java | 2 +- .../com/indignado/logicbricks/core/World.java | 12 +++++----- .../logicbricks/core/sensors/MouseSensor.java | 2 +- .../logicbricks/core/sensors/RadarSensor.java | 7 +++--- .../logicbricks/systems/RenderingSystem.java | 4 ++-- .../logicbricks/systems/StateSystem.java | 4 ++-- .../systems/actuators/ActuatorSystem.java | 10 ++++---- .../actuators/CameraActuatorSystem.java | 1 - .../actuators/EffectActuatorSystem.java | 6 ++--- .../actuators/MessageActuatorSystem.java | 1 - .../actuators/MotionActuatorSystem.java | 5 ++-- .../actuators/PropertyActuatorSystem.java | 4 ---- .../ConditionalControllerSystem.java | 1 - .../systems/controllers/ControllerSystem.java | 5 ++-- .../sensors/CollisionSensorSystem.java | 16 +++++-------- .../systems/sensors/DelaySensorSystem.java | 12 ++++------ .../systems/sensors/KeyboardSensorSystem.java | 5 ++-- .../systems/sensors/RadarSensorSystem.java | 1 - .../systems/sensors/SensorSystem.java | 12 +++++----- .../utils/builders/BricksUtils.java | 1 + .../utils/builders/EntityBuilder.java | 9 ++++--- .../builders/sensors/DelaySensorBuilder.java | 2 +- .../builders/sensors/RadarSensorBuilder.java | 12 +++++----- .../utils/builders/sensors/SensorBuilder.java | 4 ++-- .../ConditionalControllerSystemTest.java | 11 --------- .../controllers/ControllerSystemTest.java | 24 ++++--------------- .../ScriptControllerSystemTest.java | 8 ------- .../sensors/CollisionSensorSystemTest.java | 2 +- .../sensors/DelaySensorSystemTest.java | 9 ++----- .../sensors/KeyboardSensorSystemTest.java | 2 -- .../sensors/RadarSensorSystemTest.java | 7 +++--- 37 files changed, 81 insertions(+), 150 deletions(-) diff --git a/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java b/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java index 7f96c4c..ec75964 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java @@ -39,7 +39,7 @@ public void create() { Settings.debugTags.add("StateComponent"); Settings.debugTags.add("EffectActuatorSystem"); //Settings.debugTags.add("DelaySensorSystem"); - // Settings.debugTags.add("MotionActuatorSystem"); + // Settings.debugTags.add("MotionActuatorSystem"); //Settings.debugTags.add("EntityBuilder"); batch = new SpriteBatch(); diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/FlyingDartLevel.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/FlyingDartLevel.java index 5fc03f1..312b07a 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/FlyingDartLevel.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/FlyingDartLevel.java @@ -1,7 +1,6 @@ package com.indignado.functional.test.levels.flyingDart; import com.badlogic.ashley.core.Entity; -import com.badlogic.ashley.core.PooledEngine; import com.indignado.functional.test.levels.base.entities.Ground; import com.indignado.functional.test.levels.base.entities.Wall; import com.indignado.functional.test.levels.flyingDart.entities.Dart; diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/MousePositionScript.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/MousePositionScript.java index a033e23..2a290bf 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/MousePositionScript.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/MousePositionScript.java @@ -12,7 +12,6 @@ import com.indignado.logicbricks.core.actuators.InstanceEntityActuator; import com.indignado.logicbricks.core.controllers.ScriptController; import com.indignado.logicbricks.core.sensors.AlwaysSensor; -import com.indignado.logicbricks.core.sensors.DelaySensor; import com.indignado.logicbricks.core.sensors.MouseSensor; import com.indignado.logicbricks.core.sensors.Sensor; import com.indignado.logicbricks.utils.Log; diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/TriggerDart.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/TriggerDart.java index f6c2805..69f38d2 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/TriggerDart.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/TriggerDart.java @@ -11,10 +11,8 @@ import com.indignado.logicbricks.core.EntityFactory; import com.indignado.logicbricks.core.World; import com.indignado.logicbricks.core.actuators.InstanceEntityActuator; -import com.indignado.logicbricks.core.controllers.ConditionalController; import com.indignado.logicbricks.core.controllers.ScriptController; import com.indignado.logicbricks.core.sensors.AlwaysSensor; -import com.indignado.logicbricks.core.sensors.DelaySensor; import com.indignado.logicbricks.core.sensors.MouseSensor; import com.indignado.logicbricks.core.sensors.Sensor; import com.indignado.logicbricks.utils.builders.BodyBuilder; @@ -22,10 +20,8 @@ import com.indignado.logicbricks.utils.builders.EntityBuilder; import com.indignado.logicbricks.utils.builders.FixtureDefBuilder; import com.indignado.logicbricks.utils.builders.actuators.InstanceEntityActuatorBuilder; -import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; import com.indignado.logicbricks.utils.builders.controllers.ScriptControllerBuilder; import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.DelaySensorBuilder; import com.indignado.logicbricks.utils.builders.sensors.MouseSensorBuilder; /** diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index f74b591..598be7b 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -2,7 +2,6 @@ import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.Input; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.ParticleEffect; @@ -206,7 +205,7 @@ public Entity createEntity() { .setName("controllerChangeStateWalking") .getBrick(); - StateActuator stateActuatorWalking = BricksUtils.getBuilder(StateActuatorBuilder.class) + StateActuator stateActuatorWalking = BricksUtils.getBuilder(StateActuatorBuilder.class) .setChangeState(stateComponent.getState("Walking")) .setName("stateActuatorWalking") .getBrick(); @@ -251,14 +250,14 @@ public Entity createEntity() { .setName("controllerGround2") .getBrick(); - StateActuator stateActuatorIdle2 = BricksUtils.getBuilder(StateActuatorBuilder.class) + StateActuator stateActuatorIdle2 = BricksUtils.getBuilder(StateActuatorBuilder.class) .setChangeState(stateComponent.getState("Idle")) .setName("stateActuatorIdle2") .getBrick(); - entityBuilder.addController(controllerGround2, "Jump","Fall") - .connectToSensors(collisionSensorGround,delaySensorContactGround) + entityBuilder.addController(controllerGround2, "Jump", "Fall") + .connectToSensors(collisionSensorGround, delaySensorContactGround) .connectToActuator(stateActuatorIdle2); /* State Idle ---------------------------------------------------------------- @@ -293,7 +292,7 @@ public Entity createEntity() { entityBuilder.addController(controllerIdle, "Idle") .connectToSensor(alwaysSensorIdle) - .connectToActuators(editRigidBodyActuatorIdle,pauseIdleEffectActuator,motionActuatorIdle); + .connectToActuators(editRigidBodyActuatorIdle, pauseIdleEffectActuator, motionActuatorIdle); /* State Walking ---------------------------------------------------------------- @@ -322,7 +321,7 @@ public Entity createEntity() { entityBuilder.addController(controllerWalking, "Walking") .connectToSensor(alwaysSensorWalking) - .connectToActuators(editRigidBodyActuatorWalking,activeEffectActuator); + .connectToActuators(editRigidBodyActuatorWalking, activeEffectActuator); // ** Walking Right ** KeyboardSensor keyboardSensorImpulseRight = BricksUtils.getBuilder(KeyboardSensorBuilder.class) @@ -394,7 +393,7 @@ public Entity createEntity() { .getBrick(); MotionActuator motionActuatorJump = BricksUtils.getBuilder(MotionActuatorBuilder.class) - .setImpulse(new Vector2(0,8)) + .setImpulse(new Vector2(0, 8)) .setName("motionActuatorJump") .getBrick(); @@ -405,7 +404,7 @@ public Entity createEntity() { entityBuilder.addController(controllerImpulseJump, "Jump") .connectToSensor(alwaysSensorImpulseJump) - .connectToActuators(motionActuatorJump,pauseJumpEffectActuator); + .connectToActuators(motionActuatorJump, pauseJumpEffectActuator); return entityBuilder.getEntity(); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/StateComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/StateComponent.java index e67f4db..8f7ca29 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/StateComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/StateComponent.java @@ -12,12 +12,11 @@ public class StateComponent extends Component implements Poolable { public static int eraseID = -1; public float time = 0.0f; + public int oldState = -1; + public boolean isChanged = false; private IntMap states = new IntMap<>(); private int typeIndex = -1; private int currentState = 0; - public int oldState = -1; - public boolean isChanged = false; - public int createState(String state) { int ie = ++typeIndex; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksException.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksException.java index ee12d80..d460c25 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksException.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksException.java @@ -16,7 +16,7 @@ public LogicBricksException(String tag, String message) { public LogicBricksException(Throwable cause) { super(cause); - Log.error("LogicBricksException", cause.getMessage(),cause); + Log.error("LogicBricksException", cause.getMessage(), cause); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java index c751fc7..f7c6ca5 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java @@ -253,7 +253,7 @@ public SpriteBatch getBatch() { @Override public void beginContact(Contact contact) { CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if(css != null) { + if (css != null) { css.beginContact(contact); } @@ -263,7 +263,7 @@ public void beginContact(Contact contact) { @Override public void endContact(Contact contact) { CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if(css != null) { + if (css != null) { css.endContact(contact); } @@ -273,8 +273,8 @@ public void endContact(Contact contact) { @Override public void preSolve(Contact contact, Manifold oldManifold) { CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if(css != null) { - css.preSolve(contact,oldManifold); + if (css != null) { + css.preSolve(contact, oldManifold); } } @@ -283,8 +283,8 @@ public void preSolve(Contact contact, Manifold oldManifold) { @Override public void postSolve(Contact contact, ContactImpulse impulse) { CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if(css != null) { - css.postSolve(contact,impulse); + if (css != null) { + css.postSolve(contact, impulse); } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/MouseSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/MouseSensor.java index a56595d..ac0b4fe 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/MouseSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/MouseSensor.java @@ -22,7 +22,7 @@ public void reset() { super.reset(); mouseEvent = null; target = null; - positionSignal.set(0,0); + positionSignal.set(0, 0); amountScrollSignal = 0; mouseEventSignal = null; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java index 2d8e3e8..fd4e7e2 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java @@ -9,19 +9,15 @@ */ public class RadarSensor extends Sensor { - public enum Axis { Xpositive, Xnegative, Ypositive, Ynegative } - // Config Values public String targetTag; public String propertyName; public Axis axis; public float angle = 0; public float distance = 0; - // Signal Values public ObjectSet contactList = new ObjectSet(); - @Override public void reset() { super.reset(); @@ -34,4 +30,7 @@ public void reset() { } + + public enum Axis {Xpositive, Xnegative, Ypositive, Ynegative} + } \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java index 158a605..d715beb 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java @@ -46,7 +46,7 @@ public class RenderingSystem extends IteratingSystem { //private BitmapFont debugFont; public RenderingSystem(com.indignado.logicbricks.core.World world) { - this(world.getBatch(),world.getCamera(),world.getPhysics()); + this(world.getBatch(), world.getCamera(), world.getPhysics()); } @@ -100,7 +100,7 @@ public void update(float deltaTime) { ParticleEffect effect = ((ParticleEffectView) view).effect; effect.setPosition(view.position.x, view.position.y); effect.update(deltaTime); - if(((ParticleEffectView) view).autoStart) { + if (((ParticleEffectView) view).autoStart) { effect.start(); ((ParticleEffectView) view).autoStart = false; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/StateSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/StateSystem.java index 2d363c0..1493ab6 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/StateSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/StateSystem.java @@ -41,7 +41,7 @@ public void update(float deltaTime) { for (Body body : rigidBodies.rigidBodies) { rigidBodies.rigidBodies.removeValue(body, true); world.getPhysics().destroyBody(body); - Log.debug(tag,"Remove entity id %d",entity.getId()); + Log.debug(tag, "Remove entity id %d", entity.getId()); } } } @@ -57,7 +57,7 @@ public void processEntity(Entity entity, float deltaTime) { state.time += deltaTime; if (state.getCurrentState() == StateComponent.eraseID) { - Log.debug(tag,"To remove entity id %d",entity.getId()); + Log.debug(tag, "To remove entity id %d", entity.getId()); toRemove.add(entity); } if (sm.get(entity).oldState != state.getCurrentState()) { diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/ActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/ActuatorSystem.java index 637db9c..f0ce80c 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/ActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/ActuatorSystem.java @@ -44,15 +44,15 @@ public ActuatorSystem(Class clazz, Class clazz2) { public void processEntity(Entity entity, float deltaTime) { if (Settings.debugEntity != null) tag = Log.tagEntity(this.getClass().getSimpleName(), entity); Integer state = stateMapper.get(entity).getCurrentState(); - Log.debug(tag, "A) current state %d name %s time "+ stateMapper.get(entity).time + " ",state,stateMapper.get(entity).getCurrentStateName()); + Log.debug(tag, "A) current state %d name %s time " + stateMapper.get(entity).time + " ", state, stateMapper.get(entity).getCurrentStateName()); ObjectSet actuators = (ObjectSet) actuatorMapper.get(entity).actuators.get(state); if (actuators != null) { for (A actuator : actuators) { - Log.debug(tag, "B) Actuator %s size controller %d",actuator.name,actuator.controllers.size); + Log.debug(tag, "B) Actuator %s size controller %d", actuator.name, actuator.controllers.size); actuator.pulseState = LogicBrick.BrickMode.BM_IDLE; for (Controller controller : actuator.controllers) { - if(controller.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { + if (controller.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { Log.debug(tag, "C) Controller %s pulseState %s", controller.name, controller.pulseState); actuator.pulseState = LogicBrick.BrickMode.BM_ON; } else { @@ -60,10 +60,10 @@ public void processEntity(Entity entity, float deltaTime) { break; } } - if (actuator.pulseState.equals(LogicBrick.BrickMode.BM_ON) ) { + if (actuator.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { Log.debug(tag, "D) Actuator %s pulseState %s", actuator.name, actuator.pulseState); processActuator(actuator, deltaTime); - if(actuator instanceof StateActuator) break; + if (actuator instanceof StateActuator) break; } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/CameraActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/CameraActuatorSystem.java index f0160ed..e1af451 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/CameraActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/CameraActuatorSystem.java @@ -1,7 +1,6 @@ package com.indignado.logicbricks.systems.actuators; import com.badlogic.gdx.graphics.OrthographicCamera; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.Transform; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java index 5508145..696aac5 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java @@ -22,11 +22,11 @@ public EffectActuatorSystem() { public void processActuator(EffectActuator actuator, float deltaTime) { ParticleEffectView view = actuator.effectView; ParticleEffect effect = view.effect; - if (actuator.active){ - Log.debug(tag,"Effect reset"); + if (actuator.active) { + Log.debug(tag, "Effect reset"); effect.reset(); } else { - Log.debug(tag,"Effect allowCompletion"); + Log.debug(tag, "Effect allowCompletion"); effect.allowCompletion(); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MessageActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MessageActuatorSystem.java index 11031f9..26a867d 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MessageActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MessageActuatorSystem.java @@ -1,6 +1,5 @@ package com.indignado.logicbricks.systems.actuators; -import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.ai.msg.MessageDispatcher; import com.indignado.logicbricks.components.actuators.MessageActuatorComponent; import com.indignado.logicbricks.core.MessageManager; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MotionActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MotionActuatorSystem.java index 8c3927a..f3e4d3e 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MotionActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/MotionActuatorSystem.java @@ -8,7 +8,6 @@ import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.components.actuators.MotionActuatorComponent; import com.indignado.logicbricks.core.LogicBrick; -import com.indignado.logicbricks.core.LogicBricksException; import com.indignado.logicbricks.core.Settings; import com.indignado.logicbricks.core.actuators.MotionActuator; import com.indignado.logicbricks.core.controllers.Controller; @@ -34,7 +33,7 @@ public void processEntity(Entity entity, float deltaTime) { if (actuators != null) { for (MotionActuator actuator : actuators) { for (Controller controller : actuator.controllers) { - if(controller.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { + if (controller.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { Log.debug(tag, "Controller %s pulseState %s", controller.name, controller.pulseState); actuator.pulseState = LogicBrick.BrickMode.BM_ON; } else { @@ -56,7 +55,7 @@ public void processActuator(MotionActuator actuator, float deltaTime) { } Body body = actuator.targetRigidBody; - if (actuator.pulseState.equals(LogicBrick.BrickMode.BM_ON) ) { + if (actuator.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { Log.debug(tag, "Actuator: %s", actuator.name); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java index ae54c4d..c3813e6 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java @@ -1,13 +1,9 @@ package com.indignado.logicbricks.systems.actuators; import com.badlogic.ashley.core.ComponentMapper; -import com.badlogic.ashley.core.Entity; -import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.actuators.PropertyActuatorComponent; import com.indignado.logicbricks.components.data.Property; -import com.indignado.logicbricks.core.LogicBrick; -import com.indignado.logicbricks.core.Settings; import com.indignado.logicbricks.core.actuators.PropertyActuator; import com.indignado.logicbricks.utils.Log; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystem.java index 17670bd..bcfc0c3 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystem.java @@ -5,7 +5,6 @@ import com.indignado.logicbricks.core.controllers.ConditionalController; import com.indignado.logicbricks.core.controllers.ConditionalController.Op; import com.indignado.logicbricks.core.sensors.Sensor; -import com.indignado.logicbricks.utils.Log; /** * @author Rubentxu diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ControllerSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ControllerSystem.java index 7b0681b..b6629cf 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ControllerSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/controllers/ControllerSystem.java @@ -9,7 +9,6 @@ import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.LogicBrick.BrickMode; import com.indignado.logicbricks.core.Settings; -import com.indignado.logicbricks.core.actuators.Actuator; import com.indignado.logicbricks.core.controllers.Controller; import com.indignado.logicbricks.core.sensors.Sensor; import com.indignado.logicbricks.systems.LogicBrickSystem; @@ -40,7 +39,7 @@ public void processEntity(Entity entity, float deltaTime) { for (C controller : controllers) { controller.pulseState = LogicBrick.BrickMode.BM_OFF; for (Sensor sensor : controller.sensors.values()) { - if(sensor.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { + if (sensor.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { //Log.debug(tag, "Sensor %s pulseState %s isPositive %b",sensor.name, sensor.pulseState, sensor.positive); controller.pulseState = BrickMode.BM_IDLE; } else { @@ -50,7 +49,7 @@ public void processEntity(Entity entity, float deltaTime) { } if (controller.pulseState.equals(BrickMode.BM_IDLE)) { processController(controller); - if(controller.pulseState.equals(BrickMode.BM_ON)) + if (controller.pulseState.equals(BrickMode.BM_ON)) Log.debug(tag, "Controller %s pulseState %s", controller.name, controller.pulseState); } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java index d6be72e..5dcdc45 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java @@ -1,6 +1,5 @@ package com.indignado.logicbricks.systems.sensors; -import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntityListener; import com.badlogic.gdx.physics.box2d.Contact; @@ -12,10 +11,7 @@ import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.sensors.CollisionSensorComponent; -import com.indignado.logicbricks.components.sensors.RadarSensorComponent; -import com.indignado.logicbricks.core.LogicBricksEngine; import com.indignado.logicbricks.core.sensors.CollisionSensor; -import com.indignado.logicbricks.core.sensors.RadarSensor; import com.indignado.logicbricks.utils.Log; /** @@ -44,7 +40,7 @@ public void addCollisionRule(ContactListener collisionRule) { public boolean query(CollisionSensor sensor, float deltaTime) { for (Contact contact : sensor.contactList) { Log.debug(tag, "sensor contact %b", contact.isTouching()); - if(contact.isTouching()) return true; + if (contact.isTouching()) return true; } return false; @@ -61,7 +57,7 @@ public void beginContact(Contact contact) { Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - if(collisionSensors.size > 0) { + if (collisionSensors.size > 0) { processContactCollisionSensors(entityA, contact, true); processContactCollisionSensors(entityB, contact, true); @@ -81,7 +77,7 @@ public void endContact(Contact contact) { Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - if(collisionSensors.size > 0) { + if (collisionSensors.size > 0) { processContactCollisionSensors(entityA, contact, false); processContactCollisionSensors(entityB, contact, false); @@ -113,7 +109,7 @@ private void processContactCollisionSensors(Entity entity, Contact contact, bool IdentityComponent identityA = entity.getComponent(IdentityComponent.class); for (CollisionSensor sensor : collisionSensors) { if (identityA.tag.equals(sensor.targetTag)) { - if(addMode) sensor.contactList.add(contact); + if (addMode) sensor.contactList.add(contact); else sensor.contactList.remove(contact); } } @@ -124,7 +120,7 @@ private void processContactCollisionSensors(Entity entity, Contact contact, bool @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add collisionSensors"); - sensorsHandler(entity,true); + sensorsHandler(entity, true); } @@ -132,7 +128,7 @@ public void entityAdded(Entity entity) { @Override public void entityRemoved(Entity entity) { Log.debug(tag, "EntityAdded remove collisionSensors"); - sensorsHandler(entity,false); + sensorsHandler(entity, false); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystem.java index 7a7f962..62bcd0c 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystem.java @@ -1,8 +1,6 @@ package com.indignado.logicbricks.systems.sensors; -import com.indignado.logicbricks.components.sensors.AlwaysSensorComponent; import com.indignado.logicbricks.components.sensors.DelaySensorComponent; -import com.indignado.logicbricks.core.sensors.AlwaysSensor; import com.indignado.logicbricks.core.sensors.DelaySensor; import com.indignado.logicbricks.utils.Log; @@ -21,17 +19,17 @@ public DelaySensorSystem() { @Override public boolean query(DelaySensor sensor, float deltaTime) { boolean isActive = false; - if(sensor.time != -1) sensor.time += deltaTime; + if (sensor.time != -1) sensor.time += deltaTime; - if(sensor.time >= sensor.delay) { - if(sensor.positive && sensor.time >= (sensor.delay + sensor.duration)) { - if(sensor.repeat) { + if (sensor.time >= sensor.delay) { + if (sensor.positive && sensor.time >= (sensor.delay + sensor.duration)) { + if (sensor.repeat) { sensor.time = 0; } else { sensor.time = -1; } } else { - Log.debug(tag,"query is true time %f", sensor.time); + Log.debug(tag, "query is true time %f", sensor.time); isActive = true; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystem.java index d1d2d50..ac5f163 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystem.java @@ -7,7 +7,6 @@ import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.sensors.KeyboardSensorComponent; -import com.indignado.logicbricks.core.sensors.CollisionSensor; import com.indignado.logicbricks.core.sensors.KeyboardSensor; import com.indignado.logicbricks.utils.Log; @@ -55,7 +54,7 @@ public boolean keyDown(int keycode) { ks.keysCodeSignal.add(new Integer(keycode)); } - Log.debug(tag, "keyDown %d",keycode); + Log.debug(tag, "keyDown %d", keycode); return false; } @@ -67,7 +66,7 @@ public boolean keyUp(int keycode) { ks.keysCodeSignal.remove(new Integer(keycode)); } - Log.debug(tag, "keyUp %d size %d",keycode,keyboardSensors.first().keysCodeSignal.size); + Log.debug(tag, "keyUp %d size %d", keycode, keyboardSensors.first().keysCodeSignal.size); return false; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 8ecec06..e83d742 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -12,7 +12,6 @@ import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.components.sensors.RadarSensorComponent; import com.indignado.logicbricks.core.LogicBricksException; -import com.indignado.logicbricks.core.World; import com.indignado.logicbricks.core.sensors.RadarSensor; import com.indignado.logicbricks.utils.Log; import com.indignado.logicbricks.utils.builders.FixtureDefBuilder; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/SensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/SensorSystem.java index 3a5840e..7be475d 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/SensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/SensorSystem.java @@ -43,8 +43,8 @@ public SensorSystem(Class clazz, Class clazz2) { } @Override - public void update (float deltaTime) { - super.update(deltaTime); + public void update(float deltaTime) { + super.update(deltaTime); } @@ -57,13 +57,13 @@ public void processEntity(Entity entity, float deltaTime) { for (S sensor : sensors) { boolean doDispatch = false, freqDispatch = false; if (stateMapper.get(entity).isChanged) { - Log.debug(tag,"reset firstExec state %d", state); + Log.debug(tag, "reset firstExec state %d", state); sensor.firstExec = true; sensor.positive = false; sensor.firstTap = Sensor.TapMode.TAP_IN; - if(sensor instanceof DelaySensor){ - ((DelaySensor)sensor).time = 0; - Log.debug(tag,"reset delaysensor time %f",((DelaySensor) sensor).time); + if (sensor instanceof DelaySensor) { + ((DelaySensor) sensor).time = 0; + Log.debug(tag, "reset delaysensor time %f", ((DelaySensor) sensor).time); } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java index e914c5c..d9347fd 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java @@ -39,6 +39,7 @@ private BricksUtils() { bricksClasses.put(PropertySensor.class, new BricksClasses(PropertySensorComponent.class, PropertySensorSystem.class)); bricksClasses.put(MessageSensor.class, new BricksClasses(MessageSensorComponent.class, MessageSensorSystem.class)); bricksClasses.put(DelaySensor.class, new BricksClasses(DelaySensorComponent.class, DelaySensorSystem.class)); + bricksClasses.put(RadarSensor.class, new BricksClasses(RadarSensorComponent.class, RadarSensorSystem.class)); bricksClasses.put(ConditionalController.class, new BricksClasses(ConditionalControllerComponent.class, ConditionalControllerSystem.class)); bricksClasses.put(ScriptController.class, new BricksClasses(ScriptControllerComponent.class, ScriptControllerSystem.class)); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java index a2b9a8c..9612802 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java @@ -3,7 +3,6 @@ import com.badlogic.ashley.core.Component; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntitySystem; -import com.badlogic.ashley.core.PooledEngine; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.utils.Array; @@ -124,7 +123,7 @@ private ES getSystem(Class clazz) { Log.debug(tag, "Error instance entitySystem %s", clazz.getSimpleName()); } - if(entitySystem != null) { + if (entitySystem != null) { engine.addSystem(entitySystem); } else { Log.debug(tag, "Error instance entitySystem %s", clazz.getSimpleName()); @@ -310,9 +309,9 @@ public EntityBuilder addProperty(Property property) { private void config(IntMap> bricks, Entity entity) { - if(entity == null) throw new LogicBricksException(tag,"Error: Not owner entity exist"); - for (ObjectSet bricksSet : bricks.values() ) { - for (LogicBrick brick : bricksSet) { + if (entity == null) throw new LogicBricksException(tag, "Error: Not owner entity exist"); + for (ObjectSet bricksSet : bricks.values()) { + for (LogicBrick brick : bricksSet) { brick.owner = entity; } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/DelaySensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/DelaySensorBuilder.java index f047c0d..c071986 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/DelaySensorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/DelaySensorBuilder.java @@ -28,7 +28,7 @@ public DelaySensorBuilder setDuration(float duration) { public DelaySensorBuilder setRepeat(boolean repeat) { - brick.repeat = repeat; + brick.repeat = repeat; return this; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java index 8e65457..90575ce 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java @@ -1,22 +1,22 @@ package com.indignado.logicbricks.utils.builders.sensors; -import com.indignado.logicbricks.core.sensors.AlwaysSensor; +import com.indignado.logicbricks.core.sensors.RadarSensor; /** * @author Rubentxu. */ -public class RadarSensorBuilder extends SensorBuilder { +public class RadarSensorBuilder extends SensorBuilder { public RadarSensorBuilder() { - brick = new AlwaysSensor(); + brick = new RadarSensor(); } @Override - public AlwaysSensor getBrick() { - AlwaysSensor brickTemp = brick; - brick = new AlwaysSensor(); + public RadarSensor getBrick() { + RadarSensor brickTemp = brick; + brick = new RadarSensor(); return brickTemp; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/SensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/SensorBuilder.java index edb4bc2..6166a28 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/SensorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/SensorBuilder.java @@ -29,10 +29,10 @@ public SensorBuilder setTap(boolean tap) { } - public SensorBuilder setPulse(Sensor.Pulse ...pulses) { + public SensorBuilder setPulse(Sensor.Pulse... pulses) { int valuePulse = 0; for (int i = 0; i < pulses.length; i++) { - if(i == 0) valuePulse = pulses[i].getValue(); + if (i == 0) valuePulse = pulses[i].getValue(); else valuePulse |= pulses[i].getValue(); } return setPulse(valuePulse); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystemTest.java index 76a3d86..2b86438 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ConditionalControllerSystemTest.java @@ -1,30 +1,19 @@ package com.indignado.logicbricks.systems.controllers; import com.badlogic.ashley.core.Entity; -import com.badlogic.ashley.core.PooledEngine; -import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.IdentityComponent; -import com.indignado.logicbricks.components.StateComponent; -import com.indignado.logicbricks.components.controllers.ControllerComponent; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.LogicBricksEngine; -import com.indignado.logicbricks.core.LogicBricksException; -import com.indignado.logicbricks.core.World; import com.indignado.logicbricks.core.controllers.ConditionalController; -import com.indignado.logicbricks.core.controllers.Controller; -import com.indignado.logicbricks.core.sensors.AlwaysSensor; import com.indignado.logicbricks.core.sensors.Sensor; -import com.indignado.logicbricks.systems.StateSystem; import com.indignado.logicbricks.systems.sensors.base.ActuatorTest; import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.EntityBuilder; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; -import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; /** * @author Rubentxu. diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ControllerSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ControllerSystemTest.java index fe8d8d1..2aa8ea5 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ControllerSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ControllerSystemTest.java @@ -1,37 +1,21 @@ package com.indignado.logicbricks.systems.controllers; import com.badlogic.ashley.core.Entity; -import com.badlogic.gdx.math.Vector2; -import com.badlogic.gdx.physics.box2d.Transform; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.IdentityComponent; -import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.components.StateComponent; -import com.indignado.logicbricks.components.ViewsComponent; import com.indignado.logicbricks.components.controllers.ControllerComponent; -import com.indignado.logicbricks.components.data.TextureView; -import com.indignado.logicbricks.components.sensors.SensorComponent; import com.indignado.logicbricks.core.LogicBrick.BrickMode; import com.indignado.logicbricks.core.LogicBricksEngine; -import com.indignado.logicbricks.core.controllers.ConditionalController; import com.indignado.logicbricks.core.controllers.Controller; import com.indignado.logicbricks.core.sensors.AlwaysSensor; -import com.indignado.logicbricks.core.sensors.MouseSensor; -import com.indignado.logicbricks.core.sensors.Sensor; -import com.indignado.logicbricks.core.sensors.Sensor.Pulse; -import com.indignado.logicbricks.systems.StateSystem; -import com.indignado.logicbricks.systems.sensors.MouseSensorSystem; -import com.indignado.logicbricks.systems.sensors.SensorSystem; -import com.indignado.logicbricks.systems.sensors.base.ActuatorTest; import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.EntityBuilder; -import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.MouseSensorBuilder; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** @@ -77,8 +61,8 @@ public void setup() { controller.sensors.put(sensor.name, sensor); ObjectSet controllersSet = new ObjectSet<>(); controllersSet.add(controller); - ControllerComponent controllerComponent = entityBuilder.getComponent(ControllerComponent.class); - controllerComponent.controllers.put(stateComponent.getCurrentState(),controllersSet); + ControllerComponent controllerComponent = entityBuilder.getComponent(ControllerComponent.class); + controllerComponent.controllers.put(stateComponent.getCurrentState(), controllersSet); player = entityBuilder.getEntity(); @@ -116,7 +100,7 @@ public void twoSensorsTest() { .setName("sensor2Player") .getBrick(); - controller.sensors.put(sensor2.name,sensor2); + controller.sensors.put(sensor2.name, sensor2); sensor.pulseState = BrickMode.BM_ON; sensor2.pulseState = BrickMode.BM_ON; engine.addEntity(player); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ScriptControllerSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ScriptControllerSystemTest.java index 56fc57b..aa5e9f9 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ScriptControllerSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/controllers/ScriptControllerSystemTest.java @@ -1,30 +1,22 @@ package com.indignado.logicbricks.systems.controllers; import com.badlogic.ashley.core.Entity; -import com.badlogic.ashley.core.PooledEngine; import com.badlogic.gdx.utils.ObjectMap; import com.indignado.logicbricks.components.IdentityComponent; -import com.indignado.logicbricks.components.StateComponent; -import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.LogicBricksEngine; import com.indignado.logicbricks.core.Script; -import com.indignado.logicbricks.core.World; import com.indignado.logicbricks.core.actuators.Actuator; -import com.indignado.logicbricks.core.controllers.ConditionalController; import com.indignado.logicbricks.core.controllers.ScriptController; import com.indignado.logicbricks.core.sensors.AlwaysSensor; import com.indignado.logicbricks.core.sensors.Sensor; -import com.indignado.logicbricks.systems.StateSystem; import com.indignado.logicbricks.systems.sensors.base.ActuatorTest; import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.EntityBuilder; -import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; import com.indignado.logicbricks.utils.builders.controllers.ScriptControllerBuilder; import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java index 6ba0811..8abfe80 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java @@ -184,7 +184,7 @@ public void endBodyCollisionTest() { System.out.println("Body position3: " + bodyPlayer.getPosition()); System.out.println("Body position4: " + bodyPlayer.getPosition()); - assertEquals(0,sensor.contactList.size); + assertEquals(0, sensor.contactList.size); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystemTest.java index 7449c70..0018acc 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/DelaySensorSystemTest.java @@ -3,20 +3,16 @@ import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; -import com.indignado.logicbricks.core.sensors.AlwaysSensor; 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.BricksUtils; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; -import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; import com.indignado.logicbricks.utils.builders.sensors.DelaySensorBuilder; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; /** * @author Rubentxu @@ -87,7 +83,7 @@ public void defaultTest() { @Test public void delayTest() { - sensor.delay =1.5f; + sensor.delay = 1.5f; engine.addEntity(player); engine.update(1); @@ -105,7 +101,6 @@ public void delayTest() { } - @Test public void durationTest() { sensor.duration = 2f; diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java index 51aaa13..7ee1cd3 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java @@ -113,7 +113,6 @@ public void keyDownPulseModeTrueTest() { } - @Test public void keyDownPulseModeTrueAndFalseTest() { sensor.pulse = Sensor.Pulse.PM_TRUE.getValue() | Sensor.Pulse.PM_FALSE.getValue(); @@ -147,7 +146,6 @@ public void keyDownPulseModeTrueAndFalseTest() { } - @Test public void keyDownAllKeysConfigTest() { engine.addEntity(player); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java index 47ca970..f899791 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -11,14 +11,13 @@ import com.indignado.logicbricks.core.CategoryBitsManager; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; -import com.indignado.logicbricks.core.sensors.CollisionSensor; 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.builders.BodyBuilder; import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; -import com.indignado.logicbricks.utils.builders.sensors.CollisionSensorBuilder; +import com.indignado.logicbricks.utils.builders.sensors.RadarSensorBuilder; import org.junit.Test; import static org.junit.Assert.*; @@ -90,7 +89,7 @@ protected void createContext() { rigidByPlayer.rigidBodies.add(bodyPlayer); sensor = BricksUtils.getBuilder(RadarSensorBuilder.class) - .setTargetName("Ground") + //.setTargetName("Ground") .setName("sensorPlayer") .getBrick(); @@ -185,7 +184,7 @@ public void endBodyCollisionTest() { System.out.println("Body position3: " + bodyPlayer.getPosition()); System.out.println("Body position4: " + bodyPlayer.getPosition()); - assertEquals(0,sensor.contactList.size); + assertEquals(0, sensor.contactList.size); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); From 14989bd1c477cef509f0bc3f900015d6fce9266c Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Sat, 10 Jan 2015 13:21:10 +0100 Subject: [PATCH 05/11] refactor CollisionSensorSystem --- .../sensors/CollisionSensorSystem.java | 83 ++++++++++------- .../systems/sensors/RadarSensorSystem.java | 88 +++++++++++-------- 2 files changed, 103 insertions(+), 68 deletions(-) diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java index 5dcdc45..af04f09 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystem.java @@ -2,15 +2,14 @@ import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntityListener; -import com.badlogic.gdx.physics.box2d.Contact; -import com.badlogic.gdx.physics.box2d.ContactImpulse; -import com.badlogic.gdx.physics.box2d.ContactListener; -import com.badlogic.gdx.physics.box2d.Manifold; +import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.components.sensors.CollisionSensorComponent; +import com.indignado.logicbricks.core.LogicBricksException; import com.indignado.logicbricks.core.sensors.CollisionSensor; import com.indignado.logicbricks.utils.Log; @@ -18,13 +17,11 @@ * @author Rubentxu */ public class CollisionSensorSystem extends SensorSystem implements ContactListener, EntityListener { - private final ObjectSet collisionSensors; private Array collisionsRules; public CollisionSensorSystem() { super(CollisionSensorComponent.class); - collisionSensors = new ObjectSet(); } @@ -54,16 +51,18 @@ public void beginContact(Contact contact) { rule.beginContact(contact); } } - Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - if (collisionSensors.size > 0) { - processContactCollisionSensors(entityA, contact, true); - processContactCollisionSensors(entityB, contact, true); + Object sensorA = contact.getFixtureA().getUserData(); + Object sensorB = contact.getFixtureB().getUserData(); + if (sensorA != null && sensorA instanceof CollisionSensor) { + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + processContactCollisionSensors(entityB, contact, (CollisionSensor) sensorA, true); + } else if (sensorB != null && sensorB instanceof CollisionSensor) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + processContactCollisionSensors(entityA, contact, (CollisionSensor) sensorB, true); } - } @@ -74,12 +73,17 @@ public void endContact(Contact contact) { rule.endContact(contact); } } - Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - if (collisionSensors.size > 0) { - processContactCollisionSensors(entityA, contact, false); - processContactCollisionSensors(entityB, contact, false); + Object sensorA = contact.getFixtureA().getUserData(); + Object sensorB = contact.getFixtureB().getUserData(); + + if (sensorA != null && sensorA instanceof CollisionSensor) { + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + processContactCollisionSensors(entityB, contact, (CollisionSensor) sensorA, false); + + } else if (sensorB != null && sensorB instanceof CollisionSensor) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + processContactCollisionSensors(entityA, contact, (CollisionSensor) sensorB, false); } @@ -93,6 +97,7 @@ public void preSolve(Contact contact, Manifold oldManifold) { rule.preSolve(contact, oldManifold); } } + } @@ -103,15 +108,16 @@ public void postSolve(Contact contact, ContactImpulse impulse) { rule.postSolve(contact, impulse); } } + } - private void processContactCollisionSensors(Entity entity, Contact contact, boolean addMode) { - IdentityComponent identityA = entity.getComponent(IdentityComponent.class); - for (CollisionSensor sensor : collisionSensors) { - if (identityA.tag.equals(sensor.targetTag)) { - if (addMode) sensor.contactList.add(contact); - else sensor.contactList.remove(contact); - } + + private void processContactCollisionSensors(Entity entity, Contact contact, CollisionSensor collisionSensor, boolean addMode) { + IdentityComponent identity = entity.getComponent(IdentityComponent.class); + if (collisionSensor.targetTag != null && identity.tag.equals(collisionSensor.targetTag)) { + if (addMode) collisionSensor.contactList.add(contact); + else collisionSensor.contactList.remove(contact); + } } @@ -120,30 +126,47 @@ private void processContactCollisionSensors(Entity entity, Contact contact, bool @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add collisionSensors"); - sensorsHandler(entity, true); + Array collisionSensors = filterCollisionSensors(entity); + if (collisionSensors.size > 0) { + RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); + if (rigidBodiesComponent == null) + throw new LogicBricksException(tag, "Failed to create collision sensor, there is no rigidBody"); + Body body = rigidBodiesComponent.rigidBodies.first(); + if (body == null) + throw new LogicBricksException(tag, "Failed to create collision sensor, there is no rigidBody"); + for (CollisionSensor sensor : collisionSensors) { + for (Fixture fixture : body.getFixtureList()) { + fixture.setUserData(sensor); + } + + } + + } } @Override public void entityRemoved(Entity entity) { - Log.debug(tag, "EntityAdded remove collisionSensors"); - sensorsHandler(entity, false); } - public void sensorsHandler(Entity entity, boolean addMode) { + private Array filterCollisionSensors(Entity entity) { + Array collisionSensors = new Array(); CollisionSensorComponent collisionSensorComponent = entity.getComponent(CollisionSensorComponent.class); if (collisionSensorComponent != null) { IntMap.Values> values = collisionSensorComponent.sensors.values(); while (values.hasNext()) { for (CollisionSensor sensor : values.next()) { - if (addMode) collisionSensors.add(sensor); - else collisionSensors.remove(sensor); + if (sensor.targetTag != null) { + collisionSensors.add(sensor); + } } } } + return collisionSensors; + } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index e83d742..050e897 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.*; +import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.BlackBoardComponent; @@ -20,11 +21,10 @@ * @author Rubentxu */ public class RadarSensorSystem extends SensorSystem implements ContactListener, EntityListener { - private final ObjectSet radarSensors; + public RadarSensorSystem() { super(RadarSensorComponent.class); - radarSensors = new ObjectSet(); } @@ -42,22 +42,32 @@ public boolean query(RadarSensor sensor, float deltaTime) { @Override public void beginContact(Contact contact) { - Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - - processRadarSensors(entityA, contact, true); - processRadarSensors(entityB, contact, true); + Object sensorA = contact.getFixtureA().getUserData(); + Object sensorB = contact.getFixtureB().getUserData(); + + if (sensorA != null && sensorA instanceof RadarSensor) { + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + processRadarSensors(entityB, contact, (RadarSensor) sensorA, true); + } else if (sensorB != null && sensorB instanceof RadarSensor) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + processRadarSensors(entityA, contact, (RadarSensor) sensorB, true); + } } @Override public void endContact(Contact contact) { - Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - - processRadarSensors(entityA, contact, false); - processRadarSensors(entityB, contact, false); + Object sensorA = contact.getFixtureA().getUserData(); + Object sensorB = contact.getFixtureB().getUserData(); + + if (sensorA != null && sensorA instanceof RadarSensor) { + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + processRadarSensors(entityB, contact, (RadarSensor) sensorA, false); + } else if (sensorB != null && sensorB instanceof RadarSensor) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + processRadarSensors(entityA, contact, (RadarSensor) sensorB, false); + } } @@ -74,20 +84,18 @@ public void postSolve(Contact contact, ContactImpulse impulse) { } - private void processRadarSensors(Entity entity, Contact contact, boolean addMode) { + private void processRadarSensors(Entity entity, Contact contact, RadarSensor radarSensor, boolean addMode) { BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); - IdentityComponent identityA = entity.getComponent(IdentityComponent.class); + IdentityComponent identity = entity.getComponent(IdentityComponent.class); - for (RadarSensor radarSensor : radarSensors) { - if (blackBoard != null && radarSensor.propertyName != null && blackBoard.hasProperty(radarSensor.propertyName)) { - if (addMode) radarSensor.contactList.add(contact); - else radarSensor.contactList.remove(contact); + if (blackBoard != null && radarSensor.propertyName != null && blackBoard.hasProperty(radarSensor.propertyName)) { + if (addMode) radarSensor.contactList.add(contact); + else radarSensor.contactList.remove(contact); - } - if (radarSensor.targetTag != null && identityA.tag.equals(radarSensor.targetTag)) { - if (addMode) radarSensor.contactList.add(contact); - else radarSensor.contactList.remove(contact); - } + } + if (radarSensor.targetTag != null && identity.tag.equals(radarSensor.targetTag)) { + if (addMode) radarSensor.contactList.add(contact); + else radarSensor.contactList.remove(contact); } @@ -97,28 +105,30 @@ private void processRadarSensors(Entity entity, Contact contact, boolean addMode @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add radarSensors"); - sensorsHandler(entity, true); - createRadar(entity); + Array radarSensors = filterRadarSensors(entity); + if (radarSensors.size > 0) { + RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); + if (rigidBodiesComponent == null) + throw new LogicBricksException(tag, "Failed to create radar sensor, there is no rigidBody"); + Body body = rigidBodiesComponent.rigidBodies.first(); + createRadar(body, radarSensors); + + } } @Override public void entityRemoved(Entity entity) { - Log.debug(tag, "EntityRemove remove radarSensors"); - sensorsHandler(entity, false); } - private void createRadar(Entity entity) { - RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); - if (rigidBodiesComponent == null) - throw new LogicBricksException(tag, "Failed to create radar sensor, there is no rigidBody"); - Body body = rigidBodiesComponent.rigidBodies.first(); + private void createRadar(Body body, Array radarSensors) { FixtureDefBuilder fixtureBuilder = new FixtureDefBuilder(); + + Vector2[] vertices = new Vector2[8]; for (RadarSensor sensor : radarSensors) { - Vector2[] vertices = new Vector2[8]; for (int i = 0; i < 7; i++) { float angle = (float) (i / 6.0 * sensor.angle * MathUtils.degreesToRadians); vertices[i + 1].set(sensor.distance * MathUtils.cos(angle), sensor.distance * MathUtils.sin(angle)); @@ -127,26 +137,28 @@ private void createRadar(Entity entity) { .polygonShape(vertices) .sensor() .build(); - body.createFixture(radarFixture); - + body.createFixture(radarFixture).setUserData(sensor); } } - private void sensorsHandler(Entity entity, boolean addMode) { + private Array filterRadarSensors(Entity entity) { + Array radarSensors = new Array(); RadarSensorComponent radarSensorComponent = entity.getComponent(RadarSensorComponent.class); if (radarSensorComponent != null) { IntMap.Values> values = radarSensorComponent.sensors.values(); while (values.hasNext()) { for (RadarSensor sensor : values.next()) { if (sensor.targetTag != null || sensor.propertyName != null) { - if (addMode) radarSensors.add(sensor); - else radarSensors.remove(sensor); + radarSensors.add(sensor); + } } } } + return radarSensors; + } } From 6277bede922a3b927afdb6cb2701302bea342f85 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Mon, 12 Jan 2015 16:02:00 +0100 Subject: [PATCH 06/11] resuelto problema con RadarSensor --- .../functional/test/base/LogicBricksTest.java | 4 +-- .../entities/PlayerPlatform.java | 21 ++++++++--- .../com/indignado/logicbricks/core/World.java | 2 ++ .../logicbricks/core/sensors/RadarSensor.java | 3 +- .../systems/sensors/RadarSensorSystem.java | 18 ++++++---- .../builders/sensors/RadarSensorBuilder.java | 35 +++++++++++++++++++ .../sensors/RadarSensorSystemTest.java | 4 ++- 7 files changed, 73 insertions(+), 14 deletions(-) diff --git a/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java b/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java index ec75964..66d3d52 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/base/LogicBricksTest.java @@ -29,7 +29,7 @@ public abstract class LogicBricksTest implements ApplicationListener { public void create() { Settings.debug = true; Settings.debugLevel = Logger.DEBUG; - Settings.drawABBs = true; + Settings.drawABBs = false; Settings.drawBodies = true; Settings.drawJoints = true; Settings.drawContacts = true; @@ -37,7 +37,7 @@ public void create() { Settings.drawStage = true; //Settings.debugEntity = "Player"; Settings.debugTags.add("StateComponent"); - Settings.debugTags.add("EffectActuatorSystem"); + Settings.debugTags.add("RadarSensorSystem"); //Settings.debugTags.add("DelaySensorSystem"); // Settings.debugTags.add("MotionActuatorSystem"); //Settings.debugTags.add("EntityBuilder"); diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index 598be7b..b6ca15d 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -24,10 +24,7 @@ import com.indignado.logicbricks.utils.builders.EntityBuilder; import com.indignado.logicbricks.utils.builders.actuators.*; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; -import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.CollisionSensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.DelaySensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.KeyboardSensorBuilder; +import com.indignado.logicbricks.utils.builders.sensors.*; /** * @author Rubentxu. @@ -138,6 +135,22 @@ public Entity createEntity() { .connectToSensor(alwaysSensorCamera) .connectToActuator(cameraActuator); + RadarSensor radarSensor = BricksUtils.getBuilder(RadarSensorBuilder.class) + .setTargetTag("test") + .setAngle(33) + .setAxis(RadarSensor.Axis.Xpositive) + .setDistance(4) + .setName("sensorPlayer") + .getBrick(); + + ConditionalController controllerRadar = BricksUtils.getBuilder(ConditionalControllerBuilder.class) + .setOp(ConditionalController.Op.OP_AND) + .setName("controllerCamera") + .getBrick(); + + entityBuilder.addController(controllerRadar, "Idle", "Walking", "Jump", "Fall") + .connectToSensor(radarSensor) + .connectToActuator(cameraActuator); // Collision Sensor ---------------------------------------------------------------- CollisionSensor collisionSensorGround = BricksUtils.getBuilder(CollisionSensorBuilder.class) diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java index f7c6ca5..a259234 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java @@ -65,6 +65,8 @@ public World(com.badlogic.gdx.physics.box2d.World physics, AssetManager assetMan engine.addEntityListener(engine.getSystem(MouseSensorSystem.class)); engine.addSystem(new CollisionSensorSystem()); engine.addEntityListener(engine.getSystem(CollisionSensorSystem.class)); + engine.addSystem(new RadarSensorSystem()); + engine.addEntityListener(engine.getSystem(RadarSensorSystem.class)); engine.addSystem(new MessageSensorSystem()); engine.addEntityListener(engine.getSystem(MessageSensorSystem.class)); engine.addSystem(new InstanceEntityActuatorSystem(this)); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java index fd4e7e2..f4c99f3 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java @@ -15,6 +15,7 @@ public class RadarSensor extends Sensor { public Axis axis; public float angle = 0; public float distance = 0; + // Signal Values public ObjectSet contactList = new ObjectSet(); @@ -31,6 +32,6 @@ public void reset() { } - public enum Axis {Xpositive, Xnegative, Ypositive, Ynegative} + public enum Axis {Xpositive, Ypositive, Xnegative, Ynegative} } \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 050e897..a1ca961 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -105,12 +105,13 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add radarSensors"); - Array radarSensors = filterRadarSensors(entity); + ObjectSet radarSensors = filterRadarSensors(entity); if (radarSensors.size > 0) { RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); if (rigidBodiesComponent == null) throw new LogicBricksException(tag, "Failed to create radar sensor, there is no rigidBody"); Body body = rigidBodiesComponent.rigidBodies.first(); + Log.debug(tag, "Create Radar"); createRadar(body, radarSensors); } @@ -124,27 +125,32 @@ public void entityRemoved(Entity entity) { } - private void createRadar(Body body, Array radarSensors) { + private void createRadar(Body body, ObjectSet radarSensors) { FixtureDefBuilder fixtureBuilder = new FixtureDefBuilder(); Vector2[] vertices = new Vector2[8]; + vertices[0] = new Vector2(); + for (RadarSensor sensor : radarSensors) { + if(sensor.angle > 180) throw new LogicBricksException(tag,"The angle of the radar can not be greater than 180"); for (int i = 0; i < 7; i++) { - float angle = (float) (i / 6.0 * sensor.angle * MathUtils.degreesToRadians); - vertices[i + 1].set(sensor.distance * MathUtils.cos(angle), sensor.distance * MathUtils.sin(angle)); + float angle = (float) (i / 6.0 * sensor.angle) - (sensor.angle/2) + (sensor.axis.ordinal() * 90); + + vertices[i+1] = new Vector2(sensor.distance * MathUtils.cosDeg(angle), sensor.distance * MathUtils.sinDeg(angle)); } FixtureDef radarFixture = fixtureBuilder .polygonShape(vertices) .sensor() .build(); body.createFixture(radarFixture).setUserData(sensor); + Log.debug(tag, "Create Fixture sensorRadar"); } } - private Array filterRadarSensors(Entity entity) { - Array radarSensors = new Array(); + private ObjectSet filterRadarSensors(Entity entity) { + ObjectSet radarSensors = new ObjectSet(); RadarSensorComponent radarSensorComponent = entity.getComponent(RadarSensorComponent.class); if (radarSensorComponent != null) { IntMap.Values> values = radarSensorComponent.sensors.values(); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java index 90575ce..0587168 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java @@ -13,6 +13,41 @@ public RadarSensorBuilder() { } + public RadarSensorBuilder setTargetTag(String tag) { + brick.targetTag = tag; + return this; + + } + + + public RadarSensorBuilder setPropertyName(String name) { + brick.propertyName = name; + return this; + + } + + + public RadarSensorBuilder setAxis(RadarSensor.Axis axis) { + brick.axis = axis; + return this; + + } + + + public RadarSensorBuilder setAngle(float angle) { + brick.angle = angle; + return this; + + } + + + public RadarSensorBuilder setDistance(float distance) { + brick.distance = distance; + return this; + + } + + @Override public RadarSensor getBrick() { RadarSensor brickTemp = brick; diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java index f899791..62aec98 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -89,7 +89,9 @@ protected void createContext() { rigidByPlayer.rigidBodies.add(bodyPlayer); sensor = BricksUtils.getBuilder(RadarSensorBuilder.class) - //.setTargetName("Ground") + .setAngle(45) + .setAxis(RadarSensor.Axis.Ypositive) + .setDistance(5) .setName("sensorPlayer") .getBrick(); From a91dfa63dd0ca55652c3dd0f95169d73db335851 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Mon, 12 Jan 2015 16:56:24 +0100 Subject: [PATCH 07/11] Completado Testing RadarSensorSystemTest --- .../systems/sensors/RadarSensorSystem.java | 18 +- .../sensors/RadarSensorSystemTest.java | 188 ++++++++++++++++-- 2 files changed, 180 insertions(+), 26 deletions(-) diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index a1ca961..2dd2803 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -5,7 +5,6 @@ import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.*; -import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.BlackBoardComponent; @@ -92,8 +91,10 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); - } - if (radarSensor.targetTag != null && identity.tag.equals(radarSensor.targetTag)) { + } else if (radarSensor.targetTag != null && identity.tag.equals(radarSensor.targetTag)) { + if (addMode) radarSensor.contactList.add(contact); + else radarSensor.contactList.remove(contact); + } else if (radarSensor.targetTag == null && radarSensor.propertyName == null){ if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); } @@ -132,11 +133,12 @@ private void createRadar(Body body, ObjectSet radarSensors) { vertices[0] = new Vector2(); for (RadarSensor sensor : radarSensors) { - if(sensor.angle > 180) throw new LogicBricksException(tag,"The angle of the radar can not be greater than 180"); + if (sensor.angle > 180) + throw new LogicBricksException(tag, "The angle of the radar can not be greater than 180"); for (int i = 0; i < 7; i++) { - float angle = (float) (i / 6.0 * sensor.angle) - (sensor.angle/2) + (sensor.axis.ordinal() * 90); + float angle = (float) (i / 6.0 * sensor.angle) - (sensor.angle / 2) + (sensor.axis.ordinal() * 90); - vertices[i+1] = new Vector2(sensor.distance * MathUtils.cosDeg(angle), sensor.distance * MathUtils.sinDeg(angle)); + vertices[i + 1] = new Vector2(sensor.distance * MathUtils.cosDeg(angle), sensor.distance * MathUtils.sinDeg(angle)); } FixtureDef radarFixture = fixtureBuilder .polygonShape(vertices) @@ -156,10 +158,8 @@ private ObjectSet filterRadarSensors(Entity entity) { IntMap.Values> values = radarSensorComponent.sensors.values(); while (values.hasNext()) { for (RadarSensor sensor : values.next()) { - if (sensor.targetTag != null || sensor.propertyName != null) { - radarSensors.add(sensor); + radarSensors.add(sensor); - } } } } diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java index 62aec98..4f622ef 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -6,14 +6,18 @@ import com.badlogic.gdx.physics.box2d.BodyDef; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.utils.GdxNativesLoader; +import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.RigidBodiesComponents; +import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.core.CategoryBitsManager; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; import com.indignado.logicbricks.core.sensors.RadarSensor; +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.Log; import com.indignado.logicbricks.utils.builders.BodyBuilder; import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; @@ -78,9 +82,9 @@ protected void createContext() { bodyPlayer = bodyBuilder .fixture(bodyBuilder.fixtureDefBuilder() - .circleShape(1) + .boxShape(1, 1) .restitution(0f)) - .position(40, 23) + .position(40, 27) .mass(1f) .type(BodyDef.BodyType.DynamicBody) .build(); @@ -89,9 +93,10 @@ protected void createContext() { rigidByPlayer.rigidBodies.add(bodyPlayer); sensor = BricksUtils.getBuilder(RadarSensorBuilder.class) - .setAngle(45) - .setAxis(RadarSensor.Axis.Ypositive) - .setDistance(5) + .setAngle(90) + .setAxis(RadarSensor.Axis.Ynegative) + .setDistance(2) + .setPulse(Sensor.Pulse.PM_TRUE) .setName("sensorPlayer") .getBrick(); @@ -114,6 +119,8 @@ protected void createContext() { 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() @@ -134,13 +141,80 @@ protected void createContext() { @Test - public void bodyCollidesBodyTest() { + public void radarAxisYnegativeTest() { identityPlayer.collisionMask = (short) identityGround.category; engine.addEntity(player); engine.update(1); physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + + + assertTrue(sensor.contactList.first().isTouching()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + } + + + @Test + public void radarAxisYnegativeTargetTagTest() { + identityPlayer.collisionMask = (short) identityGround.category; + sensor.targetTag = "Ground"; + engine.addEntity(player); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertTrue(sensor.contactList.first().isTouching()); assertTrue(sensor.positive); @@ -150,13 +224,39 @@ public void bodyCollidesBodyTest() { @Test - public void filterTest() { - identityPlayer.collisionMask = (short) ~identityGround.category; + public void radarAxisYnegativeTargetTagInvalidTest() { + identityPlayer.collisionMask = (short) identityGround.category; + sensor.targetTag = "test"; engine.addEntity(player); engine.update(1); physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertEquals(0, sensor.contactList.size); assertFalse(sensor.positive); @@ -166,31 +266,85 @@ public void filterTest() { @Test - public void endBodyCollisionTest() { + public void radarAxisYnegativeTargetPropertyTest() { + identityPlayer.collisionMask = (short) identityGround.category; + sensor.propertyName = "GroundProperty"; engine.addEntity(player); engine.update(1); physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertTrue(sensor.contactList.first().isTouching()); assertTrue(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); - bodyPlayer.applyForce(0, 60, bodyPlayer.getWorldCenter().x, bodyPlayer.getWorldCenter().y, true); + } + + + @Test + public void radarAxisYnegativeTargetPropertyInvalidTest() { + identityPlayer.collisionMask = (short) identityGround.category; + sensor.propertyName = "test"; + engine.addEntity(player); - physic.step(1f, 8, 3); engine.update(1); - physic.step(1f, 8, 3); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + engine.update(1); - System.out.println("Body position3: " + bodyPlayer.getPosition()); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - System.out.println("Body position4: " + bodyPlayer.getPosition()); - assertEquals(0, sensor.contactList.size); + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); assertFalse(sensor.positive); - assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - } + engine.update(1); + physic.step(1, 8, 3); + Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + engine.update(1); + physic.step(1, 8, 3); + 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); + } } From c19553593f23761bf3ac6e66a090160738dfb2f0 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Tue, 13 Jan 2015 11:03:23 +0100 Subject: [PATCH 08/11] implementando NearSensor --- .../entities/PlayerPlatform.java | 6 +- .../sensors/NearSensorComponent.java | 10 + .../logicbricks/core/LogicBricksEngine.java | 45 ++++- .../com/indignado/logicbricks/core/World.java | 37 ++-- .../logicbricks/core/sensors/NearSensor.java | 37 ++++ .../systems/sensors/NearSensorSystem.java | 174 ++++++++++++++++++ .../systems/sensors/RadarSensorSystem.java | 2 +- .../utils/builders/BricksUtils.java | 1 + .../builders/sensors/NearSensorBuilder.java | 60 ++++++ 9 files changed, 338 insertions(+), 34 deletions(-) create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/NearSensorComponent.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/NearSensorBuilder.java diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index b6ca15d..3e8e6d7 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -135,10 +135,8 @@ public Entity createEntity() { .connectToSensor(alwaysSensorCamera) .connectToActuator(cameraActuator); - RadarSensor radarSensor = BricksUtils.getBuilder(RadarSensorBuilder.class) + NearSensor nearSensor = BricksUtils.getBuilder(NearSensorBuilder.class) .setTargetTag("test") - .setAngle(33) - .setAxis(RadarSensor.Axis.Xpositive) .setDistance(4) .setName("sensorPlayer") .getBrick(); @@ -149,7 +147,7 @@ public Entity createEntity() { .getBrick(); entityBuilder.addController(controllerRadar, "Idle", "Walking", "Jump", "Fall") - .connectToSensor(radarSensor) + .connectToSensor(nearSensor) .connectToActuator(cameraActuator); // Collision Sensor ---------------------------------------------------------------- diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/NearSensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/NearSensorComponent.java new file mode 100644 index 0000000..16f6906 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/NearSensorComponent.java @@ -0,0 +1,10 @@ +package com.indignado.logicbricks.components.sensors; + +import com.indignado.logicbricks.core.sensors.NearSensor; + +/** + * @author Rubentxu + */ +public class NearSensorComponent extends SensorComponent { + +} diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java index 5d1f072..c098e02 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java @@ -1,10 +1,11 @@ package com.indignado.logicbricks.core; -import com.badlogic.ashley.core.Component; -import com.badlogic.ashley.core.Entity; -import com.badlogic.ashley.core.PooledEngine; +import com.badlogic.ashley.core.*; +import com.badlogic.gdx.InputMultiplexer; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.ai.msg.MessageDispatcher; import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.ContactListener; import com.badlogic.gdx.physics.box2d.Filter; import com.badlogic.gdx.physics.box2d.Fixture; import com.badlogic.gdx.utils.Array; @@ -23,7 +24,8 @@ public class LogicBricksEngine extends PooledEngine { private ObjectMap idEntities; private ObjectMap> tagEntities; private DataPools dataPools; - + private InputMultiplexer inputs; + private Array contactSystems; public LogicBricksEngine() { this(10, 100, 10, 100, 50, 200); @@ -34,9 +36,11 @@ public LogicBricksEngine() { public LogicBricksEngine(int entityPoolInitialSize, int entityPoolMaxSize, int componentPoolInitialSize, int componentPoolMaxSize, int bricksPoolInitialSize, int brickPoolMaxSize) { super(entityPoolInitialSize, entityPoolMaxSize, componentPoolInitialSize, componentPoolMaxSize); - this.idEntities = new ObjectMap(); - this.tagEntities = new ObjectMap>(); - this.dataPools = new DataPools(bricksPoolInitialSize, brickPoolMaxSize); + idEntities = new ObjectMap(); + tagEntities = new ObjectMap>(); + dataPools = new DataPools(bricksPoolInitialSize, brickPoolMaxSize); + inputs = new InputMultiplexer(); + contactSystems = new Array<>(); } @@ -53,6 +57,25 @@ protected void removeEntityInternal(Entity entity) { } + @Override + public void addSystem (EntitySystem system) { + super.addSystem(system); + if(EntityListener.class.isInstance(system)) { + this.addEntityListener((EntityListener) system); + + } + if(InputProcessor.class.isInstance(system)) { + inputs.addProcessor((InputProcessor) system); + + } + if(ContactListener.class.isInstance(system)) { + contactSystems.add((ContactListener) system); + + } + + } + + @Override public void addEntity(Entity entity) { super.addEntity(entity); @@ -135,6 +158,14 @@ public D createData(Class dataType) { } + public InputMultiplexer getInputs() { + return inputs; + } + + public Array getContactSystems() { + return contactSystems; + } + private class DataPools { private ObjectMap, ReflectionPool> pools; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java index a259234..a69a29f 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java @@ -60,23 +60,16 @@ public World(com.badlogic.gdx.physics.box2d.World physics, AssetManager assetMan engine.addSystem(new AnimationSystem()); engine.addSystem(new StateSystem(this)); engine.addSystem(new KeyboardSensorSystem()); - engine.addEntityListener(engine.getSystem(KeyboardSensorSystem.class)); engine.addSystem(new MouseSensorSystem(this)); - engine.addEntityListener(engine.getSystem(MouseSensorSystem.class)); engine.addSystem(new CollisionSensorSystem()); - engine.addEntityListener(engine.getSystem(CollisionSensorSystem.class)); engine.addSystem(new RadarSensorSystem()); - engine.addEntityListener(engine.getSystem(RadarSensorSystem.class)); + engine.addSystem(new NearSensorSystem()); engine.addSystem(new MessageSensorSystem()); - engine.addEntityListener(engine.getSystem(MessageSensorSystem.class)); engine.addSystem(new InstanceEntityActuatorSystem(this)); engine.addSystem(new PropertySensorSystem()); - engine.addEntityListener(engine.getSystem(PropertySensorSystem.class)); - InputMultiplexer input = new InputMultiplexer(); - input.addProcessor(engine.getSystem(KeyboardSensorSystem.class)); - input.addProcessor(engine.getSystem(MouseSensorSystem.class)); - Gdx.input.setInputProcessor(input); + + Gdx.input.setInputProcessor(engine.getInputs()); physics.setContactListener(this); entityBuilder = new EntityBuilder(engine); @@ -254,9 +247,9 @@ public SpriteBatch getBatch() { @Override public void beginContact(Contact contact) { - CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if (css != null) { - css.beginContact(contact); + for (ContactListener contactListener : engine.getContactSystems()) { + contactListener.beginContact(contact); + } } @@ -264,9 +257,9 @@ public void beginContact(Contact contact) { @Override public void endContact(Contact contact) { - CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if (css != null) { - css.endContact(contact); + for (ContactListener contactListener : engine.getContactSystems()) { + contactListener.endContact(contact); + } } @@ -274,9 +267,9 @@ public void endContact(Contact contact) { @Override public void preSolve(Contact contact, Manifold oldManifold) { - CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if (css != null) { - css.preSolve(contact, oldManifold); + for (ContactListener contactListener : engine.getContactSystems()) { + contactListener.preSolve(contact, oldManifold); + } } @@ -284,9 +277,9 @@ public void preSolve(Contact contact, Manifold oldManifold) { @Override public void postSolve(Contact contact, ContactImpulse impulse) { - CollisionSensorSystem css = engine.getSystem(CollisionSensorSystem.class); - if (css != null) { - css.postSolve(contact, impulse); + for (ContactListener contactListener : engine.getContactSystems()) { + contactListener.postSolve(contact, impulse); + } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java new file mode 100644 index 0000000..d9e7ba6 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java @@ -0,0 +1,37 @@ +package com.indignado.logicbricks.core.sensors; + +import com.badlogic.gdx.physics.box2d.Body; +import com.badlogic.gdx.physics.box2d.Contact; +import com.badlogic.gdx.physics.box2d.Transform; +import com.badlogic.gdx.utils.ObjectSet; + + +/** + * @author Rubentxu + */ +public class NearSensor extends Sensor { + + // Config Values + public String targetTag; + public String targetPropertyName; + public float distance = 0; + public float resetDistance = 0; + public Body attachedRigidBody; + + // Signal Values + public ObjectSet contactList = new ObjectSet(); + + + @Override + public void reset() { + super.reset(); + targetTag = null; + targetPropertyName = null; + distance = 0; + resetDistance = 0; + attachedRigidBody = null; + contactList.clear(); + + } + +} \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java new file mode 100644 index 0000000..fe861a4 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java @@ -0,0 +1,174 @@ +package com.indignado.logicbricks.systems.sensors; + +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntityListener; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.*; +import com.badlogic.gdx.utils.IntMap; +import com.badlogic.gdx.utils.ObjectSet; +import com.indignado.logicbricks.components.BlackBoardComponent; +import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.components.RigidBodiesComponents; +import com.indignado.logicbricks.components.sensors.NearSensorComponent; +import com.indignado.logicbricks.core.LogicBricksException; +import com.indignado.logicbricks.core.sensors.NearSensor; +import com.indignado.logicbricks.utils.Log; +import com.indignado.logicbricks.utils.builders.FixtureDefBuilder; + +/** + * @author Rubentxu + */ +public class NearSensorSystem extends SensorSystem implements ContactListener, EntityListener { + + + public NearSensorSystem() { + super(NearSensorComponent.class); + + } + + + @Override + public boolean query(NearSensor sensor, float deltaTime) { + for (Contact contact : sensor.contactList) { + Log.debug(tag, "sensor contact %b", contact.isTouching()); + if (contact.isTouching()) return true; + } + return false; + + } + + + @Override + public void beginContact(Contact contact) { + Object sensorA = contact.getFixtureA().getUserData(); + Object sensorB = contact.getFixtureB().getUserData(); + + if (sensorA != null && sensorA instanceof NearSensor) { + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + Body bodyB = contact.getFixtureB().getBody(); + processNearSensors(entityB, bodyB, contact, (NearSensor) sensorA, true); + + } else if (sensorB != null && sensorB instanceof NearSensor) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + Body bodyA = contact.getFixtureA().getBody(); + processNearSensors(entityA, bodyA, contact, (NearSensor) sensorB, true); + + } + + } + + + @Override + public void endContact(Contact contact) { + Object sensorA = contact.getFixtureA().getUserData(); + Object sensorB = contact.getFixtureB().getUserData(); + + if (sensorA != null && sensorA instanceof NearSensor) { + Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); + Body bodyB = contact.getFixtureB().getBody(); + processNearSensors(entityB, bodyB,contact, (NearSensor) sensorA, false); + + } else if (sensorB != null && sensorB instanceof NearSensor) { + Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); + Body bodyA = contact.getFixtureA().getBody(); + processNearSensors(entityA, bodyA, contact, (NearSensor) sensorB, false); + + } + + } + + + @Override + public void preSolve(Contact contact, Manifold oldManifold) { + + } + + + @Override + public void postSolve(Contact contact, ContactImpulse impulse) { + + } + + + private void processNearSensors(Entity entity, Body body, Contact contact, NearSensor nearSensor, boolean addMode) { + BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); + IdentityComponent identity = entity.getComponent(IdentityComponent.class); + + if((body.getPosition().dst(nearSensor.attachedRigidBody.getPosition()) <= nearSensor.distance && addMode) || + !addMode && nearSensor.contactList.contains(contact)) + + if (blackBoard != null && nearSensor.targetPropertyName != null && blackBoard.hasProperty(nearSensor.targetPropertyName)) { + if (addMode) nearSensor.contactList.add(contact); + else nearSensor.contactList.remove(contact); + + } else if (nearSensor.targetTag != null && identity.tag.equals(nearSensor.targetTag)) { + if (addMode) nearSensor.contactList.add(contact); + else nearSensor.contactList.remove(contact); + + } else if (nearSensor.targetTag == null && nearSensor.targetPropertyName == null){ + if (addMode) nearSensor.contactList.add(contact); + else nearSensor.contactList.remove(contact); + } + + + } + + + @Override + public void entityAdded(Entity entity) { + Log.debug(tag, "EntityAdded add nearSensors"); + ObjectSet nearSensors = getNearSensors(entity); + if (nearSensors.size > 0) { + Log.debug(tag, "Create Near"); + createNear(entity, nearSensors); + + } + + } + + + @Override + public void entityRemoved(Entity entity) { + + } + + + private void createNear(Entity entity, ObjectSet nearSensors) { + FixtureDefBuilder fixtureBuilder = new FixtureDefBuilder(); + RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); + if (rigidBodiesComponent == null) + throw new LogicBricksException(tag, "Failed to create near sensor, there is no rigidBody"); + + for (NearSensor sensor : nearSensors) { + if (sensor.distance == 0) + throw new LogicBricksException(tag, "nearSensor distance can not be zero"); + if(sensor.attachedRigidBody == null) sensor.attachedRigidBody = rigidBodiesComponent.rigidBodies.first(); + + FixtureDef nearFixture = fixtureBuilder + .circleShape((sensor.resetDistance == 0)? sensor.distance: sensor.resetDistance) + .sensor() + .build(); + sensor.attachedRigidBody.createFixture(nearFixture).setUserData(sensor); + Log.debug(tag, "Create Fixture nearSensor"); + } + + } + + + private ObjectSet getNearSensors(Entity entity) { + ObjectSet nearSensors = new ObjectSet(); + NearSensorComponent nearSensorComponent = entity.getComponent(NearSensorComponent.class); + if (nearSensorComponent != null) { + IntMap.Values> values = nearSensorComponent.sensors.values(); + while (values.hasNext()) { + for (NearSensor sensor : values.next()) { + nearSensors.add(sensor); + + } + } + } + return nearSensors; + + } + +} diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 2dd2803..17761e2 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -145,7 +145,7 @@ private void createRadar(Body body, ObjectSet radarSensors) { .sensor() .build(); body.createFixture(radarFixture).setUserData(sensor); - Log.debug(tag, "Create Fixture sensorRadar"); + Log.debug(tag, "Create Fixture radarSensor"); } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java index d9347fd..d03779a 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java @@ -40,6 +40,7 @@ private BricksUtils() { bricksClasses.put(MessageSensor.class, new BricksClasses(MessageSensorComponent.class, MessageSensorSystem.class)); bricksClasses.put(DelaySensor.class, new BricksClasses(DelaySensorComponent.class, DelaySensorSystem.class)); bricksClasses.put(RadarSensor.class, new BricksClasses(RadarSensorComponent.class, RadarSensorSystem.class)); + bricksClasses.put(NearSensor.class, new BricksClasses(NearSensorComponent.class, NearSensorSystem.class)); bricksClasses.put(ConditionalController.class, new BricksClasses(ConditionalControllerComponent.class, ConditionalControllerSystem.class)); bricksClasses.put(ScriptController.class, new BricksClasses(ScriptControllerComponent.class, ScriptControllerSystem.class)); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/NearSensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/NearSensorBuilder.java new file mode 100644 index 0000000..ab16187 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/NearSensorBuilder.java @@ -0,0 +1,60 @@ +package com.indignado.logicbricks.utils.builders.sensors; + +import com.badlogic.gdx.physics.box2d.Body; +import com.indignado.logicbricks.core.sensors.NearSensor; + +/** + * @author Rubentxu. + */ +public class NearSensorBuilder extends SensorBuilder { + + public NearSensorBuilder() { + brick = new NearSensor(); + + } + + + public NearSensorBuilder setTargetTag(String tag) { + brick.targetTag = tag; + return this; + + } + + + public NearSensorBuilder setTargetPropertyName(String name) { + brick.targetPropertyName = name; + return this; + + } + + + public NearSensorBuilder setDistance(float distance) { + brick.distance = distance; + return this; + + } + + + public NearSensorBuilder setResetDistance(float resetDistance) { + brick.resetDistance = resetDistance; + return this; + + } + + + public NearSensorBuilder setAttachedRigidBody(Body rigidBody) { + brick.attachedRigidBody = rigidBody; + return this; + + } + + + @Override + public NearSensor getBrick() { + NearSensor brickTemp = brick; + brick = new NearSensor(); + return brickTemp; + + } + +} From 1b407a9ed601a231130258f5db5ee48ca3628364 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Wed, 14 Jan 2015 18:25:35 +0100 Subject: [PATCH 09/11] Completado NearSensor con testing --- .../entities/PlayerPlatform.java | 3 +- .../logicbricks/components/data/Property.java | 9 + .../com/indignado/logicbricks/core/World.java | 17 +- .../logicbricks/core/sensors/NearSensor.java | 8 +- .../actuators/StateActuatorSystem.java | 1 - .../systems/sensors/NearSensorSystem.java | 142 +++-- .../systems/sensors/RadarSensorSystem.java | 11 +- .../utils/builders/BricksUtils.java | 2 +- .../sensors/CollisionSensorSystemTest.java | 1 - .../sensors/KeyboardSensorSystemTest.java | 1 - .../sensors/MessageSensorSystemTest.java | 1 - .../sensors/MouseSensorSystemTest.java | 1 - .../systems/sensors/NearSensorSystemTest.java | 551 ++++++++++++++++++ .../sensors/PropertySensorSystemTest.java | 1 - .../sensors/RadarSensorSystemTest.java | 142 +++-- 15 files changed, 757 insertions(+), 134 deletions(-) create mode 100644 gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index 3e8e6d7..f7e367d 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -147,8 +147,7 @@ public Entity createEntity() { .getBrick(); entityBuilder.addController(controllerRadar, "Idle", "Walking", "Jump", "Fall") - .connectToSensor(nearSensor) - .connectToActuator(cameraActuator); + .connectToSensor(nearSensor); // Collision Sensor ---------------------------------------------------------------- CollisionSensor collisionSensorGround = BricksUtils.getBuilder(CollisionSensorBuilder.class) diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java index 8565bea..22a4bac 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java @@ -42,4 +42,13 @@ public void setObservable(boolean isObservable) { this.isObservable = isObservable; } + + @Override + public String toString() { + return "Property{" + + "name='" + name + '\'' + + ", value=" + value + + '}'; + } + } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java index a69a29f..5d74d2a 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java @@ -16,6 +16,7 @@ import com.badlogic.gdx.utils.TimeUtils; import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.systems.*; +import com.indignado.logicbricks.systems.actuators.CameraActuatorSystem; import com.indignado.logicbricks.systems.actuators.InstanceEntityActuatorSystem; import com.indignado.logicbricks.systems.sensors.*; import com.indignado.logicbricks.utils.Log; @@ -59,18 +60,9 @@ public World(com.badlogic.gdx.physics.box2d.World physics, AssetManager assetMan engine.addSystem(viewPositionSystem); engine.addSystem(new AnimationSystem()); engine.addSystem(new StateSystem(this)); - engine.addSystem(new KeyboardSensorSystem()); engine.addSystem(new MouseSensorSystem(this)); - engine.addSystem(new CollisionSensorSystem()); - engine.addSystem(new RadarSensorSystem()); - engine.addSystem(new NearSensorSystem()); - engine.addSystem(new MessageSensorSystem()); engine.addSystem(new InstanceEntityActuatorSystem(this)); - engine.addSystem(new PropertySensorSystem()); - - - Gdx.input.setInputProcessor(engine.getInputs()); - physics.setContactListener(this); + engine.addSystem(new CollisionSensorSystem()); entityBuilder = new EntityBuilder(engine); bodyBuilder = new BodyBuilder(physics); @@ -78,10 +70,13 @@ public World(com.badlogic.gdx.physics.box2d.World physics, AssetManager assetMan this.entityFactories = new ObjectMap, EntityFactory>(); this.categoryBitsManager = new CategoryBitsManager(); engine.update(0); - Gdx.app.setLogLevel(Settings.debugLevel); currentTime = TimeUtils.millis() / 1000.0; accumulatorPhysics = 0.0; + Gdx.input.setInputProcessor(engine.getInputs()); + physics.setContactListener(this); + Gdx.app.setLogLevel(Settings.debugLevel); + } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java index d9e7ba6..b40d3db 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java @@ -19,7 +19,9 @@ public class NearSensor extends Sensor { public Body attachedRigidBody; // Signal Values - public ObjectSet contactList = new ObjectSet(); + public ObjectSet distanceContactList = new ObjectSet(); + public ObjectSet resetDistanceContactList = new ObjectSet(); + public boolean initContact = false; @Override @@ -30,7 +32,9 @@ public void reset() { distance = 0; resetDistance = 0; attachedRigidBody = null; - contactList.clear(); + distanceContactList.clear(); + resetDistanceContactList.clear(); + initContact = false; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/StateActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/StateActuatorSystem.java index 761258c..47b146b 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/StateActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/StateActuatorSystem.java @@ -23,7 +23,6 @@ public void processActuator(StateActuator actuator, float deltaTime) { Log.debug(tag, "E) Actuator %s changeState %s", actuator.name, actuator.changeState); stateComponent.changeCurrentState(actuator.changeState); - } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java index fe861a4..569eece 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java @@ -9,6 +9,7 @@ import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.RigidBodiesComponents; +import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.components.sensors.NearSensorComponent; import com.indignado.logicbricks.core.LogicBricksException; import com.indignado.logicbricks.core.sensors.NearSensor; @@ -29,29 +30,38 @@ public NearSensorSystem() { @Override public boolean query(NearSensor sensor, float deltaTime) { - for (Contact contact : sensor.contactList) { - Log.debug(tag, "sensor contact %b", contact.isTouching()); - if (contact.isTouching()) return true; + boolean isActive = false; + + if(sensor.distanceContactList.size > 0) { + isActive = true; + if(!sensor.initContact) sensor.initContact = true; + + } else if(sensor.initContact && sensor.resetDistanceContactList.size > 0) { + isActive = true; + + } else if(sensor.initContact) { + sensor.initContact = false; + } - return false; + return isActive; } @Override public void beginContact(Contact contact) { - Object sensorA = contact.getFixtureA().getUserData(); - Object sensorB = contact.getFixtureB().getUserData(); + Object propertyA = contact.getFixtureA().getUserData(); + Object propertyB = contact.getFixtureB().getUserData(); + Log.debug(tag, "Begin contact %b A %s B %s Apos %s Bpos %s", contact.isTouching(), propertyA, propertyB, + contact.getFixtureA().getBody().getPosition(), contact.getFixtureB().getBody().getPosition()); - if (sensorA != null && sensorA instanceof NearSensor) { + if (propertyA != null && propertyA instanceof Property) { Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - Body bodyB = contact.getFixtureB().getBody(); - processNearSensors(entityB, bodyB, contact, (NearSensor) sensorA, true); + processAddNearSensors(entityB, contact, (Property) propertyA); - } else if (sensorB != null && sensorB instanceof NearSensor) { + } else if (propertyB != null && propertyB instanceof Property) { Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Body bodyA = contact.getFixtureA().getBody(); - processNearSensors(entityA, bodyA, contact, (NearSensor) sensorB, true); + processAddNearSensors(entityA, contact, (Property) propertyB); } @@ -60,18 +70,17 @@ public void beginContact(Contact contact) { @Override public void endContact(Contact contact) { - Object sensorA = contact.getFixtureA().getUserData(); - Object sensorB = contact.getFixtureB().getUserData(); + Log.debug(tag, "End contact sensor contact %b", contact.isTouching()); + Object propertyA = contact.getFixtureA().getUserData(); + Object propertyB = contact.getFixtureB().getUserData(); + Log.debug(tag, "End contact %b A %s B %s Apos %s Bpos %s", contact.isTouching(), propertyA, propertyB, + contact.getFixtureA().getBody().getPosition(), contact.getFixtureB().getBody().getPosition()); - if (sensorA != null && sensorA instanceof NearSensor) { - Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); - Body bodyB = contact.getFixtureB().getBody(); - processNearSensors(entityB, bodyB,contact, (NearSensor) sensorA, false); + if (propertyA != null && propertyA instanceof Property) { + processRemoveNearSensors(contact, (Property) propertyA); - } else if (sensorB != null && sensorB instanceof NearSensor) { - Entity entityA = (Entity) contact.getFixtureA().getBody().getUserData(); - Body bodyA = contact.getFixtureA().getBody(); - processNearSensors(entityA, bodyA, contact, (NearSensor) sensorB, false); + } else if (propertyB != null && propertyB instanceof Property) { + processRemoveNearSensors(contact, (Property) propertyB); } @@ -90,30 +99,74 @@ public void postSolve(Contact contact, ContactImpulse impulse) { } - private void processNearSensors(Entity entity, Body body, Contact contact, NearSensor nearSensor, boolean addMode) { - BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); - IdentityComponent identity = entity.getComponent(IdentityComponent.class); + private void processAddNearSensors(Entity entity, Contact contact, Property property) { + NearSensor nearSensor = (NearSensor) property.getValue(); - if((body.getPosition().dst(nearSensor.attachedRigidBody.getPosition()) <= nearSensor.distance && addMode) || - !addMode && nearSensor.contactList.contains(contact)) + if (nearSensor.targetPropertyName != null ) { + BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); + if(blackBoard.hasProperty(nearSensor.targetPropertyName)) { + if (property.getName().equals("NearSensor")) { + nearSensor.distanceContactList.add(contact); + } else if (property.getName().equals("ResetNearSensor")) { + nearSensor.resetDistanceContactList.add(contact); + } + Log.debug(tag, "Add Contact targetPropertyName"); + } - if (blackBoard != null && nearSensor.targetPropertyName != null && blackBoard.hasProperty(nearSensor.targetPropertyName)) { - if (addMode) nearSensor.contactList.add(contact); - else nearSensor.contactList.remove(contact); + } else if (nearSensor.targetTag != null) { + IdentityComponent identity = entity.getComponent(IdentityComponent.class); + if( identity.tag.equals(nearSensor.targetTag)) { + if (property.getName().equals("NearSensor")) { + nearSensor.distanceContactList.add(contact); + } else if (property.getName().equals("ResetNearSensor")) { + nearSensor.resetDistanceContactList.add(contact); + } + Log.debug(tag, "Add Contact targetTag"); + } - } else if (nearSensor.targetTag != null && identity.tag.equals(nearSensor.targetTag)) { - if (addMode) nearSensor.contactList.add(contact); - else nearSensor.contactList.remove(contact); - } else if (nearSensor.targetTag == null && nearSensor.targetPropertyName == null){ - if (addMode) nearSensor.contactList.add(contact); - else nearSensor.contactList.remove(contact); + } else if (nearSensor.targetTag == null && nearSensor.targetPropertyName == null) { + if (property.getName().equals("NearSensor")) { + nearSensor.distanceContactList.add(contact); + } else if (property.getName().equals("ResetNearSensor")) { + nearSensor.resetDistanceContactList.add(contact); + } + Log.debug(tag, "Add Contact"); + } + Log.debug(tag, "distanceContactList size %d resetDistanceContactList %d", nearSensor.distanceContactList.size, + nearSensor.resetDistanceContactList.size); } + private void processRemoveNearSensors(Contact contact, Property property) { + NearSensor nearSensor = (NearSensor) property.getValue(); + + if (property.getName().equals("NearSensor") && nearSensor.distanceContactList.contains(contact)) { + nearSensor.distanceContactList.remove(contact); + + } else if (property.getName().equals("ResetNearSensor") && nearSensor.resetDistanceContactList.contains(contact)) { + nearSensor.resetDistanceContactList.remove(contact); + + } + Log.debug(tag, "Remove NearSensor distanceContactList size %d resetDistanceContactList %d", nearSensor.distanceContactList.size, + nearSensor.resetDistanceContactList.size); + + } + + + private boolean inTheDistance(Body body, Contact contact, float distance) { + WorldManifold manifold = contact.getWorldManifold(); + for (Vector2 point : manifold.getPoints()) { + if (body.getPosition().dst(point) <= distance) return true; + } + return false; + + } + + @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add nearSensors"); @@ -142,14 +195,25 @@ private void createNear(Entity entity, ObjectSet nearSensors) { for (NearSensor sensor : nearSensors) { if (sensor.distance == 0) throw new LogicBricksException(tag, "nearSensor distance can not be zero"); - if(sensor.attachedRigidBody == null) sensor.attachedRigidBody = rigidBodiesComponent.rigidBodies.first(); + if (sensor.attachedRigidBody == null) sensor.attachedRigidBody = rigidBodiesComponent.rigidBodies.first(); FixtureDef nearFixture = fixtureBuilder - .circleShape((sensor.resetDistance == 0)? sensor.distance: sensor.resetDistance) + .circleShape(sensor.distance) .sensor() .build(); - sensor.attachedRigidBody.createFixture(nearFixture).setUserData(sensor); + sensor.attachedRigidBody.createFixture(nearFixture).setUserData(new Property("NearSensor", sensor)); + if (sensor.resetDistance != 0) { + if (sensor.resetDistance <= sensor.distance) + throw new LogicBricksException(tag, "ResetDistance can not be less than or equal to the distance"); + + FixtureDef nearResetFixture = fixtureBuilder + .circleShape(sensor.resetDistance) + .sensor() + .build(); + sensor.attachedRigidBody.createFixture(nearResetFixture).setUserData(new Property("ResetNearSensor", sensor)); + } Log.debug(tag, "Create Fixture nearSensor"); + } } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 17761e2..0a5d1bb 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -43,6 +43,8 @@ public boolean query(RadarSensor sensor, float deltaTime) { public void beginContact(Contact contact) { Object sensorA = contact.getFixtureA().getUserData(); Object sensorB = contact.getFixtureB().getUserData(); + Log.debug(tag, "Begin contact %b A %s B %s Apos %s Bpos %s", contact.isTouching(), sensorA, sensorB, + contact.getFixtureA().getBody().getPosition(), contact.getFixtureB().getBody().getPosition()); if (sensorA != null && sensorA instanceof RadarSensor) { Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); @@ -59,6 +61,8 @@ public void beginContact(Contact contact) { public void endContact(Contact contact) { Object sensorA = contact.getFixtureA().getUserData(); Object sensorB = contact.getFixtureB().getUserData(); + Log.debug(tag, "End contact %b A %s B %s Apos %s Bpos %s", contact.isTouching(), sensorA, sensorB, + contact.getFixtureA().getBody().getPosition(), contact.getFixtureB().getBody().getPosition()); if (sensorA != null && sensorA instanceof RadarSensor) { Entity entityB = (Entity) contact.getFixtureB().getBody().getUserData(); @@ -88,17 +92,22 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad IdentityComponent identity = entity.getComponent(IdentityComponent.class); if (blackBoard != null && radarSensor.propertyName != null && blackBoard.hasProperty(radarSensor.propertyName)) { + Log.debug(tag, "AddMode %b propertyName", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); } else if (radarSensor.targetTag != null && identity.tag.equals(radarSensor.targetTag)) { + Log.debug(tag, "AddMode %b targetTag", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); + } else if (radarSensor.targetTag == null && radarSensor.propertyName == null){ + Log.debug(tag, "AddMode %b null targets", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); - } + } + Log.debug(tag, "ContactList size %d", radarSensor.contactList.size); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java index d03779a..1befbcc 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java @@ -46,9 +46,9 @@ private BricksUtils() { bricksClasses.put(ScriptController.class, new BricksClasses(ScriptControllerComponent.class, ScriptControllerSystem.class)); bricksClasses.put(CameraActuator.class, new BricksClasses(CameraActuatorComponent.class, CameraActuatorSystem.class)); - bricksClasses.put(InstanceEntityActuator.class, new BricksClasses(InstanceEntityActuatorComponent.class, InstanceEntityActuatorSystem.class)); bricksClasses.put(EditRigidBodyActuator.class, new BricksClasses(EditRigidBodyActuatorComponent.class, EditRigidBodyActuatorSystem.class)); bricksClasses.put(EffectActuator.class, new BricksClasses(EffectActuatorComponent.class, EffectActuatorSystem.class)); + bricksClasses.put(InstanceEntityActuator.class, new BricksClasses(InstanceEntityActuatorComponent.class, InstanceEntityActuatorSystem.class)); bricksClasses.put(MessageActuator.class, new BricksClasses(MessageActuatorComponent.class, MessageActuatorSystem.class)); bricksClasses.put(MotionActuator.class, new BricksClasses(MotionActuatorComponent.class, MotionActuatorSystem.class)); bricksClasses.put(PropertyActuator.class, new BricksClasses(PropertyActuatorComponent.class, PropertyActuatorSystem.class)); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java index 8abfe80..c0be665 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/CollisionSensorSystemTest.java @@ -43,7 +43,6 @@ public CollisionSensorSystemTest() { super(); sensorSystem = new CollisionSensorSystem(); engine.addSystem(sensorSystem); - engine.addEntityListener(sensorSystem); GdxNativesLoader.load(); physic = new World(new Vector2(0, -9.81f), true); physic.setContactListener(sensorSystem); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java index 7ee1cd3..6d12ebf 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/KeyboardSensorSystemTest.java @@ -25,7 +25,6 @@ public KeyboardSensorSystemTest() { super(); sensorSystem = new KeyboardSensorSystem(); engine.addSystem(sensorSystem); - engine.addEntityListener(sensorSystem); } diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MessageSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MessageSensorSystemTest.java index 4f4349a..91c3b58 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MessageSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MessageSensorSystemTest.java @@ -31,7 +31,6 @@ public MessageSensorSystemTest() { super(); sensorSystem = new MessageSensorSystem(); engine.addSystem(sensorSystem); - engine.addEntityListener(sensorSystem); } diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java index f259dd3..cd9c944 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java @@ -31,7 +31,6 @@ public MouseSensorSystemTest() { super(); sensorSystem = new MouseSensorSystem(null); engine.addSystem(sensorSystem); - engine.addEntityListener(sensorSystem); } diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java new file mode 100644 index 0000000..d3228bc --- /dev/null +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java @@ -0,0 +1,551 @@ +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.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.utils.GdxNativesLoader; +import com.indignado.logicbricks.components.BlackBoardComponent; +import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.components.RigidBodiesComponents; +import com.indignado.logicbricks.components.data.Property; +import com.indignado.logicbricks.core.CategoryBitsManager; +import com.indignado.logicbricks.core.LogicBrick; +import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.sensors.NearSensor; +import com.indignado.logicbricks.core.sensors.NearSensor; +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.Log; +import com.indignado.logicbricks.utils.builders.BodyBuilder; +import com.indignado.logicbricks.utils.builders.BricksUtils; +import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; +import com.indignado.logicbricks.utils.builders.sensors.NearSensorBuilder; +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 sensor; + IdentityComponent identityPlayer; + IdentityComponent identityGround; + private World physic; + private Entity ground; + private Body bodyPlayer; + private Body bodyGround; + private RigidBodiesComponents rigidByPlayer; + private RigidBodiesComponents rigidByGround; + private CategoryBitsManager categoryBitsManager; + private BodyBuilder bodyBuilder; + + + public NearSensorSystemTest() { + super(); + sensorSystem = new NearSensorSystem(); + engine.addSystem(sensorSystem); + GdxNativesLoader.load(); + physic = new World(new Vector2(0, 0f), true); + physic.setContactListener(sensorSystem); + bodyBuilder = new BodyBuilder(physic); + + } + + + @Override + public void tearDown() { + player = null; + ground = null; + bodyPlayer = null; + bodyGround = null; + rigidByPlayer = null; + rigidByGround = null; + sensor = null; + identityPlayer = null; + + } + + + @Override + protected void createContext() { + // Create Player Entity + this.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(); + + rigidByPlayer = entityBuilder.getComponent(RigidBodiesComponents.class); + rigidByPlayer.rigidBodies.add(bodyPlayer); + + sensor = BricksUtils.getBuilder(NearSensorBuilder.class) + .setDistance(4) + .setName("sensorPlayer") + .getBrick(); + + ConditionalController controllerGround = BricksUtils.getBuilder(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(); + + rigidByGround = entityBuilder.getComponent(RigidBodiesComponents.class); + rigidByGround.rigidBodies.add(bodyGround); + + ground = entityBuilder.getEntity(); + engine.addEntity(ground); + + } + + + @Test + public void defaultTest() { + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "C) 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, 0)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + } + + + @Test + public void targetTagTest() { + sensor.targetTag = "Ground"; + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "C) 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, 0)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + } + + + @Test + public void targetTagInvalidTest() { + sensor.targetTag = "test"; + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "C) 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, 0)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + } + + + @Test + public void targetPropertyInvalidTest() { + sensor.targetPropertyName = "test"; + engine.addEntity(player); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + engine.update(1); + physic.step(1, 8, 3); + Log.debug("NearSensorSystemTest","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); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "C) 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, 2)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + } + + + + @Test + public void resetDistanceTargetTagTest() { + sensor.targetTag = "Ground"; + sensor.resetDistance = 6; + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "C) 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, 2)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + } + + + @Test + public void resetDistanceTargetTagInvalidTest() { + sensor.targetTag = "Test"; + sensor.resetDistance = 6; + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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, 2)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "C) 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, 2)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertTrue(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + } + + + @Test + public void resetDistanceTargetPropertyInvalidTest() { + identityPlayer.collisionMask = (short) identityGround.category; + sensor.targetPropertyName = "Test"; + sensor.resetDistance = 6; + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest","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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "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, 2)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + physic.step(1, 8, 3); + engine.update(1); + Log.debug("NearSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); + + } + + +} diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java index 941f289..4b431ab 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java @@ -30,7 +30,6 @@ public PropertySensorSystemTest() { super(); sensorSystem = new PropertySensorSystem(); engine.addSystem(sensorSystem); - engine.addEntityListener(sensorSystem); } diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java index 4f622ef..77c5ece 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -47,13 +47,11 @@ public RadarSensorSystemTest() { super(); sensorSystem = new RadarSensorSystem(); engine.addSystem(sensorSystem); - engine.addEntityListener(sensorSystem); GdxNativesLoader.load(); - physic = new World(new Vector2(0, -9.81f), true); + physic = new World(new Vector2(0, 0f), true); physic.setContactListener(sensorSystem); bodyBuilder = new BodyBuilder(physic); - } @@ -70,6 +68,7 @@ public void tearDown() { } + @Override protected void createContext() { // Create Player Entity @@ -84,7 +83,7 @@ protected void createContext() { .fixture(bodyBuilder.fixtureDefBuilder() .boxShape(1, 1) .restitution(0f)) - .position(40, 27) + .position(0, 6) .mass(1f) .type(BodyDef.BodyType.DynamicBody) .build(); @@ -95,8 +94,7 @@ protected void createContext() { sensor = BricksUtils.getBuilder(RadarSensorBuilder.class) .setAngle(90) .setAxis(RadarSensor.Axis.Ynegative) - .setDistance(2) - .setPulse(Sensor.Pulse.PM_TRUE) + .setDistance(4F) .setName("sensorPlayer") .getBrick(); @@ -124,9 +122,9 @@ protected void createContext() { bodyGround = bodyBuilder .fixture(bodyBuilder.fixtureDefBuilder() - .boxShape(5, 1) + .boxShape(3, 1) .restitution(0f)) - .position(40, 20) + .position(0, 0) .mass(1f) .type(BodyDef.BodyType.StaticBody) .build(); @@ -145,39 +143,39 @@ public void radarAxisYnegativeTest() { identityPlayer.collisionMask = (short) identityGround.category; engine.addEntity(player); - engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - assertFalse(sensor.positive); - assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - engine.update(1); - physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0,-1.5F)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0,4)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(1); + Log.debug("RadarSensorSystemTest","C) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); assertTrue(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0,0)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - - - assertTrue(sensor.contactList.first().isTouching()); - assertTrue(sensor.positive); + engine.update(1); + Log.debug("RadarSensorSystemTest","D) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + physic.step(1, 8, 3); + engine.update(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); + } @@ -187,39 +185,39 @@ public void radarAxisYnegativeTargetTagTest() { sensor.targetTag = "Ground"; engine.addEntity(player); - engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - assertFalse(sensor.positive); - assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - engine.update(1); - physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, -1.5F)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, 4)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(1); + Log.debug("RadarSensorSystemTest", "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertTrue(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, 0)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - - - assertTrue(sensor.contactList.first().isTouching()); - assertTrue(sensor.positive); + engine.update(1); + Log.debug("RadarSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + physic.step(1, 8, 3); + engine.update(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); + } @@ -229,36 +227,36 @@ public void radarAxisYnegativeTargetTagInvalidTest() { sensor.targetTag = "test"; engine.addEntity(player); - engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, -1.5F)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, 4)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, 0)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - - - assertEquals(0, sensor.contactList.size); + engine.update(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); @@ -271,39 +269,39 @@ public void radarAxisYnegativeTargetPropertyTest() { sensor.propertyName = "GroundProperty"; engine.addEntity(player); - engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - assertFalse(sensor.positive); - assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - engine.update(1); - physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, -1.5F)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(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); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, 4)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + engine.update(1); + Log.debug("RadarSensorSystemTest", "C) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertTrue(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); - engine.update(1); + bodyPlayer.setLinearVelocity(new Vector2(0, 0)); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); - - - assertTrue(sensor.contactList.first().isTouching()); - assertTrue(sensor.positive); + engine.update(1); + Log.debug("RadarSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + physic.step(1, 8, 3); + engine.update(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); + } From b7e3265f7943fcbe921abf4f1a19be043104c1ad Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Thu, 15 Jan 2015 10:08:09 +0100 Subject: [PATCH 10/11] optimizado de imports --- build.gradle | 7 ++ .../test/levels/flyingDart/entities/Dart.java | 4 +- .../entities/PlayerPlatform.java | 7 +- .../components/BlackBoardComponent.java | 4 +- .../components/ViewsComponent.java | 2 +- .../sensors/RaySensorComponent.java | 10 +++ .../logicbricks/core/LogicBricksEngine.java | 8 +-- .../com/indignado/logicbricks/core/World.java | 5 +- .../core/actuators/EffectActuator.java | 2 +- .../core/actuators/TextureActuator.java | 2 +- .../data/AnimationView.java | 2 +- .../logicbricks/core/data/Axis2D.java | 6 ++ .../data/ParticleEffectView.java | 2 +- .../{components => core}/data/Property.java | 2 +- .../data/PropertyType.java | 2 +- .../data/TextureView.java | 2 +- .../{components => core}/data/View.java | 2 +- .../logicbricks/core/sensors/NearSensor.java | 1 - .../logicbricks/core/sensors/RadarSensor.java | 8 +-- .../logicbricks/core/sensors/RaySensor.java | 66 ++++++++++++++++++ .../logicbricks/systems/AnimationSystem.java | 2 +- .../logicbricks/systems/RenderingSystem.java | 6 +- .../systems/ViewPositionSystem.java | 2 +- .../actuators/EffectActuatorSystem.java | 2 +- .../actuators/PropertyActuatorSystem.java | 2 +- .../actuators/TextureActuatorSystem.java | 2 +- .../systems/sensors/MouseSensorSystem.java | 2 +- .../systems/sensors/NearSensorSystem.java | 27 +++----- .../systems/sensors/PropertySensorSystem.java | 2 +- .../systems/sensors/RadarSensorSystem.java | 6 +- .../systems/sensors/RaySensorSystem.java | 69 +++++++++++++++++++ .../utils/builders/BricksUtils.java | 1 + .../utils/builders/EntityBuilder.java | 4 +- .../actuators/EffectActuatorBuilder.java | 2 +- .../actuators/TextureActuatorBuilder.java | 2 +- .../builders/sensors/RadarSensorBuilder.java | 5 +- .../builders/sensors/RaySensorBuilder.java | 68 ++++++++++++++++++ .../sensors/MouseSensorSystemTest.java | 2 +- .../systems/sensors/NearSensorSystemTest.java | 36 +++++----- .../sensors/PropertySensorSystemTest.java | 2 +- .../sensors/RadarSensorSystemTest.java | 40 +++++------ 41 files changed, 319 insertions(+), 109 deletions(-) create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RaySensorComponent.java rename gdx-logic-bricks/src/main/java/com/indignado/logicbricks/{components => core}/data/AnimationView.java (84%) create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Axis2D.java rename gdx-logic-bricks/src/main/java/com/indignado/logicbricks/{components => core}/data/ParticleEffectView.java (85%) rename gdx-logic-bricks/src/main/java/com/indignado/logicbricks/{components => core}/data/Property.java (95%) rename gdx-logic-bricks/src/main/java/com/indignado/logicbricks/{components => core}/data/PropertyType.java (96%) rename gdx-logic-bricks/src/main/java/com/indignado/logicbricks/{components => core}/data/TextureView.java (95%) rename gdx-logic-bricks/src/main/java/com/indignado/logicbricks/{components => core}/data/View.java (97%) create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java create mode 100644 gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RaySensorBuilder.java diff --git a/build.gradle b/build.gradle index 23aa9db..a044461 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,13 @@ allprojects { apply plugin: "eclipse" apply plugin: "idea" + idea { + module { + downloadJavadoc = true + downloadSources = true + } + } + repositories { mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/Dart.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/Dart.java index abcd298..bcc4d7a 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/Dart.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/flyingDart/entities/Dart.java @@ -8,10 +8,10 @@ import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.BodyDef; import com.indignado.logicbricks.components.*; -import com.indignado.logicbricks.components.data.Property; -import com.indignado.logicbricks.components.data.TextureView; import com.indignado.logicbricks.core.EntityFactory; import com.indignado.logicbricks.core.World; +import com.indignado.logicbricks.core.data.Property; +import com.indignado.logicbricks.core.data.TextureView; import com.indignado.logicbricks.utils.builders.BodyBuilder; import com.indignado.logicbricks.utils.builders.EntityBuilder; import com.indignado.logicbricks.utils.builders.FixtureDefBuilder; diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index f7e367d..0435aea 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -12,13 +12,13 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.IntMap; import com.indignado.logicbricks.components.*; -import com.indignado.logicbricks.components.data.AnimationView; -import com.indignado.logicbricks.components.data.ParticleEffectView; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.core.EntityFactory; import com.indignado.logicbricks.core.World; import com.indignado.logicbricks.core.actuators.*; import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.data.AnimationView; +import com.indignado.logicbricks.core.data.ParticleEffectView; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.*; import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.EntityBuilder; @@ -138,6 +138,7 @@ public Entity createEntity() { NearSensor nearSensor = BricksUtils.getBuilder(NearSensorBuilder.class) .setTargetTag("test") .setDistance(4) + .setResetDistance(6) .setName("sensorPlayer") .getBrick(); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/BlackBoardComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/BlackBoardComponent.java index c9edc08..22ffb2f 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/BlackBoardComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/BlackBoardComponent.java @@ -4,8 +4,8 @@ import com.badlogic.ashley.utils.Bag; import com.badlogic.gdx.utils.Bits; import com.badlogic.gdx.utils.Pool.Poolable; -import com.indignado.logicbricks.components.data.Property; -import com.indignado.logicbricks.components.data.PropertyType; +import com.indignado.logicbricks.core.data.Property; +import com.indignado.logicbricks.core.data.PropertyType; import com.indignado.logicbricks.utils.Log; /** diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/ViewsComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/ViewsComponent.java index 23a50bd..7d50813 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/ViewsComponent.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/ViewsComponent.java @@ -3,7 +3,7 @@ import com.badlogic.ashley.core.Component; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Pool.Poolable; -import com.indignado.logicbricks.components.data.View; +import com.indignado.logicbricks.core.data.View; /** * @author Rubentxu. diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RaySensorComponent.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RaySensorComponent.java new file mode 100644 index 0000000..9b48b97 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/sensors/RaySensorComponent.java @@ -0,0 +1,10 @@ +package com.indignado.logicbricks.components.sensors; + +import com.indignado.logicbricks.core.sensors.RaySensor; + +/** + * @author Rubentxu + */ +public class RaySensorComponent extends SensorComponent { + +} diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java index c098e02..0155ecb 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/LogicBricksEngine.java @@ -58,17 +58,17 @@ protected void removeEntityInternal(Entity entity) { @Override - public void addSystem (EntitySystem system) { + public void addSystem(EntitySystem system) { super.addSystem(system); - if(EntityListener.class.isInstance(system)) { + if (EntityListener.class.isInstance(system)) { this.addEntityListener((EntityListener) system); } - if(InputProcessor.class.isInstance(system)) { + if (InputProcessor.class.isInstance(system)) { inputs.addProcessor((InputProcessor) system); } - if(ContactListener.class.isInstance(system)) { + if (ContactListener.class.isInstance(system)) { contactSystems.add((ContactListener) system); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java index 5d74d2a..a152700 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/World.java @@ -3,7 +3,6 @@ import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntitySystem; import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; @@ -16,9 +15,9 @@ import com.badlogic.gdx.utils.TimeUtils; import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.systems.*; -import com.indignado.logicbricks.systems.actuators.CameraActuatorSystem; import com.indignado.logicbricks.systems.actuators.InstanceEntityActuatorSystem; -import com.indignado.logicbricks.systems.sensors.*; +import com.indignado.logicbricks.systems.sensors.CollisionSensorSystem; +import com.indignado.logicbricks.systems.sensors.MouseSensorSystem; import com.indignado.logicbricks.utils.Log; import com.indignado.logicbricks.utils.builders.BodyBuilder; import com.indignado.logicbricks.utils.builders.EntityBuilder; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/EffectActuator.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/EffectActuator.java index e21b447..9bac4ea 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/EffectActuator.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/EffectActuator.java @@ -2,7 +2,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; -import com.indignado.logicbricks.components.data.ParticleEffectView; +import com.indignado.logicbricks.core.data.ParticleEffectView; /** * @author Rubentxu. diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/TextureActuator.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/TextureActuator.java index 6e8a412..baa07a5 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/TextureActuator.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/actuators/TextureActuator.java @@ -1,7 +1,7 @@ package com.indignado.logicbricks.core.actuators; import com.badlogic.gdx.graphics.Color; -import com.indignado.logicbricks.components.data.TextureView; +import com.indignado.logicbricks.core.data.TextureView; /** * @author Rubentxu. diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/AnimationView.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/AnimationView.java similarity index 84% rename from gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/AnimationView.java rename to gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/AnimationView.java index f1be304..f67d31c 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/AnimationView.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/AnimationView.java @@ -1,4 +1,4 @@ -package com.indignado.logicbricks.components.data; +package com.indignado.logicbricks.core.data; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.utils.IntMap; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Axis2D.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Axis2D.java new file mode 100644 index 0000000..6bd6d7c --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Axis2D.java @@ -0,0 +1,6 @@ +package com.indignado.logicbricks.core.data; + +/** + * @author Rubentxu. + */ +public enum Axis2D { Xpositive, Ypositive, Xnegative, Ynegative } \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/ParticleEffectView.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/ParticleEffectView.java similarity index 85% rename from gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/ParticleEffectView.java rename to gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/ParticleEffectView.java index 742b516..9906deb 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/ParticleEffectView.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/ParticleEffectView.java @@ -1,4 +1,4 @@ -package com.indignado.logicbricks.components.data; +package com.indignado.logicbricks.core.data; import com.badlogic.gdx.graphics.g2d.ParticleEffect; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Property.java similarity index 95% rename from gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java rename to gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Property.java index 22a4bac..0fbf023 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/Property.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/Property.java @@ -1,4 +1,4 @@ -package com.indignado.logicbricks.components.data; +package com.indignado.logicbricks.core.data; import com.badlogic.gdx.ai.msg.MessageDispatcher; import com.indignado.logicbricks.core.MessageManager; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/PropertyType.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/PropertyType.java similarity index 96% rename from gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/PropertyType.java rename to gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/PropertyType.java index 2638b8e..5b0000e 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/PropertyType.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/PropertyType.java @@ -1,4 +1,4 @@ -package com.indignado.logicbricks.components.data; +package com.indignado.logicbricks.core.data; import com.badlogic.gdx.utils.Bits; import com.badlogic.gdx.utils.ObjectMap; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/TextureView.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/TextureView.java similarity index 95% rename from gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/TextureView.java rename to gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/TextureView.java index b556498..e5eb4a1 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/TextureView.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/TextureView.java @@ -1,4 +1,4 @@ -package com.indignado.logicbricks.components.data; +package com.indignado.logicbricks.core.data; import com.badlogic.gdx.graphics.g2d.TextureRegion; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/View.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/View.java similarity index 97% rename from gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/View.java rename to gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/View.java index a5d5910..d12854f 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/components/data/View.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/data/View.java @@ -1,4 +1,4 @@ -package com.indignado.logicbricks.components.data; +package com.indignado.logicbricks.core.data; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java index b40d3db..075933f 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/NearSensor.java @@ -2,7 +2,6 @@ import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.Contact; -import com.badlogic.gdx.physics.box2d.Transform; import com.badlogic.gdx.utils.ObjectSet; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java index f4c99f3..4f35654 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java @@ -2,7 +2,7 @@ import com.badlogic.gdx.physics.box2d.Contact; import com.badlogic.gdx.utils.ObjectSet; - +import com.indignado.logicbricks.core.data.Axis2D; /** * @author Rubentxu @@ -12,7 +12,7 @@ public class RadarSensor extends Sensor { // Config Values public String targetTag; public String propertyName; - public Axis axis; + public Axis2D axis2D; public float angle = 0; public float distance = 0; @@ -24,7 +24,7 @@ public void reset() { super.reset(); targetTag = null; propertyName = null; - axis = null; + axis2D = null; angle = 0; distance = 0; contactList.clear(); @@ -32,6 +32,4 @@ public void reset() { } - public enum Axis {Xpositive, Ypositive, Xnegative, Ynegative} - } \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java new file mode 100644 index 0000000..6a662fb --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java @@ -0,0 +1,66 @@ +package com.indignado.logicbricks.core.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.Fixture; +import com.badlogic.gdx.physics.box2d.RayCastCallback; +import com.badlogic.gdx.utils.ObjectSet; +import com.indignado.logicbricks.components.BlackBoardComponent; +import com.indignado.logicbricks.components.IdentityComponent; +import com.indignado.logicbricks.core.LogicBricksException; +import com.indignado.logicbricks.core.data.Axis2D; + + +/** + * @author Rubentxu + */ +public class RaySensor extends Sensor implements RayCastCallback { + + // Config Values + public String targetTag; + public String targetPropertyName; + public Axis2D axis2D = Axis2D.Xpositive; + public float range = 0; + public boolean xRayMode = false; + public Body attachedRigidBody; + + // Signal Values + public ObjectSet contacts = new ObjectSet(); + + @Override + public void reset() { + super.reset(); + targetTag = null; + targetPropertyName = null; + axis2D = Axis2D.Xpositive;; + range = 0; + xRayMode = false; + contacts.clear(); + + } + + + @Override + public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { + Entity entity = (Entity) fixture.getBody().getUserData(); + if(entity == null) throw new LogicBricksException("RaySensor","The userdata fixture must return an entity"); + + if(targetTag != null && targetTag.equals(entity.getComponent(IdentityComponent.class).tag)) { + contacts.add(entity); + + } else if(targetPropertyName != null && entity.getComponent(BlackBoardComponent.class) != null + && entity.getComponent(BlackBoardComponent.class).hasProperty(targetPropertyName)) { + contacts.add(entity); + + } else if(targetTag != null && targetPropertyName != null) { + contacts.add(entity); + + } + + if(xRayMode) return 1 ; + else return 0; + + } + +} \ No newline at end of file diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/AnimationSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/AnimationSystem.java index b76a633..5e74707 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/AnimationSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/AnimationSystem.java @@ -7,8 +7,8 @@ import com.badlogic.gdx.graphics.g2d.Animation; import com.indignado.logicbricks.components.StateComponent; import com.indignado.logicbricks.components.ViewsComponent; -import com.indignado.logicbricks.components.data.AnimationView; import com.indignado.logicbricks.core.Settings; +import com.indignado.logicbricks.core.data.AnimationView; import com.indignado.logicbricks.utils.Log; /** diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java index d715beb..6200a31 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/RenderingSystem.java @@ -16,10 +16,10 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.viewport.Viewport; import com.indignado.logicbricks.components.ViewsComponent; -import com.indignado.logicbricks.components.data.ParticleEffectView; -import com.indignado.logicbricks.components.data.TextureView; -import com.indignado.logicbricks.components.data.View; import com.indignado.logicbricks.core.Settings; +import com.indignado.logicbricks.core.data.ParticleEffectView; +import com.indignado.logicbricks.core.data.TextureView; +import com.indignado.logicbricks.core.data.View; import com.indignado.logicbricks.utils.Log; import java.util.Comparator; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/ViewPositionSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/ViewPositionSystem.java index c1e97d8..9fe7766 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/ViewPositionSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/ViewPositionSystem.java @@ -8,8 +8,8 @@ import com.badlogic.gdx.math.Vector2; import com.indignado.logicbricks.components.StateComponent; import com.indignado.logicbricks.components.ViewsComponent; -import com.indignado.logicbricks.components.data.View; import com.indignado.logicbricks.core.Settings; +import com.indignado.logicbricks.core.data.View; import com.indignado.logicbricks.utils.Log; /** diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java index 696aac5..dd4ae8b 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/EffectActuatorSystem.java @@ -2,8 +2,8 @@ import com.badlogic.gdx.graphics.g2d.ParticleEffect; import com.indignado.logicbricks.components.actuators.EffectActuatorComponent; -import com.indignado.logicbricks.components.data.ParticleEffectView; import com.indignado.logicbricks.core.actuators.EffectActuator; +import com.indignado.logicbricks.core.data.ParticleEffectView; import com.indignado.logicbricks.utils.Log; /** diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java index c3813e6..753a5bd 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/PropertyActuatorSystem.java @@ -3,8 +3,8 @@ import com.badlogic.ashley.core.ComponentMapper; import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.actuators.PropertyActuatorComponent; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.core.actuators.PropertyActuator; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.utils.Log; /** diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/TextureActuatorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/TextureActuatorSystem.java index 2b16afa..9e1d619 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/TextureActuatorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/actuators/TextureActuatorSystem.java @@ -1,8 +1,8 @@ package com.indignado.logicbricks.systems.actuators; import com.indignado.logicbricks.components.actuators.TextureActuatorComponent; -import com.indignado.logicbricks.components.data.TextureView; import com.indignado.logicbricks.core.actuators.TextureActuator; +import com.indignado.logicbricks.core.data.TextureView; /** * @author Rubentxu diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystem.java index a7ecaad..b63e278 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystem.java @@ -10,9 +10,9 @@ import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.ViewsComponent; -import com.indignado.logicbricks.components.data.TextureView; import com.indignado.logicbricks.components.sensors.MouseSensorComponent; import com.indignado.logicbricks.core.World; +import com.indignado.logicbricks.core.data.TextureView; import com.indignado.logicbricks.core.sensors.MouseSensor; import com.indignado.logicbricks.core.sensors.MouseSensor.MouseEvent; import com.indignado.logicbricks.utils.Log; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java index 569eece..201ac39 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/NearSensorSystem.java @@ -2,16 +2,15 @@ import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.EntityListener; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.*; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.RigidBodiesComponents; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.components.sensors.NearSensorComponent; import com.indignado.logicbricks.core.LogicBricksException; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.NearSensor; import com.indignado.logicbricks.utils.Log; import com.indignado.logicbricks.utils.builders.FixtureDefBuilder; @@ -32,14 +31,14 @@ public NearSensorSystem() { public boolean query(NearSensor sensor, float deltaTime) { boolean isActive = false; - if(sensor.distanceContactList.size > 0) { + if (sensor.distanceContactList.size > 0) { isActive = true; - if(!sensor.initContact) sensor.initContact = true; + if (!sensor.initContact) sensor.initContact = true; - } else if(sensor.initContact && sensor.resetDistanceContactList.size > 0) { + } else if (sensor.initContact && sensor.resetDistanceContactList.size > 0) { isActive = true; - } else if(sensor.initContact) { + } else if (sensor.initContact) { sensor.initContact = false; } @@ -102,9 +101,9 @@ public void postSolve(Contact contact, ContactImpulse impulse) { private void processAddNearSensors(Entity entity, Contact contact, Property property) { NearSensor nearSensor = (NearSensor) property.getValue(); - if (nearSensor.targetPropertyName != null ) { + if (nearSensor.targetPropertyName != null) { BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); - if(blackBoard.hasProperty(nearSensor.targetPropertyName)) { + if (blackBoard.hasProperty(nearSensor.targetPropertyName)) { if (property.getName().equals("NearSensor")) { nearSensor.distanceContactList.add(contact); } else if (property.getName().equals("ResetNearSensor")) { @@ -115,7 +114,7 @@ private void processAddNearSensors(Entity entity, Contact contact, Property prop } else if (nearSensor.targetTag != null) { IdentityComponent identity = entity.getComponent(IdentityComponent.class); - if( identity.tag.equals(nearSensor.targetTag)) { + if (identity.tag.equals(nearSensor.targetTag)) { if (property.getName().equals("NearSensor")) { nearSensor.distanceContactList.add(contact); } else if (property.getName().equals("ResetNearSensor")) { @@ -157,16 +156,6 @@ private void processRemoveNearSensors(Contact contact, Property property) { } - private boolean inTheDistance(Body body, Contact contact, float distance) { - WorldManifold manifold = contact.getWorldManifold(); - for (Vector2 point : manifold.getPoints()) { - if (body.getPosition().dst(point) <= distance) return true; - } - return false; - - } - - @Override public void entityAdded(Entity entity) { Log.debug(tag, "EntityAdded add nearSensors"); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystem.java index e8eaa15..3c4a8d4 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystem.java @@ -7,9 +7,9 @@ import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.BlackBoardComponent; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.components.sensors.PropertySensorComponent; import com.indignado.logicbricks.core.MessageManager; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.PropertySensor; /** diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 0a5d1bb..18b04ed 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -92,7 +92,7 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad IdentityComponent identity = entity.getComponent(IdentityComponent.class); if (blackBoard != null && radarSensor.propertyName != null && blackBoard.hasProperty(radarSensor.propertyName)) { - Log.debug(tag, "AddMode %b propertyName", addMode); + Log.debug(tag, "AddMode %b targetPropertyName", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); @@ -101,7 +101,7 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); - } else if (radarSensor.targetTag == null && radarSensor.propertyName == null){ + } else if (radarSensor.targetTag == null && radarSensor.propertyName == null) { Log.debug(tag, "AddMode %b null targets", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); @@ -145,7 +145,7 @@ private void createRadar(Body body, ObjectSet radarSensors) { if (sensor.angle > 180) throw new LogicBricksException(tag, "The angle of the radar can not be greater than 180"); for (int i = 0; i < 7; i++) { - float angle = (float) (i / 6.0 * sensor.angle) - (sensor.angle / 2) + (sensor.axis.ordinal() * 90); + float angle = (float) (i / 6.0 * sensor.angle) - (sensor.angle / 2) + (sensor.axis2D.ordinal() * 90); vertices[i + 1] = new Vector2(sensor.distance * MathUtils.cosDeg(angle), sensor.distance * MathUtils.sinDeg(angle)); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java new file mode 100644 index 0000000..d0ec4e3 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java @@ -0,0 +1,69 @@ +package com.indignado.logicbricks.systems.sensors; + +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntityListener; +import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.utils.IntMap; +import com.badlogic.gdx.utils.ObjectSet; +import com.indignado.logicbricks.components.RigidBodiesComponents; +import com.indignado.logicbricks.components.sensors.RaySensorComponent; +import com.indignado.logicbricks.core.sensors.RaySensor; +import com.indignado.logicbricks.utils.Log; + +/** + * @author Rubentxu + */ +public class RaySensorSystem extends SensorSystem implements EntityListener{ + private World physics; + + public RaySensorSystem(World physics) { + super(RaySensorComponent.class); + this.physics = physics; + + } + + + @Override + public boolean query(RaySensor sensor, float deltaTime) { + sensor.contacts.clear(); + float angle = sensor.axis2D.ordinal() * 90; + Vector2 point1 = sensor.attachedRigidBody.getPosition(); + Vector2 point2 = new Vector2(sensor.range * MathUtils.cosDeg(angle), sensor.range * MathUtils.sinDeg(angle)); + + physics.rayCast(sensor, point1, point2 ); + + if(sensor.contacts.size > 0) { + return true; + + } + return false; + + } + + + @Override + public void entityAdded(Entity entity) { + Log.debug(tag, "EntityAdded add RaySensors"); + RigidBodiesComponents rigidBodiesComponent = entity.getComponent(RigidBodiesComponents.class); + RaySensorComponent raySensorComponent = entity.getComponent(RaySensorComponent.class); + if (raySensorComponent != null) { + IntMap.Values> values = raySensorComponent.sensors.values(); + while (values.hasNext()) { + for (RaySensor sensor : values.next()) { + if (sensor.attachedRigidBody == null) sensor.attachedRigidBody = rigidBodiesComponent.rigidBodies.first(); + + } + } + } + + } + + + @Override + public void entityRemoved(Entity entity) { + + } + +} diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java index 1befbcc..0cbf271 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/BricksUtils.java @@ -41,6 +41,7 @@ private BricksUtils() { bricksClasses.put(DelaySensor.class, new BricksClasses(DelaySensorComponent.class, DelaySensorSystem.class)); bricksClasses.put(RadarSensor.class, new BricksClasses(RadarSensorComponent.class, RadarSensorSystem.class)); bricksClasses.put(NearSensor.class, new BricksClasses(NearSensorComponent.class, NearSensorSystem.class)); + bricksClasses.put(RaySensor.class, new BricksClasses(RaySensorComponent.class, RaySensorSystem.class)); bricksClasses.put(ConditionalController.class, new BricksClasses(ConditionalControllerComponent.class, ConditionalControllerSystem.class)); bricksClasses.put(ScriptController.class, new BricksClasses(ScriptControllerComponent.class, ScriptControllerSystem.class)); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java index 9612802..59bc5f5 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/EntityBuilder.java @@ -17,14 +17,14 @@ import com.indignado.logicbricks.components.ViewsComponent; import com.indignado.logicbricks.components.actuators.ActuatorComponent; import com.indignado.logicbricks.components.controllers.ControllerComponent; -import com.indignado.logicbricks.components.data.Property; -import com.indignado.logicbricks.components.data.View; import com.indignado.logicbricks.components.sensors.SensorComponent; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.LogicBricksEngine; import com.indignado.logicbricks.core.LogicBricksException; import com.indignado.logicbricks.core.actuators.Actuator; import com.indignado.logicbricks.core.controllers.Controller; +import com.indignado.logicbricks.core.data.Property; +import com.indignado.logicbricks.core.data.View; import com.indignado.logicbricks.core.sensors.Sensor; import com.indignado.logicbricks.utils.Log; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/EffectActuatorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/EffectActuatorBuilder.java index 5ed692f..7f41cf7 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/EffectActuatorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/EffectActuatorBuilder.java @@ -2,8 +2,8 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; -import com.indignado.logicbricks.components.data.ParticleEffectView; import com.indignado.logicbricks.core.actuators.EffectActuator; +import com.indignado.logicbricks.core.data.ParticleEffectView; /** * @author Rubentxu. diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/TextureActuatorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/TextureActuatorBuilder.java index e9b95d5..3500730 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/TextureActuatorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/actuators/TextureActuatorBuilder.java @@ -1,8 +1,8 @@ package com.indignado.logicbricks.utils.builders.actuators; import com.badlogic.gdx.graphics.Color; -import com.indignado.logicbricks.components.data.TextureView; import com.indignado.logicbricks.core.actuators.TextureActuator; +import com.indignado.logicbricks.core.data.TextureView; /** * @author Rubentxu. diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java index 0587168..a92d94d 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java @@ -1,5 +1,6 @@ package com.indignado.logicbricks.utils.builders.sensors; +import com.indignado.logicbricks.core.data.Axis2D; import com.indignado.logicbricks.core.sensors.RadarSensor; /** @@ -27,8 +28,8 @@ public RadarSensorBuilder setPropertyName(String name) { } - public RadarSensorBuilder setAxis(RadarSensor.Axis axis) { - brick.axis = axis; + public RadarSensorBuilder setAxis(Axis2D axis2D) { + brick.axis2D = axis2D; return this; } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RaySensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RaySensorBuilder.java new file mode 100644 index 0000000..2ce6867 --- /dev/null +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RaySensorBuilder.java @@ -0,0 +1,68 @@ +package com.indignado.logicbricks.utils.builders.sensors; + +import com.badlogic.gdx.physics.box2d.Body; +import com.indignado.logicbricks.core.data.Axis2D; +import com.indignado.logicbricks.core.sensors.RaySensor; + +/** + * @author Rubentxu. + */ +public class RaySensorBuilder extends SensorBuilder { + + public RaySensorBuilder() { + brick = new RaySensor(); + + } + + + public RaySensorBuilder setTargetTag(String tag) { + brick.targetTag = tag; + return this; + + } + + + public RaySensorBuilder setPropertyName(String name) { + brick.targetPropertyName = name; + return this; + + } + + + public RaySensorBuilder setAxis(Axis2D axis2D) { + brick.axis2D = axis2D; + return this; + + } + + + public RaySensorBuilder setXRayMode(boolean xRayMode) { + brick.xRayMode = xRayMode; + return this; + + } + + + public RaySensorBuilder setRange(float range) { + brick.range = range; + return this; + + } + + + public RaySensorBuilder setAttachedRigidBody(Body rigidBody) { + brick.attachedRigidBody = rigidBody; + return this; + + } + + + @Override + public RaySensor getBrick() { + RaySensor brickTemp = brick; + brick = new RaySensor(); + return brickTemp; + + } + +} diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java index cd9c944..a410748 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/MouseSensorSystemTest.java @@ -5,9 +5,9 @@ import com.badlogic.gdx.physics.box2d.Transform; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.ViewsComponent; -import com.indignado.logicbricks.components.data.TextureView; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.data.TextureView; import com.indignado.logicbricks.core.sensors.MouseSensor; import com.indignado.logicbricks.systems.sensors.base.ActuatorTest; import com.indignado.logicbricks.systems.sensors.base.BaseSensorSystemTest; diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java index d3228bc..f620eb8 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/NearSensorSystemTest.java @@ -9,13 +9,11 @@ import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.RigidBodiesComponents; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.core.CategoryBitsManager; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.NearSensor; -import com.indignado.logicbricks.core.sensors.NearSensor; -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.Log; @@ -23,7 +21,6 @@ import com.indignado.logicbricks.utils.builders.BricksUtils; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; import com.indignado.logicbricks.utils.builders.sensors.NearSensorBuilder; -import com.indignado.logicbricks.utils.builders.sensors.NearSensorBuilder; import org.junit.Test; import static org.junit.Assert.*; @@ -115,7 +112,7 @@ protected void createContext() { identityGround.tag = "Ground"; BlackBoardComponent blackBoardGround = entityBuilder.getComponent(BlackBoardComponent.class); - blackBoardGround.addProperty(new Property("GroundProperty","Value")); + blackBoardGround.addProperty(new Property("GroundProperty", "Value")); bodyGround = bodyBuilder .fixture(bodyBuilder.fixtureDefBuilder() @@ -141,7 +138,7 @@ public void defaultTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -182,7 +179,7 @@ public void targetTagTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -223,7 +220,7 @@ public void targetTagInvalidTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -264,7 +261,7 @@ public void targetPropertyTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -305,31 +302,31 @@ public void targetPropertyInvalidTest() { engine.update(1); physic.step(1, 8, 3); - Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("NearSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -344,7 +341,7 @@ public void defaultResetDistanceTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -378,7 +375,6 @@ public void defaultResetDistanceTest() { } - @Test public void resetDistanceTargetTagTest() { sensor.targetTag = "Ground"; @@ -387,7 +383,7 @@ public void resetDistanceTargetTagTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -429,7 +425,7 @@ public void resetDistanceTargetTagInvalidTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -471,7 +467,7 @@ public void resetDistanceTargetPropertyTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -514,7 +510,7 @@ public void resetDistanceTargetPropertyInvalidTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("NearSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("NearSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java index 4b431ab..18ada6b 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/PropertySensorSystemTest.java @@ -2,9 +2,9 @@ import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.PropertySensor; import com.indignado.logicbricks.core.sensors.PropertySensor.EvaluationType; import com.indignado.logicbricks.systems.sensors.base.ActuatorTest; diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java index 77c5ece..32f60f6 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -9,12 +9,12 @@ import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.components.RigidBodiesComponents; -import com.indignado.logicbricks.components.data.Property; import com.indignado.logicbricks.core.CategoryBitsManager; import com.indignado.logicbricks.core.LogicBrick; import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.data.Axis2D; +import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.RadarSensor; -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.Log; @@ -93,7 +93,7 @@ protected void createContext() { sensor = BricksUtils.getBuilder(RadarSensorBuilder.class) .setAngle(90) - .setAxis(RadarSensor.Axis.Ynegative) + .setAxis(Axis2D.Ynegative) .setDistance(4F) .setName("sensorPlayer") .getBrick(); @@ -118,7 +118,7 @@ protected void createContext() { identityGround.category = categoryBitsManager.getCategoryBits(identityGround.tag); BlackBoardComponent blackBoardGround = entityBuilder.getComponent(BlackBoardComponent.class); - blackBoardGround.addProperty(new Property("GroundProperty","Value")); + blackBoardGround.addProperty(new Property("GroundProperty", "Value")); bodyGround = bodyBuilder .fixture(bodyBuilder.fixtureDefBuilder() @@ -145,34 +145,34 @@ public void radarAxisYnegativeTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + 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)); + bodyPlayer.setLinearVelocity(new Vector2(0, -1.5F)); physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","B) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + 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)); + bodyPlayer.setLinearVelocity(new Vector2(0, 4)); physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","C) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "C) 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,0)); + bodyPlayer.setLinearVelocity(new Vector2(0, 0)); physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","D) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","E) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "E) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -187,7 +187,7 @@ public void radarAxisYnegativeTargetTagTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -229,7 +229,7 @@ public void radarAxisYnegativeTargetTagInvalidTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -271,7 +271,7 @@ public void radarAxisYnegativeTargetPropertyTest() { physic.step(1, 8, 3); engine.update(1); - Log.debug("RadarSensorSystemTest","A) Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "A) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); @@ -313,31 +313,31 @@ public void radarAxisYnegativeTargetPropertyInvalidTest() { engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertFalse(sensor.positive); assertEquals(LogicBrick.BrickMode.BM_OFF, sensor.pulseState); engine.update(1); physic.step(1, 8, 3); - Log.debug("RadarSensorSystemTest","Player position %s Ground position %s",bodyPlayer.getPosition(),bodyGround.getPosition()); + Log.debug("RadarSensorSystemTest", "Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); assertEquals(0, sensor.contactList.size); From b4056fc5cefcbc7f7cd4528da6c14a9996552359 Mon Sep 17 00:00:00 2001 From: Rubentxu Date: Sat, 17 Jan 2015 07:53:17 +0100 Subject: [PATCH 11/11] completado Testing RaySensor --- .../entities/PlayerPlatform.java | 20 +- .../logicbricks/core/sensors/RadarSensor.java | 4 +- .../logicbricks/core/sensors/RaySensor.java | 7 +- .../systems/sensors/RadarSensorSystem.java | 4 +- .../systems/sensors/RaySensorSystem.java | 5 +- .../builders/sensors/RadarSensorBuilder.java | 4 +- .../systems/sensors/RaYSensorSystemTest.java | 353 ++++++++++++++++++ .../sensors/RadarSensorSystemTest.java | 4 +- 8 files changed, 372 insertions(+), 29 deletions(-) create mode 100644 gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RaYSensorSystemTest.java diff --git a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java index 0435aea..160303c 100644 --- a/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java +++ b/functional-tests/src/main/java/com/indignado/functional/test/levels/simpleplatform/entities/PlayerPlatform.java @@ -24,7 +24,10 @@ import com.indignado.logicbricks.utils.builders.EntityBuilder; import com.indignado.logicbricks.utils.builders.actuators.*; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; -import com.indignado.logicbricks.utils.builders.sensors.*; +import com.indignado.logicbricks.utils.builders.sensors.AlwaysSensorBuilder; +import com.indignado.logicbricks.utils.builders.sensors.CollisionSensorBuilder; +import com.indignado.logicbricks.utils.builders.sensors.DelaySensorBuilder; +import com.indignado.logicbricks.utils.builders.sensors.KeyboardSensorBuilder; /** * @author Rubentxu. @@ -135,21 +138,6 @@ public Entity createEntity() { .connectToSensor(alwaysSensorCamera) .connectToActuator(cameraActuator); - NearSensor nearSensor = BricksUtils.getBuilder(NearSensorBuilder.class) - .setTargetTag("test") - .setDistance(4) - .setResetDistance(6) - .setName("sensorPlayer") - .getBrick(); - - ConditionalController controllerRadar = BricksUtils.getBuilder(ConditionalControllerBuilder.class) - .setOp(ConditionalController.Op.OP_AND) - .setName("controllerCamera") - .getBrick(); - - entityBuilder.addController(controllerRadar, "Idle", "Walking", "Jump", "Fall") - .connectToSensor(nearSensor); - // Collision Sensor ---------------------------------------------------------------- CollisionSensor collisionSensorGround = BricksUtils.getBuilder(CollisionSensorBuilder.class) .setTargetName("Ground") diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java index 4f35654..fa3cc2e 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RadarSensor.java @@ -11,7 +11,7 @@ public class RadarSensor extends Sensor { // Config Values public String targetTag; - public String propertyName; + public String targetPropertyName; public Axis2D axis2D; public float angle = 0; public float distance = 0; @@ -23,7 +23,7 @@ public class RadarSensor extends Sensor { public void reset() { super.reset(); targetTag = null; - propertyName = null; + targetPropertyName = null; axis2D = null; angle = 0; distance = 0; diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java index 6a662fb..56d2304 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/core/sensors/RaySensor.java @@ -21,7 +21,7 @@ public class RaySensor extends Sensor implements RayCastCallback { public String targetTag; public String targetPropertyName; public Axis2D axis2D = Axis2D.Xpositive; - public float range = 0; + public float range = 0.0f; public boolean xRayMode = false; public Body attachedRigidBody; @@ -34,7 +34,7 @@ public void reset() { targetTag = null; targetPropertyName = null; axis2D = Axis2D.Xpositive;; - range = 0; + range = 0.0f; xRayMode = false; contacts.clear(); @@ -44,6 +44,7 @@ public void reset() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { Entity entity = (Entity) fixture.getBody().getUserData(); + if(entity == null) throw new LogicBricksException("RaySensor","The userdata fixture must return an entity"); if(targetTag != null && targetTag.equals(entity.getComponent(IdentityComponent.class).tag)) { @@ -53,7 +54,7 @@ public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, fl && entity.getComponent(BlackBoardComponent.class).hasProperty(targetPropertyName)) { contacts.add(entity); - } else if(targetTag != null && targetPropertyName != null) { + } else if(targetTag == null && targetPropertyName == null) { contacts.add(entity); } diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java index 18b04ed..44f1015 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystem.java @@ -91,7 +91,7 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad BlackBoardComponent blackBoard = entity.getComponent(BlackBoardComponent.class); IdentityComponent identity = entity.getComponent(IdentityComponent.class); - if (blackBoard != null && radarSensor.propertyName != null && blackBoard.hasProperty(radarSensor.propertyName)) { + if (blackBoard != null && radarSensor.targetPropertyName != null && blackBoard.hasProperty(radarSensor.targetPropertyName)) { Log.debug(tag, "AddMode %b targetPropertyName", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); @@ -101,7 +101,7 @@ private void processRadarSensors(Entity entity, Contact contact, RadarSensor rad if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); - } else if (radarSensor.targetTag == null && radarSensor.propertyName == null) { + } else if (radarSensor.targetTag == null && radarSensor.targetPropertyName == null) { Log.debug(tag, "AddMode %b null targets", addMode); if (addMode) radarSensor.contactList.add(contact); else radarSensor.contactList.remove(contact); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java index d0ec4e3..5147dc4 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/systems/sensors/RaySensorSystem.java @@ -28,9 +28,10 @@ public RaySensorSystem(World physics) { @Override public boolean query(RaySensor sensor, float deltaTime) { sensor.contacts.clear(); - float angle = sensor.axis2D.ordinal() * 90; + float angle = sensor.axis2D.ordinal() * 90.0f; + Vector2 point1 = sensor.attachedRigidBody.getPosition(); - Vector2 point2 = new Vector2(sensor.range * MathUtils.cosDeg(angle), sensor.range * MathUtils.sinDeg(angle)); + Vector2 point2 = point1.cpy().add(new Vector2((float) MathUtils.cosDeg(angle), MathUtils.sinDeg(angle)).scl(sensor.range)); physics.rayCast(sensor, point1, point2 ); diff --git a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java index a92d94d..434a3df 100644 --- a/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java +++ b/gdx-logic-bricks/src/main/java/com/indignado/logicbricks/utils/builders/sensors/RadarSensorBuilder.java @@ -21,8 +21,8 @@ public RadarSensorBuilder setTargetTag(String tag) { } - public RadarSensorBuilder setPropertyName(String name) { - brick.propertyName = name; + public RadarSensorBuilder setTargetPropertyName(String name) { + brick.targetPropertyName = name; return this; } diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RaYSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RaYSensorSystemTest.java new file mode 100644 index 0000000..0cc5ea7 --- /dev/null +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RaYSensorSystemTest.java @@ -0,0 +1,353 @@ +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.badlogic.gdx.physics.box2d.World; +import com.badlogic.gdx.utils.GdxNativesLoader; +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.LogicBrick; +import com.indignado.logicbricks.core.controllers.ConditionalController; +import com.indignado.logicbricks.core.data.Axis2D; +import com.indignado.logicbricks.core.data.Property; +import com.indignado.logicbricks.core.sensors.RaySensor; +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.BodyBuilder; +import com.indignado.logicbricks.utils.builders.BricksUtils; +import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; +import com.indignado.logicbricks.utils.builders.sensors.RaySensorBuilder; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * @author Rubentxu + */ +public class RaySensorSystemTest extends BaseSensorSystemTest { + RaySensor sensor; + IdentityComponent identityPlayer; + IdentityComponent identityGround; + private World physic; + private Entity ground; + private Body bodyPlayer; + private Body bodyGround; + private RigidBodiesComponents rigidByPlayer; + private RigidBodiesComponents rigidByGround; + private CategoryBitsManager categoryBitsManager; + private BodyBuilder bodyBuilder; + + + + public RaySensorSystemTest() { + super(); + GdxNativesLoader.load(); + physic = new World(new Vector2(0, 0f), true); + sensorSystem = new RaySensorSystem(physic); + engine.addSystem(sensorSystem); + bodyBuilder = new BodyBuilder(physic); + + } + + + @Override + public void tearDown() { + player = null; + ground = null; + bodyPlayer = null; + bodyGround = null; + rigidByPlayer = null; + rigidByGround = null; + sensor = null; + identityPlayer = null; + + } + + + @Override + protected void createContext() { + // Create Player Entity + this.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, 7) + .mass(1f) + .type(BodyDef.BodyType.DynamicBody) + .build(); + + rigidByPlayer = entityBuilder.getComponent(RigidBodiesComponents.class); + rigidByPlayer.rigidBodies.add(bodyPlayer); + + sensor = BricksUtils.getBuilder(RaySensorBuilder.class) + .setAxis(Axis2D.Ynegative) + .setRange(4.0F) + .setName("sensorPlayer") + .getBrick(); + + ConditionalController controllerGround = BricksUtils.getBuilder(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(); + + rigidByGround = entityBuilder.getComponent(RigidBodiesComponents.class); + rigidByGround.rigidBodies.add(bodyGround); + + ground = entityBuilder.getEntity(); + engine.addEntity(ground); + + } + + + @Test + public void rayAxisYnegativeTest() { + identityPlayer.collisionMask = (short) identityGround.category; + engine.addEntity(player); + + physic.step(1, 8, 3); + engine.update(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)); + physic.step(1, 8, 3); + engine.update(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, -1.5f)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("RadarSensorSystemTest", "C) 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, 1.5f)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("RadarSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + bodyPlayer.setLinearVelocity(new Vector2(0, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + physic.step(1, 8, 3); + engine.update(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)); + physic.step(1, 8, 3); + engine.update(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, -1.5f)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("RadarSensorSystemTest", "C) 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, 1.5f)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("RadarSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + bodyPlayer.setLinearVelocity(new Vector2(0, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + physic.step(1, 8, 3); + engine.update(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)); + physic.step(1, 8, 3); + engine.update(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, -1.5f)); + physic.step(1, 8, 3); + engine.update(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, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + bodyPlayer.setLinearVelocity(new Vector2(0, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + physic.step(1, 8, 3); + engine.update(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)); + physic.step(1, 8, 3); + engine.update(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, -1.5f)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("RadarSensorSystemTest", "C) 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, 1.5f)); + physic.step(1, 8, 3); + engine.update(1); + Log.debug("RadarSensorSystemTest", "D) Player position %s Ground position %s", bodyPlayer.getPosition(), bodyGround.getPosition()); + assertFalse(sensor.positive); + assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); + + bodyPlayer.setLinearVelocity(new Vector2(0, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + physic.step(1, 8, 3); + engine.update(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)); + physic.step(1, 8, 3); + engine.update(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, -1.5f)); + physic.step(1, 8, 3); + engine.update(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, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + bodyPlayer.setLinearVelocity(new Vector2(0, 1.5f)); + physic.step(1, 8, 3); + engine.update(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); + + } + +} diff --git a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java index 32f60f6..586f82b 100644 --- a/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java +++ b/gdx-logic-bricks/src/test/java/com/indignado/logicbricks/systems/sensors/RadarSensorSystemTest.java @@ -266,7 +266,7 @@ public void radarAxisYnegativeTargetTagInvalidTest() { @Test public void radarAxisYnegativeTargetPropertyTest() { identityPlayer.collisionMask = (short) identityGround.category; - sensor.propertyName = "GroundProperty"; + sensor.targetPropertyName = "GroundProperty"; engine.addEntity(player); physic.step(1, 8, 3); @@ -308,7 +308,7 @@ public void radarAxisYnegativeTargetPropertyTest() { @Test public void radarAxisYnegativeTargetPropertyInvalidTest() { identityPlayer.collisionMask = (short) identityGround.category; - sensor.propertyName = "test"; + sensor.targetPropertyName = "test"; engine.addEntity(player); engine.update(1);