Просмотр исходного кода

Added joystick index to joystick events

Ivan Safrin 13 лет назад
Родитель
Сommit
02e11ec43a

+ 1 - 0
Core/Contents/Include/PolyCoreInput.h

@@ -36,6 +36,7 @@ namespace Polycode {
 			float joystickAxisState[32];
 			float joystickAxisState[32];
 			bool joystickButtonState[64];
 			bool joystickButtonState[64];
 			unsigned int deviceID;		
 			unsigned int deviceID;		
+			unsigned int deviceIndex;
 	};
 	};
 	
 	
 	class InputEvent;
 	class InputEvent;

+ 1 - 0
Core/Contents/Include/PolyInputEvent.h

@@ -112,6 +112,7 @@ namespace Polycode {
 		float joystickAxisValue;
 		float joystickAxisValue;
 		unsigned int joystickButton;
 		unsigned int joystickButton;
 		unsigned int joystickAxis;
 		unsigned int joystickAxis;
+		unsigned int joystickIndex;
 		
 		
 		protected:
 		protected:
 		
 		

+ 6 - 0
Core/Contents/Source/PolyCoreInput.cpp

@@ -59,6 +59,7 @@ namespace Polycode {
 	JoystickInfo *CoreInput::getJoystickInfoByID(unsigned int deviceID) {
 	JoystickInfo *CoreInput::getJoystickInfoByID(unsigned int deviceID) {
 		for(int i=0;i<joysticks.size();i++) {
 		for(int i=0;i<joysticks.size();i++) {
 			if(joysticks[i].deviceID == deviceID) {
 			if(joysticks[i].deviceID == deviceID) {
+				joysticks[i].deviceIndex = i;
 				return &joysticks[i];
 				return &joysticks[i];
 			}
 			}
 		}
 		}
@@ -71,6 +72,7 @@ namespace Polycode {
 		joysticks.push_back(joystick);
 		joysticks.push_back(joystick);
 		InputEvent *evt = new InputEvent();
 		InputEvent *evt = new InputEvent();
 		evt->joystickDeviceID = deviceID;
 		evt->joystickDeviceID = deviceID;
+		evt->joystickIndex = joysticks.size()-1;
 		dispatchEvent(evt, InputEvent::EVENT_JOYDEVICE_ATTACHED);				
 		dispatchEvent(evt, InputEvent::EVENT_JOYDEVICE_ATTACHED);				
 	}
 	}
 	
 	
@@ -80,6 +82,7 @@ namespace Polycode {
 				joysticks.erase(joysticks.begin()+i);
 				joysticks.erase(joysticks.begin()+i);
 				InputEvent *evt = new InputEvent();
 				InputEvent *evt = new InputEvent();
 				evt->joystickDeviceID = deviceID;
 				evt->joystickDeviceID = deviceID;
+				evt->joystickIndex = i;
 				dispatchEvent(evt, InputEvent::EVENT_JOYDEVICE_DETACHED);
 				dispatchEvent(evt, InputEvent::EVENT_JOYDEVICE_DETACHED);
 				return;
 				return;
 			}
 			}
@@ -94,6 +97,7 @@ namespace Polycode {
 			evt->joystickDeviceID = deviceID;
 			evt->joystickDeviceID = deviceID;
 			evt->joystickAxis = axisID;
 			evt->joystickAxis = axisID;
 			evt->joystickAxisValue = value;
 			evt->joystickAxisValue = value;
+			evt->joystickIndex = info->deviceIndex;
 			dispatchEvent(evt, InputEvent::EVENT_JOYAXIS_MOVED);
 			dispatchEvent(evt, InputEvent::EVENT_JOYAXIS_MOVED);
 		}	
 		}	
 	}
 	}
@@ -105,6 +109,7 @@ namespace Polycode {
 			InputEvent *evt = new InputEvent();
 			InputEvent *evt = new InputEvent();
 			evt->joystickDeviceID = deviceID;
 			evt->joystickDeviceID = deviceID;
 			evt->joystickButton = buttonID;
 			evt->joystickButton = buttonID;
+			evt->joystickIndex = info->deviceIndex;			
 			dispatchEvent(evt, InputEvent::EVENT_JOYBUTTON_DOWN);
 			dispatchEvent(evt, InputEvent::EVENT_JOYBUTTON_DOWN);
 		}		
 		}		
 	}
 	}
@@ -116,6 +121,7 @@ namespace Polycode {
 			InputEvent *evt = new InputEvent();
 			InputEvent *evt = new InputEvent();
 			evt->joystickDeviceID = deviceID;
 			evt->joystickDeviceID = deviceID;
 			evt->joystickButton = buttonID;
 			evt->joystickButton = buttonID;
+			evt->joystickIndex = info->deviceIndex;			
 			dispatchEvent(evt, InputEvent::EVENT_JOYBUTTON_UP);
 			dispatchEvent(evt, InputEvent::EVENT_JOYBUTTON_UP);
 		}	
 		}	
 	}
 	}

+ 15 - 0
Modules/Contents/3DPhysics/Include/PolyPhysicsScene.h

