diff --git a/src/ve/ucv/ciens/ccg/nxtar/NxtARCore.java b/src/ve/ucv/ciens/ccg/nxtar/NxtARCore.java index 3b7296d..50cb1ec 100644 --- a/src/ve/ucv/ciens/ccg/nxtar/NxtARCore.java +++ b/src/ve/ucv/ciens/ccg/nxtar/NxtARCore.java @@ -86,7 +86,7 @@ public class NxtARCore extends Game implements ApplicationEventsListener{ } public static int getNumStates(){ - return 4; + return 3; } }; diff --git a/src/ve/ucv/ciens/ccg/nxtar/entities/BombGameEntityCreator.java b/src/ve/ucv/ciens/ccg/nxtar/entities/BombGameEntityCreator.java index 81c42fe..f1ec915 100644 --- a/src/ve/ucv/ciens/ccg/nxtar/entities/BombGameEntityCreator.java +++ b/src/ve/ucv/ciens/ccg/nxtar/entities/BombGameEntityCreator.java @@ -64,62 +64,49 @@ public class BombGameEntityCreator extends EntityCreatorBase{ } } - private EntityParameters parameters; - private Shader shader; - private int currentBombId; + private Shader shader; + private int currentBombId; // Render models. - private Model doorModel = null; - private Model doorFrameModel = null; - private Model combinationBombModel = null; - private Model combinationButton1Model = null; - private Model combinationButton2Model = null; - private Model combinationButton3Model = null; - private Model combinationButton4Model = null; - private Model inclinationBombModel = null; - private Model inclinationBombButtonModel = null; - private Model wiresBombModel = null; - private Model wiresBombModelWire1 = null; - private Model wiresBombModelWire2 = null; - private Model wiresBombModelWire3 = null; - // private Model easterEggModel = null; + private Model robotArmModel = null; + private Model doorModel = null; + private Model doorFrameModel = null; + private Model combinationBombModel = null; + private Model combinationButton1Model = null; + private Model combinationButton2Model = null; + private Model combinationButton3Model = null; + private Model combinationButton4Model = null; + private Model inclinationBombModel = null; + private Model inclinationBombButtonModel = null; + private Model wiresBombModel = null; + private Model wiresBombModelWire1 = null; + private Model wiresBombModelWire2 = null; + private Model wiresBombModelWire3 = null; + private Model easterEggModel = null; // Collision models. - private Model doorCollisionModel = null; - private Model doorFrameCollisionModel = null; - private Model combinationBombCollisionModel = null; - private Model combinationButton1CollisionModel = null; - private Model combinationButton2CollisionModel = null; - private Model combinationButton3CollisionModel = null; - private Model combinationButton4CollisionModel = null; - private Model inclinationBombCollisionModel = null; - private Model inclinationBombButtonCollisionModel = null; - private Model wiresBombCollisionModel = null; - private Model wiresBombCollisionModelWire1 = null; - private Model wiresBombCollisionModelWire2 = null; - private Model wiresBombCollisionModelWire3 = null; - // private Model easterEggCollisionModel = null; + private Model robotArmCollisionModel = null; + private Model doorCollisionModel = null; + private Model doorFrameCollisionModel = null; + private Model combinationBombCollisionModel = null; + private Model combinationButton1CollisionModel = null; + private Model combinationButton2CollisionModel = null; + private Model combinationButton3CollisionModel = null; + private Model combinationButton4CollisionModel = null; + private Model inclinationBombCollisionModel = null; + private Model inclinationBombButtonCollisionModel = null; + private Model wiresBombCollisionModel = null; + private Model wiresBombCollisionModelWire1 = null; + private Model wiresBombCollisionModelWire2 = null; + private Model wiresBombCollisionModelWire3 = null; + private Model easterEggCollisionModel = null; public BombGameEntityCreator(){ currentBombId = 0; manager = new AssetManager(); - // Create and set the lighting. - parameters = new EntityParameters(); - parameters.environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.3f, 0.3f, 0.3f, 1.0f)); - parameters.environment.add(new DirectionalLight().set(new Color(1, 1, 1, 1), new Vector3(0, 0, -1))); - - // Load the shader. - shader = new DirectionalLightPerPixelShader(); - try{ - shader.init(); - }catch(GdxRuntimeException gdx){ - Gdx.app.error(TAG, CLASS_NAME + ".BombGameEntityCreator(): Shader failed to load: " + gdx.getMessage()); - shader = null; - } - parameters.shader = shader; - // Load the render models. + manager.load("models/render_models/bomb_game/robot_arm.g3db", Model.class); manager.load("models/render_models/bomb_game/door.g3db", Model.class); manager.load("models/render_models/bomb_game/door_frame1.g3db", Model.class); @@ -139,6 +126,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{ // manager.load("models/render_models/bomb_game/", Model.class); // Load the collision models. + manager.load("models/collision_models/bomb_game/robot_arm_col.g3db", Model.class); manager.load("models/collision_models/bomb_game/door_col.g3db", Model.class); manager.load("models/collision_models/bomb_game/door_frame1_col.g3db", Model.class); @@ -160,7 +148,24 @@ public class BombGameEntityCreator extends EntityCreatorBase{ @Override public void createAllEntities(){ - // TODO: Add the robot arms. + EntityParameters parameters; + + // Create and set the lighting. + parameters = new EntityParameters(); + parameters.environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.3f, 0.3f, 0.3f, 1.0f)); + parameters.environment.add(new DirectionalLight().set(new Color(1, 1, 1, 1), new Vector3(0, 0, -1))); + + // Load the shader. + shader = new DirectionalLightPerPixelShader(); + try{ + shader.init(); + }catch(GdxRuntimeException gdx){ + Gdx.app.error(TAG, CLASS_NAME + ".BombGameEntityCreator(): Shader failed to load: " + gdx.getMessage()); + shader = null; + } + parameters.shader = shader; + + addRobotArm(parameters); // Add bombs. parameters.markerCode = 89; @@ -209,6 +214,17 @@ public class BombGameEntityCreator extends EntityCreatorBase{ manager.dispose(); } + private void addRobotArm(EntityParameters parameters){ + Entity robotArm = world.createEntity(); + + robotArm.addComponent(new GeometryComponent(new Vector3(), new Matrix3(), new Vector3(1, 1, 1))); + robotArm.addComponent(new EnvironmentComponent(parameters.environment)); + robotArm.addComponent(new ShaderComponent(parameters.shader)); + robotArm.addComponent(new RenderModelComponent(robotArmModel)); + robotArm.addComponent(new CollisionModelComponent(robotArmCollisionModel)); + robotArm.addToWorld(); + } + private void addBomb(EntityParameters parameters, bomb_type_t type) throws IllegalArgumentException{ Entity bomb; BombComponent bombComponent = new BombComponent(currentBombId, type); @@ -362,7 +378,8 @@ public class BombGameEntityCreator extends EntityCreatorBase{ } private void getModels(){ - // Load the render models. + // Get the render models. + robotArmModel = manager.get("models/render_models/bomb_game/robot_arm.g3db", Model.class); doorModel = manager.get("models/render_models/bomb_game/door.g3db", Model.class); doorFrameModel = manager.get("models/render_models/bomb_game/door_frame1.g3db", Model.class); @@ -381,7 +398,8 @@ public class BombGameEntityCreator extends EntityCreatorBase{ wiresBombModelWire3 = manager.get("models/render_models/bomb_game/cable_3.g3db", Model.class); // easterEggModel = manager.get("models/render_models/bomb_game/", Model.class); - // Load the collision models. + // Get the collision models. + robotArmCollisionModel = manager.get("models/collision_models/bomb_game/robot_arm_col.g3db", Model.class); doorCollisionModel = manager.get("models/collision_models/bomb_game/door_col.g3db", Model.class); doorFrameCollisionModel = manager.get("models/collision_models/bomb_game/door_frame1_col.g3db", Model.class); diff --git a/src/ve/ucv/ciens/ccg/nxtar/factories/UserInputFactory.java b/src/ve/ucv/ciens/ccg/nxtar/factories/UserInputFactory.java new file mode 100644 index 0000000..26eee80 --- /dev/null +++ b/src/ve/ucv/ciens/ccg/nxtar/factories/UserInputFactory.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 Miguel Angel Astor Romero + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ve.ucv.ciens.ccg.nxtar.factories; + +import ve.ucv.ciens.ccg.nxtar.factories.products.GamepadUserInput; +import ve.ucv.ciens.ccg.nxtar.factories.products.KeyboardUserInput; +import ve.ucv.ciens.ccg.nxtar.factories.products.TouchUserInput; +import ve.ucv.ciens.ccg.nxtar.factories.products.UserInput; + +public abstract class UserInputFactory{ + public static UserInput createTouchUserInput(){ + return new TouchUserInput(); + } + + public static UserInput createGamepadUserInput(){ + return new GamepadUserInput(); + } + + public static UserInput createKeyboardUserInput(){ + return new KeyboardUserInput(); + } +} diff --git a/src/ve/ucv/ciens/ccg/nxtar/factories/products/GamepadUserInput.java b/src/ve/ucv/ciens/ccg/nxtar/factories/products/GamepadUserInput.java new file mode 100644 index 0000000..f39a496 --- /dev/null +++ b/src/ve/ucv/ciens/ccg/nxtar/factories/products/GamepadUserInput.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2014 Miguel Angel Astor Romero + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ve.ucv.ciens.ccg.nxtar.factories.products; + +public class GamepadUserInput extends UserInput { + public float axisLeftX; + public float axisLeftY; + public float axisRightX; + public float axisRightY; + + public GamepadUserInput(){ + this.axisLeftX = 0.0f; + this.axisLeftY = 0.0f; + this.axisRightX = 0.0f; + this.axisRightY = 0.0f; + } +} diff --git a/src/ve/ucv/ciens/ccg/nxtar/factories/products/KeyboardUserInput.java b/src/ve/ucv/ciens/ccg/nxtar/factories/products/KeyboardUserInput.java new file mode 100644 index 0000000..813c6fb --- /dev/null +++ b/src/ve/ucv/ciens/ccg/nxtar/factories/products/KeyboardUserInput.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2014 Miguel Angel Astor Romero + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ve.ucv.ciens.ccg.nxtar.factories.products; + +public class KeyboardUserInput extends UserInput { + public boolean keyLeft; + public boolean keyRight; + public boolean keyUp; + public boolean keyDown; + public boolean keyA; + public boolean keyZ; + + public KeyboardUserInput(){ + this.keyLeft = false; + this.keyRight = false; + this.keyUp = false; + this.keyDown = false; + this.keyA = false; + this.keyZ = false; + } +} diff --git a/src/ve/ucv/ciens/ccg/nxtar/factories/products/TouchUserInput.java b/src/ve/ucv/ciens/ccg/nxtar/factories/products/TouchUserInput.java new file mode 100644 index 0000000..4a4ab2d --- /dev/null +++ b/src/ve/ucv/ciens/ccg/nxtar/factories/products/TouchUserInput.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2014 Miguel Angel Astor Romero + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ve.ucv.ciens.ccg.nxtar.factories.products; + +import com.badlogic.gdx.math.collision.Ray; + +public class TouchUserInput extends UserInput { + public Ray movementRay; + + public TouchUserInput(){ + movementRay = null; + } +} diff --git a/src/ve/ucv/ciens/ccg/nxtar/factories/products/UserInput.java b/src/ve/ucv/ciens/ccg/nxtar/factories/products/UserInput.java new file mode 100644 index 0000000..8213aa8 --- /dev/null +++ b/src/ve/ucv/ciens/ccg/nxtar/factories/products/UserInput.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2014 Miguel Angel Astor Romero + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ve.ucv.ciens.ccg.nxtar.factories.products; + +import ve.ucv.ciens.ccg.nxtar.factories.UserInputFactory; + +/** + * Tag class for the {@link UserInputFactory} products. + */ +public abstract class UserInput{} diff --git a/src/ve/ucv/ciens/ccg/nxtar/states/InGameState.java b/src/ve/ucv/ciens/ccg/nxtar/states/InGameState.java index f993a9b..8d00f7c 100644 --- a/src/ve/ucv/ciens/ccg/nxtar/states/InGameState.java +++ b/src/ve/ucv/ciens/ccg/nxtar/states/InGameState.java @@ -19,6 +19,8 @@ import ve.ucv.ciens.ccg.networkdata.MotorEvent; import ve.ucv.ciens.ccg.networkdata.MotorEvent.motor_t; import ve.ucv.ciens.ccg.nxtar.NxtARCore; import ve.ucv.ciens.ccg.nxtar.NxtARCore.game_states_t; +import ve.ucv.ciens.ccg.nxtar.factories.UserInputFactory; +import ve.ucv.ciens.ccg.nxtar.factories.products.UserInput; import ve.ucv.ciens.ccg.nxtar.graphics.CustomPerspectiveCamera; import ve.ucv.ciens.ccg.nxtar.interfaces.ImageProcessor.MarkerData; import ve.ucv.ciens.ccg.nxtar.network.monitors.MotorEventQueue; @@ -27,8 +29,8 @@ import ve.ucv.ciens.ccg.nxtar.systems.AnimationSystem; import ve.ucv.ciens.ccg.nxtar.systems.GeometrySystem; import ve.ucv.ciens.ccg.nxtar.systems.MarkerPositioningSystem; import ve.ucv.ciens.ccg.nxtar.systems.MarkerRenderingSystem; -import ve.ucv.ciens.ccg.nxtar.systems.ObjectPositioningSystem; import ve.ucv.ciens.ccg.nxtar.systems.ObjectRenderingSystem; +import ve.ucv.ciens.ccg.nxtar.systems.RobotArmPositioningSystem; import ve.ucv.ciens.ccg.nxtar.utils.GameSettings; import ve.ucv.ciens.ccg.nxtar.utils.ProjectConstants; @@ -74,6 +76,7 @@ public class InGameState extends BaseState{ private World gameWorld; private MarkerRenderingSystem markerRenderingSystem; private ObjectRenderingSystem objectRenderingSystem; + private RobotArmPositioningSystem robotArmPositioningSystem; // Cameras. private OrthographicCamera unitaryOrthoCamera; @@ -179,8 +182,9 @@ public class InGameState extends BaseState{ // Set up the game world. gameWorld = GameSettings.getGameWorld(); + robotArmPositioningSystem = new RobotArmPositioningSystem(); gameWorld.setSystem(new MarkerPositioningSystem()); - gameWorld.setSystem(new ObjectPositioningSystem(), true); + gameWorld.setSystem(robotArmPositioningSystem, true); gameWorld.setSystem(new GeometrySystem()); gameWorld.setSystem(new AnimationSystem()); // TODO: Make and add object-marker collision detection system. @@ -442,6 +446,7 @@ public class InGameState extends BaseState{ @Override public boolean touchDown(int screenX, int screenY, int pointer, int button){ MotorEvent event; + UserInput input; if(!Ouya.runningOnOuya){ win2world.set(screenX, screenY, 0.0f); @@ -529,8 +534,14 @@ public class InGameState extends BaseState{ event.setPower((byte)0x00); queue.addEvent(event); } + }else{ - // TODO: Send input to the input handler system. + input = UserInputFactory.createTouchUserInput(); + + // TODO: Calculate movement ray. + + robotArmPositioningSystem.setUserInput(input); + robotArmPositioningSystem.process(); } return true; @@ -640,8 +651,6 @@ public class InGameState extends BaseState{ motorButtonsPointers[6] = -1; motorButtonsTouched[6] = false; - }else{ - // TODO: Pass input to the input handler system. } return true; @@ -748,8 +757,6 @@ public class InGameState extends BaseState{ motorButtonsPointers[6] = -1; motorButtonsTouched[6] = false; - }else{ - // TODO: Pass input to the input handler system. } return true; @@ -846,8 +853,9 @@ public class InGameState extends BaseState{ event.setMotor(motor_t.RECENTER); event.setPower((byte)0x00); queue.addEvent(event); - }else{ - // TODO: Pass input to the input handler system. + + }else if(buttonCode == Ouya.BUTTON_A){ + core.nextState = game_states_t.MAIN_MENU; } return true; @@ -923,8 +931,6 @@ public class InGameState extends BaseState{ }else if(buttonCode == Ouya.BUTTON_Y){ motorGamepadButtonPressed[6] = false; - }else{ - // TODO: Pass input to the input handler system. } return true; diff --git a/src/ve/ucv/ciens/ccg/nxtar/systems/ObjectRenderingSystem.java b/src/ve/ucv/ciens/ccg/nxtar/systems/ObjectRenderingSystem.java index 793db24..bdf9654 100644 --- a/src/ve/ucv/ciens/ccg/nxtar/systems/ObjectRenderingSystem.java +++ b/src/ve/ucv/ciens/ccg/nxtar/systems/ObjectRenderingSystem.java @@ -16,11 +16,9 @@ package ve.ucv.ciens.ccg.nxtar.systems; import ve.ucv.ciens.ccg.nxtar.components.EnvironmentComponent; -import ve.ucv.ciens.ccg.nxtar.components.GeometryComponent; import ve.ucv.ciens.ccg.nxtar.components.MarkerCodeComponent; import ve.ucv.ciens.ccg.nxtar.components.RenderModelComponent; import ve.ucv.ciens.ccg.nxtar.components.ShaderComponent; -import ve.ucv.ciens.ccg.nxtar.components.VisibilityComponent; import com.artemis.Aspect; import com.artemis.ComponentMapper; @@ -35,40 +33,19 @@ import com.badlogic.gdx.graphics.g3d.ModelBatch; * entities to be rendered must have a geometry, shader and mesh component associated.
*/ public class ObjectRenderingSystem extends EntityProcessingSystem { -// @Mapper ComponentMapperA matrix representing 3D translations.
-// */ -// private Matrix4 translationMatrix; -// -// /** -// *A matrix representing 3D rotations.
-// */ -// private Matrix4 rotationMatrix; -// -// /** -// *A matrix representing 3D scalings.
-// */ -// private Matrix4 scalingMatrix; private PerspectiveCamera camera; - private ModelBatch batch; @SuppressWarnings("unchecked") public ObjectRenderingSystem(ModelBatch batch) { - super(Aspect.getAspectForAll(GeometryComponent.class, ShaderComponent.class, RenderModelComponent.class, EnvironmentComponent.class, VisibilityComponent.class).exclude(MarkerCodeComponent.class)); + super(Aspect.getAspectForAll(ShaderComponent.class, RenderModelComponent.class, EnvironmentComponent.class).exclude(MarkerCodeComponent.class)); - camera = null; - this.batch = batch; -// translationMatrix = new Matrix4().setToTranslation(0.0f, 0.0f, 0.0f); -// rotationMatrix = new Matrix4().idt(); -// scalingMatrix = new Matrix4().setToScaling(0.0f, 0.0f, 0.0f); + camera = null; + this.batch = batch; } public void begin(PerspectiveCamera camera) throws RuntimeException{ @@ -84,37 +61,18 @@ public class ObjectRenderingSystem extends EntityProcessingSystem { camera = null; } - /** - *Renders the entity passed by parameter, calculating it's corresponding geometric - * transformation and setting and calling it's associated shader program.
- * - * @param e The entity to be processed. - */ @Override protected void process(Entity e) { EnvironmentComponent environment; -// GeometryComponent geometryComponent; ShaderComponent shaderComponent; RenderModelComponent renderModelComponent; - VisibilityComponent visibility; // Get the necessary components. -// geometryComponent = geometryMapper.get(e); renderModelComponent = modelMapper.get(e); shaderComponent = shaderMapper.get(e); environment = environmentMapper.get(e); - visibility = visibiltyMapper.get(e); - if(visibility.visible){ - // Calculate the geometric transformation for this entity. -// translationMatrix.setToTranslation(geometryComponent.position); -// rotationMatrix.set(geometryComponent.rotation); -// scalingMatrix.setToScaling(geometryComponent.scaling); -// renderModelComponent.instance.transform.idt().mul(translationMatrix).mul(rotationMatrix).mul(scalingMatrix); -// renderModelComponent.instance.calculateTransforms(); - - // Render this entity. - batch.render(renderModelComponent.instance, environment.environment, shaderComponent.shader); - } + // Render this entity. + batch.render(renderModelComponent.instance, environment.environment, shaderComponent.shader); } } diff --git a/src/ve/ucv/ciens/ccg/nxtar/systems/ObjectPositioningSystem.java b/src/ve/ucv/ciens/ccg/nxtar/systems/RobotArmPositioningSystem.java similarity index 61% rename from src/ve/ucv/ciens/ccg/nxtar/systems/ObjectPositioningSystem.java rename to src/ve/ucv/ciens/ccg/nxtar/systems/RobotArmPositioningSystem.java index 624cbce..0278434 100644 --- a/src/ve/ucv/ciens/ccg/nxtar/systems/ObjectPositioningSystem.java +++ b/src/ve/ucv/ciens/ccg/nxtar/systems/RobotArmPositioningSystem.java @@ -16,6 +16,10 @@ package ve.ucv.ciens.ccg.nxtar.systems; import ve.ucv.ciens.ccg.nxtar.components.GeometryComponent; +import ve.ucv.ciens.ccg.nxtar.factories.products.GamepadUserInput; +import ve.ucv.ciens.ccg.nxtar.factories.products.KeyboardUserInput; +import ve.ucv.ciens.ccg.nxtar.factories.products.TouchUserInput; +import ve.ucv.ciens.ccg.nxtar.factories.products.UserInput; import com.artemis.Aspect; import com.artemis.ComponentMapper; @@ -23,22 +27,35 @@ import com.artemis.Entity; import com.artemis.annotations.Mapper; import com.artemis.systems.EntityProcessingSystem; -public class ObjectPositioningSystem extends EntityProcessingSystem { +public class RobotArmPositioningSystem extends EntityProcessingSystem { @Mapper ComponentMapper