mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 05:07:48 +00:00
fahhh
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "V8World/MultiJoint.h"
|
||||
#include "Util/NormalId.h"
|
||||
|
||||
namespace RBX {
|
||||
|
||||
class RotateConnector;
|
||||
class ConstraintAlign2Axes;
|
||||
class ConstraintBallInSocket;
|
||||
class ConstraintAngularVelocity;
|
||||
class Constraint;
|
||||
|
||||
class RotateJoint : public MultiJoint
|
||||
{
|
||||
private:
|
||||
typedef MultiJoint Super;
|
||||
static RotateJoint* surfaceTypeToJoint(
|
||||
SurfaceType surfaceType,
|
||||
Primitive* axlePrim,
|
||||
Primitive* holePrim,
|
||||
const CoordinateFrame& c0,
|
||||
const CoordinateFrame& c1);
|
||||
|
||||
|
||||
void update();
|
||||
|
||||
protected:
|
||||
typedef enum {AXLE_ID = 0, HOLE_ID} AxleHoleId;
|
||||
|
||||
// Edge
|
||||
/*override*/ void putInKernel(Kernel* kernel);
|
||||
/*override*/ void removeFromKernel();
|
||||
/*override*/ JointType getJointType() const {return Joint::ROTATE_JOINT;}
|
||||
|
||||
void getPrimitivesTorqueArmLength(float& axleArmLength, float& holeArmLength);
|
||||
|
||||
ConstraintAlign2Axes* align2Axes;
|
||||
ConstraintBallInSocket* ballInSocket;
|
||||
|
||||
public:
|
||||
RotateJoint();
|
||||
|
||||
RotateJoint(
|
||||
Primitive* axlePrim,
|
||||
Primitive* holePrim,
|
||||
const CoordinateFrame& c0,
|
||||
const CoordinateFrame& c1);
|
||||
|
||||
virtual ~RotateJoint();
|
||||
|
||||
static RotateJoint* canBuildJoint(
|
||||
Primitive* p0,
|
||||
Primitive* p1,
|
||||
NormalId nId0,
|
||||
NormalId nId1);
|
||||
|
||||
Primitive* getAxlePrim() {return getPrimitive(AXLE_ID);}
|
||||
Primitive* getHolePrim() {return getPrimitive(HOLE_ID);}
|
||||
|
||||
NormalId getAxleId() {return getNormalId(AXLE_ID);}
|
||||
NormalId getHoleId() {return getNormalId(HOLE_ID);}
|
||||
|
||||
Vector3 getAxleWorldDirection();
|
||||
|
||||
float getAxleVelocity();
|
||||
};
|
||||
|
||||
class DynamicRotateJoint : public RotateJoint
|
||||
{
|
||||
private:
|
||||
typedef RotateJoint Super;
|
||||
/*override*/ bool canStepWorld() const {return true;}
|
||||
/*override*/ bool canStepUi() const {return true;}
|
||||
|
||||
/*override*/ bool stepUi(double distributedGameTime);
|
||||
/*override*/ void setPhysics(); // occurs after networking read;
|
||||
|
||||
|
||||
float getChannelValue(double distributedGameTime);
|
||||
|
||||
protected:
|
||||
// Edge
|
||||
/*override*/ void putInKernel(Kernel* kernel);
|
||||
/*override*/ void removeFromKernel();
|
||||
|
||||
float baseAngle; // what is the initial assembled rotation angle
|
||||
RotateConnector* rotateConnector; // here when in kernel
|
||||
float uiValue;
|
||||
|
||||
public:
|
||||
DynamicRotateJoint() : uiValue(0.0f), rotateConnector(NULL)
|
||||
{}
|
||||
|
||||
DynamicRotateJoint(
|
||||
Primitive* axlePrim,
|
||||
Primitive* holePrim,
|
||||
const CoordinateFrame& c0,
|
||||
const CoordinateFrame& c1,
|
||||
float baseAngle);
|
||||
|
||||
~DynamicRotateJoint();
|
||||
|
||||
float getBaseAngle() const {
|
||||
return baseAngle;
|
||||
}
|
||||
|
||||
float getTorqueArmLength();
|
||||
|
||||
void setBaseAngle(float value);
|
||||
};
|
||||
|
||||
class RotatePJoint : public DynamicRotateJoint
|
||||
{
|
||||
private:
|
||||
// Joint
|
||||
/*override*/ JointType getJointType() const {return Joint::ROTATE_P_JOINT;}
|
||||
|
||||
/*override*/ void stepWorld();
|
||||
|
||||
/*override*/ void putInKernel(Kernel* kernel);
|
||||
/*override*/ void removeFromKernel();
|
||||
|
||||
float currentAngle;
|
||||
ConstraintAlign2Axes* alignmentConstraint;
|
||||
public:
|
||||
RotatePJoint(): currentAngle( 0.0f ), alignmentConstraint(NULL)
|
||||
{}
|
||||
|
||||
RotatePJoint(
|
||||
Primitive* axlePrim,
|
||||
Primitive* holePrim,
|
||||
const CoordinateFrame& c0,
|
||||
const CoordinateFrame& c1,
|
||||
float baseAngle)
|
||||
: DynamicRotateJoint(axlePrim, holePrim, c0, c1, baseAngle), currentAngle( 0.0f ), alignmentConstraint(NULL)
|
||||
{}
|
||||
|
||||
~RotatePJoint();
|
||||
};
|
||||
|
||||
class RotateVJoint : public DynamicRotateJoint
|
||||
{
|
||||
private:
|
||||
// Joint
|
||||
/*override*/ JointType getJointType() const {return Joint::ROTATE_V_JOINT;}
|
||||
|
||||
/*override*/ void stepWorld();
|
||||
|
||||
/*override*/ void putInKernel(Kernel* kernel);
|
||||
/*override*/ void removeFromKernel();
|
||||
|
||||
ConstraintAngularVelocity* angularVelocityConstraint;
|
||||
|
||||
public:
|
||||
RotateVJoint(): angularVelocityConstraint( NULL )
|
||||
{}
|
||||
|
||||
RotateVJoint(
|
||||
Primitive* axlePrim,
|
||||
Primitive* holePrim,
|
||||
const CoordinateFrame& c0,
|
||||
const CoordinateFrame& c1,
|
||||
float baseAngle);
|
||||
|
||||
~RotateVJoint();
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user