@@ -31,6 +31,7 @@ class btSequentialImpulseConstraintSolver;
 class btGhostPairCallback;
 class btGhostPairCallback;
 class btTypedConstraint;
 class btTypedConstraint;
 class btHingeConstraint;
 class btHingeConstraint;
+class btGeneric6DofConstraint;
 
 
 namespace Polycode {
 namespace Polycode {
 
 
@@ -55,6 +56,18 @@ namespace Polycode {
 			Vector3 positionOnB;
 			Vector3 positionOnB;
 			Vector3 worldNormalOnB;				
 			Vector3 worldNormalOnB;				
 	};
 	};
+	
+	class _PolyExport PhysicsGenericConstraint {
+		public:
+			
+			void setLinearLowerLimit(Vector3 limit);
+			void setLinearUpperLimit(Vector3 limit);
+						
+			void setAngularLowerLimit(Vector3 limit);
+			void setAngularUpperLimit(Vector3 limit);
+					
+			btGeneric6DofConstraint *btConstraint;
+	};
 
 
 	class _PolyExport PhysicsHingeConstraint  {
 	class _PolyExport PhysicsHingeConstraint  {
 		public:
 		public:
@@ -101,6 +114,8 @@ namespace Polycode {
 		PhysicsHingeConstraint *createHingeConstraint(SceneEntity *entity, Vector3 pivot, Vector3 axis, Number minLimit, Number maxLimit);
 		PhysicsHingeConstraint *createHingeConstraint(SceneEntity *entity, Vector3 pivot, Vector3 axis, Number minLimit, Number maxLimit);
 
 
 		PhysicsHingeConstraint *createHingeJoint(SceneEntity *entity1, SceneEntity *entity2, Vector3 pivot1, Vector3 axis1, Vector3 pivot2, Vector3 axis2, Number minLimit, Number maxLimit);
 		PhysicsHingeConstraint *createHingeJoint(SceneEntity *entity1, SceneEntity *entity2, Vector3 pivot1, Vector3 axis1, Vector3 pivot2, Vector3 axis2, Number minLimit, Number maxLimit);
+		
+		PhysicsGenericConstraint *createGenericConstraint(SceneEntity *entity);
 				
 				
 		void setVelocity(SceneEntity *entity, Vector3 velocity);
 		void setVelocity(SceneEntity *entity, Vector3 velocity);
 		void warpEntity(SceneEntity *entity, Vector3 position, bool resetRotation = false);
 		void warpEntity(SceneEntity *entity, Vector3 position, bool resetRotation = false);

+ 38 - 0
Modules/Contents/3DPhysics/Source/PolyPhysicsScene.cpp

@@ -294,6 +294,44 @@ Number PhysicsHingeConstraint::getAngle() {
 	return btConstraint->getHingeAngle();
 	return btConstraint->getHingeAngle();
 }
 }
 
 
+void PhysicsGenericConstraint::setLinearLowerLimit(Vector3 limit) {
+	btVector3 btLimit = btVector3(limit.x, limit.y, limit.z);
+	btConstraint->setLinearLowerLimit(btLimit);
+}
+
+void PhysicsGenericConstraint::setLinearUpperLimit(Vector3 limit) {
+	btVector3 btLimit = btVector3(limit.x, limit.y, limit.z);
+	btConstraint->setLinearUpperLimit(btLimit);
+}
+
+void PhysicsGenericConstraint::setAngularLowerLimit(Vector3 limit) {
+	btVector3 btLimit = btVector3(limit.x, limit.y, limit.z);
+	btConstraint->setAngularLowerLimit(btLimit);
+}
+
+void PhysicsGenericConstraint::setAngularUpperLimit(Vector3 limit) {
+	btVector3 btLimit = btVector3(limit.x, limit.y, limit.z);
+	btConstraint->setAngularUpperLimit(btLimit);
+}
+
+PhysicsGenericConstraint *PhysicsScene::createGenericConstraint(SceneEntity *entity) {
+
+	PhysicsSceneEntity *pEnt = getPhysicsEntityBySceneEntity(entity);
+	if(!pEnt) {
+		return NULL;
+	}
+	
+	PhysicsGenericConstraint *constraint = new PhysicsGenericConstraint();
+	
+	btTransform frame;
+	frame.setIdentity();
+	
+	constraint->btConstraint = new btGeneric6DofConstraint(*pEnt->rigidBody, frame, true);
+	physicsWorld->addConstraint(constraint->btConstraint);
+	
+	return constraint;
+}
+
 PhysicsHingeConstraint * PhysicsScene::createHingeConstraint(SceneEntity *entity, Vector3 pivot, Vector3 axis, Number minLimit, Number maxLimit) {
 PhysicsHingeConstraint * PhysicsScene::createHingeConstraint(SceneEntity *entity, Vector3 pivot, Vector3 axis, Number minLimit, Number maxLimit) {
 	PhysicsSceneEntity *pEnt = getPhysicsEntityBySceneEntity(entity);
 	PhysicsSceneEntity *pEnt = getPhysicsEntityBySceneEntity(entity);
 	if(!pEnt) {
 	if(!pEnt) {