Added collision detection.
This commit is contained in:
@@ -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.components;
|
||||||
|
|
||||||
|
import com.artemis.Component;
|
||||||
|
import com.badlogic.gdx.math.Vector3;
|
||||||
|
|
||||||
|
public class AutomaticMovementComponent extends Component {
|
||||||
|
public boolean moving;
|
||||||
|
public boolean forward;
|
||||||
|
public Vector3 startPoint;
|
||||||
|
public Vector3 endPoint;
|
||||||
|
public float distance;
|
||||||
|
|
||||||
|
public AutomaticMovementComponent(){
|
||||||
|
this.moving = false;
|
||||||
|
this.forward = true;
|
||||||
|
this.startPoint = new Vector3();
|
||||||
|
this.endPoint = new Vector3();
|
||||||
|
this.distance = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,14 +13,14 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.factories.products;
|
package ve.ucv.ciens.ccg.nxtar.components;
|
||||||
|
|
||||||
import com.badlogic.gdx.math.collision.Ray;
|
import com.artemis.Component;
|
||||||
|
|
||||||
public class TouchUserInput extends UserInput {
|
public class CollisionDetectionComponent extends Component {
|
||||||
public Ray movementRay;
|
public boolean colliding;
|
||||||
|
|
||||||
public TouchUserInput(){
|
public CollisionDetectionComponent(){
|
||||||
movementRay = null;
|
this.colliding = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,8 +16,10 @@
|
|||||||
package ve.ucv.ciens.ccg.nxtar.entities;
|
package ve.ucv.ciens.ccg.nxtar.entities;
|
||||||
|
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.AnimationComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.AnimationComponent;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.AutomaticMovementComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.BombComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.BombComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.BombComponent.bomb_type_t;
|
import ve.ucv.ciens.ccg.nxtar.components.BombComponent.bomb_type_t;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.CollisionDetectionComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.CollisionModelComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.CollisionModelComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.EnvironmentComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.EnvironmentComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.GeometryComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.GeometryComponent;
|
||||||
@@ -26,8 +28,10 @@ import ve.ucv.ciens.ccg.nxtar.components.RenderModelComponent;
|
|||||||
import ve.ucv.ciens.ccg.nxtar.components.ShaderComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.ShaderComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.VisibilityComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.VisibilityComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.graphics.shaders.DirectionalLightPerPixelShader;
|
import ve.ucv.ciens.ccg.nxtar.graphics.shaders.DirectionalLightPerPixelShader;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.systems.CollisionDetectionSystem;
|
||||||
|
|
||||||
import com.artemis.Entity;
|
import com.artemis.Entity;
|
||||||
|
import com.artemis.managers.GroupManager;
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.assets.AssetManager;
|
import com.badlogic.gdx.assets.AssetManager;
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
@@ -64,8 +68,9 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Shader shader;
|
private Shader shader;
|
||||||
private int currentBombId;
|
private int currentBombId;
|
||||||
|
private GroupManager groupManager;
|
||||||
|
|
||||||
// Render models.
|
// Render models.
|
||||||
private Model robotArmModel = null;
|
private Model robotArmModel = null;
|
||||||
@@ -82,7 +87,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
private Model wiresBombModelWire1 = null;
|
private Model wiresBombModelWire1 = null;
|
||||||
private Model wiresBombModelWire2 = null;
|
private Model wiresBombModelWire2 = null;
|
||||||
private Model wiresBombModelWire3 = null;
|
private Model wiresBombModelWire3 = null;
|
||||||
private Model easterEggModel = null;
|
private Model monkeyModel = null;
|
||||||
|
|
||||||
// Collision models.
|
// Collision models.
|
||||||
private Model robotArmCollisionModel = null;
|
private Model robotArmCollisionModel = null;
|
||||||
@@ -99,7 +104,6 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
private Model wiresBombCollisionModelWire1 = null;
|
private Model wiresBombCollisionModelWire1 = null;
|
||||||
private Model wiresBombCollisionModelWire2 = null;
|
private Model wiresBombCollisionModelWire2 = null;
|
||||||
private Model wiresBombCollisionModelWire3 = null;
|
private Model wiresBombCollisionModelWire3 = null;
|
||||||
private Model easterEggCollisionModel = null;
|
|
||||||
|
|
||||||
public BombGameEntityCreator(){
|
public BombGameEntityCreator(){
|
||||||
currentBombId = 0;
|
currentBombId = 0;
|
||||||
@@ -123,7 +127,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
manager.load("models/render_models/bomb_game/cable_1.g3db", Model.class);
|
manager.load("models/render_models/bomb_game/cable_1.g3db", Model.class);
|
||||||
manager.load("models/render_models/bomb_game/cable_2.g3db", Model.class);
|
manager.load("models/render_models/bomb_game/cable_2.g3db", Model.class);
|
||||||
manager.load("models/render_models/bomb_game/cable_3.g3db", Model.class);
|
manager.load("models/render_models/bomb_game/cable_3.g3db", Model.class);
|
||||||
// manager.load("models/render_models/bomb_game/", Model.class);
|
manager.load("models/render_models/bomb_game/monkey.g3db", Model.class);
|
||||||
|
|
||||||
// Load the collision models.
|
// Load the collision models.
|
||||||
manager.load("models/collision_models/bomb_game/robot_arm_col.g3db", Model.class);
|
manager.load("models/collision_models/bomb_game/robot_arm_col.g3db", Model.class);
|
||||||
@@ -143,12 +147,14 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
manager.load("models/collision_models/bomb_game/cable_1_col.g3db", Model.class);
|
manager.load("models/collision_models/bomb_game/cable_1_col.g3db", Model.class);
|
||||||
manager.load("models/collision_models/bomb_game/cable_2_col.g3db", Model.class);
|
manager.load("models/collision_models/bomb_game/cable_2_col.g3db", Model.class);
|
||||||
manager.load("models/collision_models/bomb_game/cable_3_col.g3db", Model.class);
|
manager.load("models/collision_models/bomb_game/cable_3_col.g3db", Model.class);
|
||||||
// manager.load("models/collision_models/bomb_game/door.g3db", Model.class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createAllEntities(){
|
public void createAllEntities(){
|
||||||
EntityParameters parameters;
|
EntityParameters parameters;
|
||||||
|
Entity monkey;
|
||||||
|
|
||||||
|
groupManager = world.getManager(GroupManager.class);
|
||||||
|
|
||||||
// Create and set the lighting.
|
// Create and set the lighting.
|
||||||
parameters = new EntityParameters();
|
parameters = new EntityParameters();
|
||||||
@@ -186,7 +192,15 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
parameters.markerCode = 91;
|
parameters.markerCode = 91;
|
||||||
addDoor(parameters);
|
addDoor(parameters);
|
||||||
|
|
||||||
// TODO: Add easter egg.
|
// Add the monkey.
|
||||||
|
monkey = world.createEntity();
|
||||||
|
monkey.addComponent(new RenderModelComponent(monkeyModel));
|
||||||
|
monkey.addComponent(new GeometryComponent());
|
||||||
|
monkey.addComponent(new MarkerCodeComponent(1023));
|
||||||
|
monkey.addComponent(new VisibilityComponent());
|
||||||
|
monkey.addComponent(new ShaderComponent(shader));
|
||||||
|
monkey.addComponent(new EnvironmentComponent(parameters.environment));
|
||||||
|
monkey.addToWorld();
|
||||||
|
|
||||||
entitiesCreated = true;
|
entitiesCreated = true;
|
||||||
}
|
}
|
||||||
@@ -217,11 +231,13 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
private void addRobotArm(EntityParameters parameters){
|
private void addRobotArm(EntityParameters parameters){
|
||||||
Entity robotArm = world.createEntity();
|
Entity robotArm = world.createEntity();
|
||||||
|
|
||||||
robotArm.addComponent(new GeometryComponent(new Vector3(), new Matrix3(), new Vector3(1, 1, 1)));
|
robotArm.addComponent(new GeometryComponent(new Vector3(-1.0f, 0.0f, 0.0f), new Matrix3(), new Vector3(1, 1, 1)));
|
||||||
robotArm.addComponent(new EnvironmentComponent(parameters.environment));
|
robotArm.addComponent(new EnvironmentComponent(parameters.environment));
|
||||||
robotArm.addComponent(new ShaderComponent(parameters.shader));
|
robotArm.addComponent(new ShaderComponent(parameters.shader));
|
||||||
robotArm.addComponent(new RenderModelComponent(robotArmModel));
|
robotArm.addComponent(new RenderModelComponent(robotArmModel));
|
||||||
robotArm.addComponent(new CollisionModelComponent(robotArmCollisionModel));
|
robotArm.addComponent(new CollisionModelComponent(robotArmCollisionModel));
|
||||||
|
robotArm.addComponent(new AutomaticMovementComponent());
|
||||||
|
robotArm.addComponent(new CollisionDetectionComponent());
|
||||||
robotArm.addToWorld();
|
robotArm.addToWorld();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,6 +280,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
throw new IllegalArgumentException("Unrecognized bomb type: " + Integer.toString(type.getValue()));
|
throw new IllegalArgumentException("Unrecognized bomb type: " + Integer.toString(type.getValue()));
|
||||||
|
|
||||||
// Add the bomb and increase the id for the next one.
|
// Add the bomb and increase the id for the next one.
|
||||||
|
groupManager.add(bomb, CollisionDetectionSystem.COLLIDABLE_OBJECT);
|
||||||
bomb.addToWorld();
|
bomb.addToWorld();
|
||||||
currentBombId++;
|
currentBombId++;
|
||||||
}
|
}
|
||||||
@@ -320,6 +337,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
thing.addComponent(new BombComponent(bomb));
|
thing.addComponent(new BombComponent(bomb));
|
||||||
thing.addComponent(new VisibilityComponent());
|
thing.addComponent(new VisibilityComponent());
|
||||||
thing.addComponent(new MarkerCodeComponent(parameters.markerCode));
|
thing.addComponent(new MarkerCodeComponent(parameters.markerCode));
|
||||||
|
groupManager.add(thing, CollisionDetectionSystem.COLLIDABLE_OBJECT);
|
||||||
|
|
||||||
if(DEBUG_RENDER_PARAPHERNALIA_COLLISION_MODELS)
|
if(DEBUG_RENDER_PARAPHERNALIA_COLLISION_MODELS)
|
||||||
addDebugCollisionModelRenderingEntity(collisionModel, parameters, false);
|
addDebugCollisionModelRenderingEntity(collisionModel, parameters, false);
|
||||||
@@ -351,6 +369,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
door.addComponent(new VisibilityComponent());
|
door.addComponent(new VisibilityComponent());
|
||||||
doorInstance = door.getComponent(RenderModelComponent.class).instance;
|
doorInstance = door.getComponent(RenderModelComponent.class).instance;
|
||||||
door.addComponent(new AnimationComponent(doorInstance, parameters.nextAnimation, parameters.loopAnimation));
|
door.addComponent(new AnimationComponent(doorInstance, parameters.nextAnimation, parameters.loopAnimation));
|
||||||
|
groupManager.add(door, CollisionDetectionSystem.COLLIDABLE_OBJECT);
|
||||||
door.addToWorld();
|
door.addToWorld();
|
||||||
|
|
||||||
if(DEBUG_RENDER_DOOR_COLLISION_MODELS){
|
if(DEBUG_RENDER_DOOR_COLLISION_MODELS){
|
||||||
@@ -396,7 +415,7 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
wiresBombModelWire1 = manager.get("models/render_models/bomb_game/cable_1.g3db", Model.class);
|
wiresBombModelWire1 = manager.get("models/render_models/bomb_game/cable_1.g3db", Model.class);
|
||||||
wiresBombModelWire2 = manager.get("models/render_models/bomb_game/cable_2.g3db", Model.class);
|
wiresBombModelWire2 = manager.get("models/render_models/bomb_game/cable_2.g3db", Model.class);
|
||||||
wiresBombModelWire3 = manager.get("models/render_models/bomb_game/cable_3.g3db", Model.class);
|
wiresBombModelWire3 = manager.get("models/render_models/bomb_game/cable_3.g3db", Model.class);
|
||||||
// easterEggModel = manager.get("models/render_models/bomb_game/", Model.class);
|
monkeyModel = manager.get("models/render_models/bomb_game/monkey.g3db", Model.class);
|
||||||
|
|
||||||
// Get the collision models.
|
// Get the collision models.
|
||||||
robotArmCollisionModel = manager.get("models/collision_models/bomb_game/robot_arm_col.g3db", Model.class);
|
robotArmCollisionModel = manager.get("models/collision_models/bomb_game/robot_arm_col.g3db", Model.class);
|
||||||
@@ -416,6 +435,5 @@ public class BombGameEntityCreator extends EntityCreatorBase{
|
|||||||
wiresBombCollisionModelWire1 = manager.get("models/collision_models/bomb_game/cable_1_col.g3db", Model.class);
|
wiresBombCollisionModelWire1 = manager.get("models/collision_models/bomb_game/cable_1_col.g3db", Model.class);
|
||||||
wiresBombCollisionModelWire2 = manager.get("models/collision_models/bomb_game/cable_2_col.g3db", Model.class);
|
wiresBombCollisionModelWire2 = manager.get("models/collision_models/bomb_game/cable_2_col.g3db", Model.class);
|
||||||
wiresBombCollisionModelWire3 = manager.get("models/collision_models/bomb_game/cable_3_col.g3db", Model.class);
|
wiresBombCollisionModelWire3 = manager.get("models/collision_models/bomb_game/cable_3_col.g3db", Model.class);
|
||||||
// easterEggCollisionModel = manager.get("models/collision_models/bomb_game/door.g3db", Model.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.factories.products;
|
package ve.ucv.ciens.ccg.nxtar.input;
|
||||||
|
|
||||||
public class GamepadUserInput extends UserInput {
|
public class GamepadUserInput extends UserInput {
|
||||||
public float axisLeftX;
|
public float axisLeftX;
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.factories.products;
|
package ve.ucv.ciens.ccg.nxtar.input;
|
||||||
|
|
||||||
public class KeyboardUserInput extends UserInput {
|
public class KeyboardUserInput extends UserInput {
|
||||||
public boolean keyLeft;
|
public boolean keyLeft;
|
||||||
@@ -13,23 +13,22 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.factories;
|
package ve.ucv.ciens.ccg.nxtar.input;
|
||||||
|
|
||||||
import ve.ucv.ciens.ccg.nxtar.factories.products.GamepadUserInput;
|
import com.badlogic.gdx.math.Vector3;
|
||||||
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 class TouchUserInput extends UserInput {
|
||||||
public static UserInput createTouchUserInput(){
|
public Vector3 userTouchEndPoint;
|
||||||
return new TouchUserInput();
|
|
||||||
|
public TouchUserInput(){
|
||||||
|
this.userTouchEndPoint = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UserInput createGamepadUserInput(){
|
public TouchUserInput(Vector3 userTouchEndPoint){
|
||||||
return new GamepadUserInput();
|
this.userTouchEndPoint = new Vector3(userTouchEndPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UserInput createKeyboardUserInput(){
|
public TouchUserInput(float x, float y, float z){
|
||||||
return new KeyboardUserInput();
|
this.userTouchEndPoint = new Vector3(x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,11 +13,6 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.factories.products;
|
package ve.ucv.ciens.ccg.nxtar.input;
|
||||||
|
|
||||||
import ve.ucv.ciens.ccg.nxtar.factories.UserInputFactory;
|
public abstract class UserInput{ }
|
||||||
|
|
||||||
/**
|
|
||||||
* Tag class for the {@link UserInputFactory} products.
|
|
||||||
*/
|
|
||||||
public abstract class UserInput{}
|
|
||||||
@@ -20,7 +20,6 @@ import java.io.IOException;
|
|||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.net.DatagramPacket;
|
import java.net.DatagramPacket;
|
||||||
import java.net.DatagramSocket;
|
import java.net.DatagramSocket;
|
||||||
import java.net.Socket;
|
|
||||||
|
|
||||||
import ve.ucv.ciens.ccg.networkdata.VideoFrameDataMessage;
|
import ve.ucv.ciens.ccg.networkdata.VideoFrameDataMessage;
|
||||||
import ve.ucv.ciens.ccg.nxtar.interfaces.ApplicationEventsListener;
|
import ve.ucv.ciens.ccg.nxtar.interfaces.ApplicationEventsListener;
|
||||||
@@ -41,7 +40,6 @@ public class VideoStreamingThread extends Thread{
|
|||||||
private boolean pause;
|
private boolean pause;
|
||||||
private boolean coreNotified;
|
private boolean coreNotified;
|
||||||
private Object protocolPauseMonitor;
|
private Object protocolPauseMonitor;
|
||||||
private Socket client;
|
|
||||||
private VideoFrameMonitor frameMonitor;
|
private VideoFrameMonitor frameMonitor;
|
||||||
private long then;
|
private long then;
|
||||||
private long now;
|
private long now;
|
||||||
@@ -236,12 +234,6 @@ public class VideoStreamingThread extends Thread{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
|
||||||
client.close();
|
|
||||||
}catch(IOException io){
|
|
||||||
Gdx.app.error(TAG, CLASS_NAME + ".run() :: Error closing client socket.", io);
|
|
||||||
}
|
|
||||||
|
|
||||||
Gdx.app.debug(TAG, CLASS_NAME + ".run() :: Thread finished.");
|
Gdx.app.debug(TAG, CLASS_NAME + ".run() :: Thread finished.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,14 +61,11 @@ public class VideoFrameMonitor{
|
|||||||
public void setNewFrame(byte[] frame){
|
public void setNewFrame(byte[] frame){
|
||||||
byte[] temp;
|
byte[] temp;
|
||||||
|
|
||||||
Gdx.app.debug(TAG, CLASS_NAME + ".setNewFrame() :: Loading new frame in frameA.");
|
|
||||||
frameA = frame;
|
frameA = frame;
|
||||||
temp = frameA;
|
temp = frameA;
|
||||||
synchronized(frameMonitor){
|
synchronized(frameMonitor){
|
||||||
Gdx.app.debug(TAG, CLASS_NAME + ".setNewFrame() :: Swapping frameA and frameB.");
|
|
||||||
frameA = frameB;
|
frameA = frameB;
|
||||||
frameB = temp;
|
frameB = temp;
|
||||||
Gdx.app.debug(TAG, CLASS_NAME + ".setNewFrame() :: Swapping done.");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +73,6 @@ public class VideoFrameMonitor{
|
|||||||
byte[] frame;
|
byte[] frame;
|
||||||
|
|
||||||
synchronized(frameMonitor){
|
synchronized(frameMonitor){
|
||||||
//Gdx.app.debug(TAG, CLASS_NAME + ".getCurrentFrame() :: Fetching frameB.");
|
|
||||||
frame = frameB;
|
frame = frameB;
|
||||||
}
|
}
|
||||||
return frame;
|
return frame;
|
||||||
|
|||||||
@@ -19,13 +19,14 @@ import ve.ucv.ciens.ccg.networkdata.MotorEvent;
|
|||||||
import ve.ucv.ciens.ccg.networkdata.MotorEvent.motor_t;
|
import ve.ucv.ciens.ccg.networkdata.MotorEvent.motor_t;
|
||||||
import ve.ucv.ciens.ccg.nxtar.NxtARCore;
|
import ve.ucv.ciens.ccg.nxtar.NxtARCore;
|
||||||
import ve.ucv.ciens.ccg.nxtar.NxtARCore.game_states_t;
|
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.graphics.CustomPerspectiveCamera;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.input.GamepadUserInput;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.input.TouchUserInput;
|
||||||
import ve.ucv.ciens.ccg.nxtar.interfaces.ImageProcessor.MarkerData;
|
import ve.ucv.ciens.ccg.nxtar.interfaces.ImageProcessor.MarkerData;
|
||||||
import ve.ucv.ciens.ccg.nxtar.network.monitors.MotorEventQueue;
|
import ve.ucv.ciens.ccg.nxtar.network.monitors.MotorEventQueue;
|
||||||
import ve.ucv.ciens.ccg.nxtar.network.monitors.VideoFrameMonitor;
|
import ve.ucv.ciens.ccg.nxtar.network.monitors.VideoFrameMonitor;
|
||||||
import ve.ucv.ciens.ccg.nxtar.systems.AnimationSystem;
|
import ve.ucv.ciens.ccg.nxtar.systems.AnimationSystem;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.systems.CollisionDetectionSystem;
|
||||||
import ve.ucv.ciens.ccg.nxtar.systems.GeometrySystem;
|
import ve.ucv.ciens.ccg.nxtar.systems.GeometrySystem;
|
||||||
import ve.ucv.ciens.ccg.nxtar.systems.MarkerPositioningSystem;
|
import ve.ucv.ciens.ccg.nxtar.systems.MarkerPositioningSystem;
|
||||||
import ve.ucv.ciens.ccg.nxtar.systems.MarkerRenderingSystem;
|
import ve.ucv.ciens.ccg.nxtar.systems.MarkerRenderingSystem;
|
||||||
@@ -60,6 +61,7 @@ public class InGameState extends BaseState{
|
|||||||
private static final String BACKGROUND_SHADER_PATH = "shaders/bckg/bckg";
|
private static final String BACKGROUND_SHADER_PATH = "shaders/bckg/bckg";
|
||||||
private static final float NEAR = 0.01f;
|
private static final float NEAR = 0.01f;
|
||||||
private static final float FAR = 100.0f;
|
private static final float FAR = 100.0f;
|
||||||
|
private static final Vector3 TEMP_VEC_3 = new Vector3();
|
||||||
|
|
||||||
// Background related fields.
|
// Background related fields.
|
||||||
private float uScaling[];
|
private float uScaling[];
|
||||||
@@ -79,7 +81,7 @@ public class InGameState extends BaseState{
|
|||||||
private RobotArmPositioningSystem robotArmPositioningSystem;
|
private RobotArmPositioningSystem robotArmPositioningSystem;
|
||||||
|
|
||||||
// Cameras.
|
// Cameras.
|
||||||
private OrthographicCamera unitaryOrthoCamera;
|
private OrthographicCamera unitaryOrthographicCamera;
|
||||||
private OrthographicCamera pixelPerfectOrthoCamera;
|
private OrthographicCamera pixelPerfectOrthoCamera;
|
||||||
private CustomPerspectiveCamera perspectiveCamera;
|
private CustomPerspectiveCamera perspectiveCamera;
|
||||||
|
|
||||||
@@ -118,7 +120,7 @@ public class InGameState extends BaseState{
|
|||||||
|
|
||||||
// Set up the cameras.
|
// Set up the cameras.
|
||||||
pixelPerfectOrthoCamera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
pixelPerfectOrthoCamera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
||||||
unitaryOrthoCamera = new OrthographicCamera(1.0f, Gdx.graphics.getHeight() / Gdx.graphics.getWidth());
|
unitaryOrthographicCamera = new OrthographicCamera(1.0f, Gdx.graphics.getHeight() / Gdx.graphics.getWidth());
|
||||||
|
|
||||||
if(!Ouya.runningOnOuya) setUpButtons();
|
if(!Ouya.runningOnOuya) setUpButtons();
|
||||||
|
|
||||||
@@ -183,15 +185,15 @@ public class InGameState extends BaseState{
|
|||||||
gameWorld = GameSettings.getGameWorld();
|
gameWorld = GameSettings.getGameWorld();
|
||||||
|
|
||||||
robotArmPositioningSystem = new RobotArmPositioningSystem();
|
robotArmPositioningSystem = new RobotArmPositioningSystem();
|
||||||
|
markerRenderingSystem = new MarkerRenderingSystem(modelBatch);
|
||||||
|
objectRenderingSystem = new ObjectRenderingSystem(modelBatch);
|
||||||
|
|
||||||
gameWorld.setSystem(new MarkerPositioningSystem());
|
gameWorld.setSystem(new MarkerPositioningSystem());
|
||||||
gameWorld.setSystem(robotArmPositioningSystem, true);
|
gameWorld.setSystem(robotArmPositioningSystem, Ouya.runningOnOuya);
|
||||||
gameWorld.setSystem(new GeometrySystem());
|
gameWorld.setSystem(new GeometrySystem());
|
||||||
gameWorld.setSystem(new AnimationSystem());
|
gameWorld.setSystem(new AnimationSystem());
|
||||||
// TODO: Make and add object-marker collision detection system.
|
gameWorld.setSystem(new CollisionDetectionSystem());
|
||||||
//gameWorld.setSystem(GameSettings.gameLogicSystem);
|
//gameWorld.setSystem(GameSettings.gameLogicSystem);
|
||||||
|
|
||||||
markerRenderingSystem = new MarkerRenderingSystem(modelBatch);
|
|
||||||
objectRenderingSystem = new ObjectRenderingSystem(modelBatch);
|
|
||||||
gameWorld.setSystem(markerRenderingSystem, true);
|
gameWorld.setSystem(markerRenderingSystem, true);
|
||||||
gameWorld.setSystem(objectRenderingSystem, true);
|
gameWorld.setSystem(objectRenderingSystem, true);
|
||||||
|
|
||||||
@@ -325,7 +327,7 @@ public class InGameState extends BaseState{
|
|||||||
|
|
||||||
// Set the correct camera for the device.
|
// Set the correct camera for the device.
|
||||||
if(!Ouya.runningOnOuya){
|
if(!Ouya.runningOnOuya){
|
||||||
core.batch.setProjectionMatrix(unitaryOrthoCamera.combined);
|
core.batch.setProjectionMatrix(unitaryOrthographicCamera.combined);
|
||||||
}else{
|
}else{
|
||||||
core.batch.setProjectionMatrix(pixelPerfectOrthoCamera.combined);
|
core.batch.setProjectionMatrix(pixelPerfectOrthoCamera.combined);
|
||||||
}
|
}
|
||||||
@@ -446,11 +448,11 @@ public class InGameState extends BaseState{
|
|||||||
@Override
|
@Override
|
||||||
public boolean touchDown(int screenX, int screenY, int pointer, int button){
|
public boolean touchDown(int screenX, int screenY, int pointer, int button){
|
||||||
MotorEvent event;
|
MotorEvent event;
|
||||||
UserInput input;
|
TouchUserInput input;
|
||||||
|
|
||||||
if(!Ouya.runningOnOuya){
|
if(!Ouya.runningOnOuya){
|
||||||
win2world.set(screenX, screenY, 0.0f);
|
win2world.set(screenX, screenY, 0.0f);
|
||||||
unitaryOrthoCamera.unproject(win2world);
|
unitaryOrthographicCamera.unproject(win2world);
|
||||||
touchPointWorldCoords.set(win2world.x * Gdx.graphics.getWidth(), win2world.y * Gdx.graphics.getHeight());
|
touchPointWorldCoords.set(win2world.x * Gdx.graphics.getWidth(), win2world.y * Gdx.graphics.getHeight());
|
||||||
|
|
||||||
Gdx.app.log(TAG, CLASS_NAME + String.format(".touchDown(%d, %d, %d, %d)", screenX, screenY, pointer, button));
|
Gdx.app.log(TAG, CLASS_NAME + String.format(".touchDown(%d, %d, %d, %d)", screenX, screenY, pointer, button));
|
||||||
@@ -536,12 +538,21 @@ public class InGameState extends BaseState{
|
|||||||
}
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
input = UserInputFactory.createTouchUserInput();
|
touchPointWorldCoords.set(win2world.x, win2world.y);
|
||||||
|
if(frameBufferSprite != null && frameBufferSprite.getBoundingRectangle().contains(touchPointWorldCoords)){
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + "touchDown(): Touch point inside framebuffer.");
|
||||||
|
|
||||||
// TODO: Calculate movement ray.
|
TEMP_VEC_3.set(screenX, screenY, 1.0f);
|
||||||
|
perspectiveCamera.unproject(TEMP_VEC_3, frameBufferSprite.getX(), frameBufferSprite.getY(), frameBufferSprite.getWidth() * Gdx.graphics.getWidth(), frameBufferSprite.getHeight() * Gdx.graphics.getHeight());
|
||||||
|
TEMP_VEC_3.rotate(Vector3.Z, 90).nor();
|
||||||
|
TEMP_VEC_3.y = -TEMP_VEC_3.y;
|
||||||
|
//Gdx.app.log("TAG", CLASS_NAME + "touchDown(): Unprojected" + Utils.vector2String(TEMP_VEC_3));
|
||||||
|
|
||||||
robotArmPositioningSystem.setUserInput(input);
|
input = new TouchUserInput(TEMP_VEC_3);
|
||||||
robotArmPositioningSystem.process();
|
robotArmPositioningSystem.setUserInput(input);
|
||||||
|
}else{
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + "touchDown(): Touch point outside framebuffer.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -556,7 +567,7 @@ public class InGameState extends BaseState{
|
|||||||
|
|
||||||
if(!Ouya.runningOnOuya){
|
if(!Ouya.runningOnOuya){
|
||||||
win2world.set(screenX, screenY, 0.0f);
|
win2world.set(screenX, screenY, 0.0f);
|
||||||
unitaryOrthoCamera.unproject(win2world);
|
unitaryOrthographicCamera.unproject(win2world);
|
||||||
touchPointWorldCoords.set(win2world.x * Gdx.graphics.getWidth(), win2world.y * Gdx.graphics.getHeight());
|
touchPointWorldCoords.set(win2world.x * Gdx.graphics.getWidth(), win2world.y * Gdx.graphics.getHeight());
|
||||||
|
|
||||||
Gdx.app.log(TAG, CLASS_NAME + String.format(".touchUp(%d, %d, %d, %d)", screenX, screenY, pointer, button));
|
Gdx.app.log(TAG, CLASS_NAME + String.format(".touchUp(%d, %d, %d, %d)", screenX, screenY, pointer, button));
|
||||||
@@ -665,7 +676,7 @@ public class InGameState extends BaseState{
|
|||||||
|
|
||||||
if(!Ouya.runningOnOuya){
|
if(!Ouya.runningOnOuya){
|
||||||
win2world.set(screenX, screenY, 0.0f);
|
win2world.set(screenX, screenY, 0.0f);
|
||||||
unitaryOrthoCamera.unproject(win2world);
|
unitaryOrthographicCamera.unproject(win2world);
|
||||||
touchPointWorldCoords.set(win2world.x * Gdx.graphics.getWidth(), win2world.y * Gdx.graphics.getHeight());
|
touchPointWorldCoords.set(win2world.x * Gdx.graphics.getWidth(), win2world.y * Gdx.graphics.getHeight());
|
||||||
|
|
||||||
if(pointer == motorButtonsPointers[0] && !motorA.getBoundingRectangle().contains(touchPointWorldCoords)){
|
if(pointer == motorButtonsPointers[0] && !motorA.getBoundingRectangle().contains(touchPointWorldCoords)){
|
||||||
@@ -941,7 +952,26 @@ public class InGameState extends BaseState{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean axisMoved(Controller controller, int axisCode, float value){
|
public boolean axisMoved(Controller controller, int axisCode, float value){
|
||||||
// TODO: Pass input to the input handler system.
|
GamepadUserInput userInput;
|
||||||
|
|
||||||
|
if(Math.abs(value) > Ouya.STICK_DEADZONE){
|
||||||
|
userInput = new GamepadUserInput();
|
||||||
|
if(axisCode == Ouya.AXIS_LEFT_X){
|
||||||
|
userInput.axisLeftX = value;
|
||||||
|
}else if(axisCode == Ouya.AXIS_LEFT_Y){
|
||||||
|
userInput.axisLeftY = value;
|
||||||
|
}else if(axisCode == Ouya.AXIS_RIGHT_X){
|
||||||
|
userInput.axisRightX = value;
|
||||||
|
}else if(axisCode == Ouya.AXIS_RIGHT_Y){
|
||||||
|
userInput.axisRightY = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
robotArmPositioningSystem.setUserInput(userInput);
|
||||||
|
robotArmPositioningSystem.process();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ public abstract class MainMenuStateBase extends BaseState{
|
|||||||
@Override
|
@Override
|
||||||
public boolean keyDown(int keycode){
|
public boolean keyDown(int keycode){
|
||||||
if(keycode == Input.Keys.BACK){
|
if(keycode == Input.Keys.BACK){
|
||||||
// Ignore.
|
Gdx.app.exit();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -15,23 +15,68 @@
|
|||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.systems;
|
package ve.ucv.ciens.ccg.nxtar.systems;
|
||||||
|
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.CollisionDetectionComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.CollisionModelComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.CollisionModelComponent;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.MarkerCodeComponent;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.VisibilityComponent;
|
||||||
|
|
||||||
import com.artemis.Aspect;
|
import com.artemis.Aspect;
|
||||||
|
import com.artemis.ComponentMapper;
|
||||||
import com.artemis.Entity;
|
import com.artemis.Entity;
|
||||||
|
import com.artemis.annotations.Mapper;
|
||||||
|
import com.artemis.managers.GroupManager;
|
||||||
import com.artemis.systems.EntityProcessingSystem;
|
import com.artemis.systems.EntityProcessingSystem;
|
||||||
|
import com.artemis.utils.ImmutableBag;
|
||||||
|
import com.badlogic.gdx.math.collision.BoundingBox;
|
||||||
|
|
||||||
public class CollisionDetectionSystem extends EntityProcessingSystem {
|
public class CollisionDetectionSystem extends EntityProcessingSystem {
|
||||||
|
public static final String COLLIDABLE_OBJECT = "COLLIDABLE";
|
||||||
|
|
||||||
|
@Mapper ComponentMapper<CollisionModelComponent> collisionModelMapper;
|
||||||
|
@Mapper ComponentMapper<CollisionDetectionComponent> collisionDetectionMapper;
|
||||||
|
@Mapper ComponentMapper<VisibilityComponent> visibilityMapper;
|
||||||
|
|
||||||
|
private GroupManager groupManager;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public CollisionDetectionSystem(){
|
public CollisionDetectionSystem(){
|
||||||
super(Aspect.getAspectForAll(CollisionModelComponent.class));
|
super(Aspect.getAspectForAll(CollisionModelComponent.class, CollisionDetectionComponent.class).exclude(MarkerCodeComponent.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void process(Entity e) {
|
protected void process(Entity e) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
|
|
||||||
|
VisibilityComponent visibility;
|
||||||
|
CollisionModelComponent collision;
|
||||||
|
CollisionModelComponent target;
|
||||||
|
CollisionDetectionComponent onCollision;
|
||||||
|
BoundingBox colBB = new BoundingBox();
|
||||||
|
BoundingBox targetBB = new BoundingBox();
|
||||||
|
ImmutableBag<Entity> collidables;
|
||||||
|
|
||||||
|
groupManager = this.world.getManager(GroupManager.class);
|
||||||
|
collidables = groupManager.getEntities(COLLIDABLE_OBJECT);
|
||||||
|
|
||||||
|
collision = collisionModelMapper.get(e);
|
||||||
|
onCollision = collisionDetectionMapper.get(e);
|
||||||
|
|
||||||
|
for(int i = 0; i < collidables.size(); ++i){
|
||||||
|
target = collisionModelMapper.getSafe(collidables.get(i));
|
||||||
|
visibility = visibilityMapper.getSafe(collidables.get(i));
|
||||||
|
|
||||||
|
if(target == null || visibility == null) continue;
|
||||||
|
|
||||||
|
if(visibility.visible){
|
||||||
|
collision.instance.calculateBoundingBox(colBB);
|
||||||
|
target.instance.calculateBoundingBox(targetBB);
|
||||||
|
|
||||||
|
if(colBB.contains(targetBB)){
|
||||||
|
onCollision.colliding = true;
|
||||||
|
}else{
|
||||||
|
onCollision.colliding = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,26 +15,38 @@
|
|||||||
*/
|
*/
|
||||||
package ve.ucv.ciens.ccg.nxtar.systems;
|
package ve.ucv.ciens.ccg.nxtar.systems;
|
||||||
|
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.AutomaticMovementComponent;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.components.CollisionDetectionComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.components.GeometryComponent;
|
import ve.ucv.ciens.ccg.nxtar.components.GeometryComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.factories.products.GamepadUserInput;
|
import ve.ucv.ciens.ccg.nxtar.components.MarkerCodeComponent;
|
||||||
import ve.ucv.ciens.ccg.nxtar.factories.products.KeyboardUserInput;
|
import ve.ucv.ciens.ccg.nxtar.input.GamepadUserInput;
|
||||||
import ve.ucv.ciens.ccg.nxtar.factories.products.TouchUserInput;
|
import ve.ucv.ciens.ccg.nxtar.input.KeyboardUserInput;
|
||||||
import ve.ucv.ciens.ccg.nxtar.factories.products.UserInput;
|
import ve.ucv.ciens.ccg.nxtar.input.TouchUserInput;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.input.UserInput;
|
||||||
|
import ve.ucv.ciens.ccg.nxtar.utils.Utils;
|
||||||
|
|
||||||
import com.artemis.Aspect;
|
import com.artemis.Aspect;
|
||||||
import com.artemis.ComponentMapper;
|
import com.artemis.ComponentMapper;
|
||||||
import com.artemis.Entity;
|
import com.artemis.Entity;
|
||||||
import com.artemis.annotations.Mapper;
|
import com.artemis.annotations.Mapper;
|
||||||
import com.artemis.systems.EntityProcessingSystem;
|
import com.artemis.systems.EntityProcessingSystem;
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.math.Vector3;
|
||||||
|
|
||||||
public class RobotArmPositioningSystem extends EntityProcessingSystem {
|
public class RobotArmPositioningSystem extends EntityProcessingSystem {
|
||||||
@Mapper ComponentMapper<GeometryComponent> geometryMapper;
|
private static final String TAG = "ROBOT_ARM_POSITIONING_SYSTEM";
|
||||||
|
private static final String CLASS_NAME = RobotArmPositioningSystem.class.getSimpleName();
|
||||||
|
private static final float STEP_SIZE = 0.05f;
|
||||||
|
|
||||||
|
@Mapper ComponentMapper<GeometryComponent> geometryMapper;
|
||||||
|
@Mapper ComponentMapper<AutomaticMovementComponent> autoMapper;
|
||||||
|
@Mapper ComponentMapper<CollisionDetectionComponent> collisionMapper;
|
||||||
|
|
||||||
private UserInput input;
|
private UserInput input;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public RobotArmPositioningSystem(){
|
public RobotArmPositioningSystem(){
|
||||||
super(Aspect.getAspectForAll(GeometryComponent.class));
|
super(Aspect.getAspectForAll(GeometryComponent.class, AutomaticMovementComponent.class, CollisionDetectionComponent.class).exclude(MarkerCodeComponent.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUserInput(UserInput input){
|
public void setUserInput(UserInput input){
|
||||||
@@ -42,20 +54,94 @@ public class RobotArmPositioningSystem extends EntityProcessingSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void process(Entity e) {
|
protected void process(Entity e) throws ClassCastException{
|
||||||
GeometryComponent geometry = geometryMapper.get(e);
|
Vector3 endPoint;
|
||||||
|
GamepadUserInput tempGP;
|
||||||
|
KeyboardUserInput tempKey;
|
||||||
|
GeometryComponent geometry = geometryMapper.get(e);
|
||||||
|
AutomaticMovementComponent auto = autoMapper.get(e);
|
||||||
|
CollisionDetectionComponent collision = collisionMapper.get(e);
|
||||||
|
|
||||||
if(input == null) return;
|
if(input == null){
|
||||||
|
if(auto.moving) autoMove(geometry, auto, collision);
|
||||||
|
else return;
|
||||||
|
|
||||||
if(input instanceof TouchUserInput){
|
}else{
|
||||||
|
if(input instanceof TouchUserInput){
|
||||||
|
if(!auto.moving){
|
||||||
|
endPoint = ((TouchUserInput) input).userTouchEndPoint;
|
||||||
|
endPoint.set(endPoint.x, endPoint.y, -4.5f);
|
||||||
|
auto.startPoint.set(geometry.position);
|
||||||
|
auto.endPoint.set(endPoint);
|
||||||
|
auto.moving = true;
|
||||||
|
auto.forward = true;
|
||||||
|
|
||||||
}else if(input instanceof GamepadUserInput){
|
Gdx.app.log(TAG, CLASS_NAME + ".process(): Started moving from " + Utils.vector2String(auto.startPoint) + " to " + Utils.vector2String(auto.endPoint));
|
||||||
|
}else autoMove(geometry, auto, collision);
|
||||||
|
|
||||||
}else if(input instanceof KeyboardUserInput){
|
}else if(input instanceof GamepadUserInput){
|
||||||
|
tempGP = (GamepadUserInput) input;
|
||||||
|
geometry.position.x += !collision.colliding ? tempGP.axisLeftY * STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.y += !collision.colliding ? tempGP.axisLeftX * STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.z += !collision.colliding ? tempGP.axisRightY * STEP_SIZE : 0.0f;
|
||||||
|
clampPosition(geometry);
|
||||||
|
|
||||||
}else
|
}else if(input instanceof KeyboardUserInput){
|
||||||
throw new ClassCastException("Input is not a valid UserInput instance.");
|
tempKey = (KeyboardUserInput) input;
|
||||||
|
geometry.position.x -= tempKey.keyUp && !collision.colliding ? STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.x += tempKey.keyDown && !collision.colliding ? STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.y -= tempKey.keyLeft && !collision.colliding ? STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.y += tempKey.keyRight && !collision.colliding ? STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.z -= tempKey.keyZ && !collision.colliding ? STEP_SIZE : 0.0f;
|
||||||
|
geometry.position.z += tempKey.keyA && !collision.colliding ? STEP_SIZE : 0.0f;
|
||||||
|
clampPosition(geometry);
|
||||||
|
|
||||||
|
}else
|
||||||
|
throw new ClassCastException("Input is not a valid UserInput instance.");
|
||||||
|
}
|
||||||
|
|
||||||
input = null;
|
input = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void autoMove(GeometryComponent geometry, AutomaticMovementComponent auto, CollisionDetectionComponent collision){
|
||||||
|
float step;
|
||||||
|
|
||||||
|
if(auto.moving){
|
||||||
|
if(auto.forward)
|
||||||
|
step = STEP_SIZE;
|
||||||
|
else
|
||||||
|
step = -STEP_SIZE;
|
||||||
|
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + ".autoMove(): Step = " + Float.toString(step));
|
||||||
|
|
||||||
|
auto.distance += step;
|
||||||
|
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + ".autoMove(): Step = " + Float.toString(auto.distance));
|
||||||
|
|
||||||
|
geometry.position.x = (auto.startPoint.x * (1.0f - auto.distance)) + (auto.endPoint.x * auto.distance);
|
||||||
|
geometry.position.y = (auto.startPoint.y * (1.0f - auto.distance)) + (auto.endPoint.y * auto.distance);
|
||||||
|
geometry.position.z = (auto.startPoint.z * (1.0f - auto.distance)) + (auto.endPoint.z * auto.distance);
|
||||||
|
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + ".autoMove(): Current position: " + Utils.vector2String(geometry.position));
|
||||||
|
|
||||||
|
if(auto.distance >= 1.0f || collision.colliding){
|
||||||
|
auto.forward = false;
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + ".autoMove(): Going backwards now.");
|
||||||
|
}else if(auto.distance <= 0.0f){
|
||||||
|
auto.forward = true;
|
||||||
|
auto.moving = false;
|
||||||
|
Gdx.app.log(TAG, CLASS_NAME + ".autoMove(): Going forward now.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}else return;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clampPosition(GeometryComponent geometry){
|
||||||
|
geometry.position.x = geometry.position.x >= -1.0f ? geometry.position.x : -1.0f;
|
||||||
|
geometry.position.x = geometry.position.x <= 1.0f ? geometry.position.x : 1.0f;
|
||||||
|
geometry.position.y = geometry.position.y >= -1.0f ? geometry.position.y : -1.0f;
|
||||||
|
geometry.position.y = geometry.position.y <= 1.0f ? geometry.position.y : 1.0f;
|
||||||
|
geometry.position.z = geometry.position.z >= 0.0f ? geometry.position.z : 0.0f;
|
||||||
|
geometry.position.z = geometry.position.z <= 6.0f ? geometry.position.z : 6.0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
package ve.ucv.ciens.ccg.nxtar.utils;
|
package ve.ucv.ciens.ccg.nxtar.utils;
|
||||||
|
|
||||||
import com.artemis.World;
|
import com.artemis.World;
|
||||||
|
import com.artemis.managers.GroupManager;
|
||||||
|
|
||||||
import ve.ucv.ciens.ccg.nxtar.NxtARCore;
|
import ve.ucv.ciens.ccg.nxtar.NxtARCore;
|
||||||
import ve.ucv.ciens.ccg.nxtar.entities.BombGameEntityCreator;
|
import ve.ucv.ciens.ccg.nxtar.entities.BombGameEntityCreator;
|
||||||
@@ -31,8 +32,10 @@ public abstract class GameSettings{
|
|||||||
if(core == null)
|
if(core == null)
|
||||||
throw new IllegalArgumentException("Core is null.");
|
throw new IllegalArgumentException("Core is null.");
|
||||||
|
|
||||||
if(getGameWorld() == null)
|
if(getGameWorld() == null){
|
||||||
gameWorld = new World();
|
gameWorld = new World();
|
||||||
|
gameWorld.setManager(new GroupManager());
|
||||||
|
}
|
||||||
|
|
||||||
if(getEntityCreator() == null){
|
if(getEntityCreator() == null){
|
||||||
entityCreator = new BombGameEntityCreator();
|
entityCreator = new BombGameEntityCreator();
|
||||||
|
|||||||
24
src/ve/ucv/ciens/ccg/nxtar/utils/Utils.java
Normal file
24
src/ve/ucv/ciens/ccg/nxtar/utils/Utils.java
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* 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.utils;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.math.Vector3;
|
||||||
|
|
||||||
|
public abstract class Utils{
|
||||||
|
public static String vector2String(Vector3 v){
|
||||||
|
return "(" + Float.toString(v.x) + ", " + Float.toString(v.y) + ", " + Float.toString(v.z) + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user