📄 oxnewtonsmdragdoll.pas
字号:
mdSoft: SetMaterialSurface( True, 0.01, 0.2, 1.0, 0.5 );
mdSlide: SetMaterialSurface( True, 0.05, 0.4, 0.25, 0.25 );
mdStatic: SetMaterialSurface( True, 0.05, 0.4, 1.0, 1.0 );
end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonSkinRagdoll.DoProgress( const progressTime : TProgressTimes );
begin
UpdateRagdoll;
inherited;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonSkinRagdoll.StartRagdoll;
begin
if not FRagEnabled then if FActived then begin
FRag:= TNewtonRagdoll.Create( self );
FRag.GLSceneRoot:= Manager.Objects;
FDummyJoint:= TGLDummyCube( FRag.GLSceneRoot.AddNewChild( TGLDummyCube ) );
FDummyRoot:= TNewtonRagdollDummyJoint.Create;
if Assigned(FOnStartRagdoll) then FOnStartRagdoll(FRag,FDummyJoint,FDummyRoot);
//Fassn
(*Fhjoint:= TNewtonRagdollHingeJoint.Create(AffineVectorMake( 0, 0, 1 ), -5, 30 );
FJRLeg:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 0 ), -90, 90, AffineVectorMake( 0, 0, 1 ), -90, 90 );
FJLLeg:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 0 ), -90, 90, AffineVectorMake( 0, 0, 1 ), -90, 90 );
FJTorso:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 1 ), -110, 110, AffineVectorMake( 1, 1, 1 ), -110, 110 );
FJKnee:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,0,-1), -5, 125);
FJLArm:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,-1,0), -25, 120);
FJRArm:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,-1,0), -25, 120);
FJShoulder:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake(0,1,1), -45, 145, AffineVectorMake(-1,0,0), -45, 145);
Fujoint:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake(0,-1,1), -50, 75, AffineVectorMake(0,0,-1), -90, 90);
FJDummy:= TNewtonRagdollDummyJoint.Create;
FrootBone:= TNewtonRagdollBone.Create( FRag );
FrootBone.Joint:= Fhjoint;
FrootBone.Name:= 'Spine';
FrootBone.BoneID:= Skeleton.BoneByName( 'Bip01 Spine' ).BoneID;
FRag.SetRootBone( FrootBone );
Ftb := TNewtonRagdollBone.CreateOwned( FrootBone );
Ftb.Joint:= FJDummy;
Ftb.Name:= '0';
Ftb.BoneID:= Skeleton.BoneByName( 'Bip01' ).BoneID;
bone( Frootbone, 'Pelvis', FJDummy );
Ftorso:= bone( Frootbone, 'Spine1', FJTorso );
Ftb:= bone( Ftorso, 'Spine2', Fhjoint );
Fspine:= bone( Ftb, 'Spine3', Fhjoint );
FHeadBone:= bone( Fspine, 'Head', Fujoint );
bone( Fspine, 'Neck', FJDummy );
Ftb:= bone( Fspine, 'L Arm', FJShoulder );
FLeftArm:= bone( Ftb, 'L Arm1', FJLArm );
Ftb:= bone( FLeftArm, 'L Arm2', FJLArm );
Ftb:= bone( Ftb, 'L Hand', Fhjoint );
{bone( Ftb, 'L Finger0', FJDummy );
bone( Ftb, 'L Finger01', FJDummy );
bone( Ftb, 'L Finger02', FJDummy );
bone( Ftb, 'L Finger1', FJDummy );
bone( Ftb, 'L Finger11', FJDummy );
bone( Ftb, 'L Finger12', FJDummy );}
Ftb:= bone( Fspine, 'R Arm', FJShoulder );
FRightArm := bone( Ftb, 'R Arm1', FJRArm );
Ftb:= bone( FRightArm, 'R Arm2', FJRArm );
Ftb:= bone( Ftb, 'R Hand', Fhjoint );
{bone( Ftb, 'R Finger0', FJDummy );
bone( Ftb, 'R Finger01', FJDummy );
bone( Ftb, 'R Finger02', FJDummy );
bone( Ftb, 'R Finger1', FJDummy );
bone( Ftb, 'R Finger11', FJDummy );
bone( Ftb, 'R Finger12', FJDummy ); }
Ftb:= bone( Frootbone, 'L Leg', FJLLeg );
FLeftleg := bone( Ftb, 'L Leg1', FJKnee );
Ftb:= bone( FLeftleg, 'L Foot', Fhjoint );
bone( Ftb, 'L Toe0', FJDummy );
bone( Ftb, 'L Toe01', FJDummy );
bone( Ftb, 'L Toe02', FJDummy );
Ftb:= bone( Frootbone, 'R Leg', FJRLeg );
Frightleg:= bone( Ftb, 'R Leg1', FJKnee );
Ftb:= bone( Frightleg, 'R Foot', Fhjoint );
bone( Ftb, 'R Toe0', FJDummy );
bone( Ftb, 'R Toe01', FJDummy );
bone( Ftb, 'R Toe02', FJDummy );*)
//canibal FDummyRoot: TNewtonRagdollDummyJoint;
//tower
(*Fhjoint:= TNewtonRagdollHingeJoint.Create(AffineVectorMake( 0, 0, 1 ), -5, 30 );
FJRLeg:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 0 ), -90, 90, AffineVectorMake( 0, 0, 1 ), -90, 90 );
FJLLeg:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 0 ), -90, 90, AffineVectorMake( 0, 0, 1 ), -90, 90 );
FJTorso:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 1 ), -110, 110, AffineVectorMake( 1, 1, 1 ), -110, 110 );
FJKnee:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,0,-1), -5, 125);
FJLArm:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,-1,0), -25, 120);
FJRArm:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,-1,0), -25, 120);
FJShoulder:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake(0,1,1), -45, 145, AffineVectorMake(-1,0,0), -45, 145);
Fujoint:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake(1,90,90), -90, 75, AffineVectorMake(-1,-1,-1), -90, 75);
FJDummy:= TNewtonRagdollDummyJoint.Create;
FrootBone:= TNewtonRagdollBone.Create( FRag );
FrootBone.Joint:= Fhjoint;
FrootBone.Name:= 'Spine';
FrootBone.BoneID:= Skeleton.BoneByName( 'Bip01 Spine' ).BoneID;
FRag.SetRootBone( FrootBone );
Ftb := TNewtonRagdollBone.CreateOwned( FrootBone );
Ftb.Joint:= FJDummy;
Ftb.Name:= '0';
Ftb.BoneID:= Skeleton.BoneByName( 'Bip01' ).BoneID;
bone( Frootbone, 'Pelvis', FJDummy );
Ftorso:= bone( Frootbone, 'Spine1', FJTorso );
Ftb:= bone( Ftorso, 'Spine2', Fhjoint );
Fspine:= bone( Ftb, 'Spine3', Fhjoint );
FHeadBone:= bone( Fspine, 'Head', Fujoint );
bone( Fspine, 'Neck', FJDummy );
Ftb:= bone( Fspine, 'L Arm', FJShoulder );
FLeftArm:= bone( Ftb, 'L Arm1', FJLArm );
Ftb:= bone( FLeftArm, 'L Arm2', FJLArm );
Ftb:= bone( Ftb, 'L Hand', Fhjoint );
bone( Ftb, 'L Finger0', FJDummy );
bone( Ftb, 'L Finger01', FJDummy );
bone( Ftb, 'L Finger02', FJDummy );
bone( Ftb, 'L Finger1', FJDummy );
bone( Ftb, 'L Finger11', FJDummy );
Ftb:= bone( Fspine, 'R Arm', FJShoulder );
FRightArm := bone( Ftb, 'R Arm1', FJRArm );
Ftb:= bone( FRightArm, 'R Arm2', FJRArm );
Ftb:= bone( Ftb, 'R Hand', Fhjoint );
bone( Ftb, 'R Finger0', FJDummy );
bone( Ftb, 'R Finger01', FJDummy );
bone( Ftb, 'R Finger02', FJDummy );
bone( Ftb, 'R Finger1', FJDummy );
bone( Ftb, 'R Finger11', FJDummy );
Ftb:= bone( Frootbone, 'L Leg', FJLLeg );
FLeftleg := bone( Ftb, 'L Leg1', FJKnee );
Ftb:= bone( FLeftleg, 'L Foot', Fhjoint );
Ftb:= bone( Frootbone, 'R Leg', FJRLeg );
Frightleg:= bone( Ftb, 'R Leg1', FJKnee );
Ftb:= bone( Frightleg, 'R Foot', Fhjoint );*)
//trinity
{ Fhjoint:= TNewtonRagdollHingeJoint.Create(AffineVectorMake( 0, 0, 1 ), -5, 30 );
FJRLeg:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 0 ), -90, 90, AffineVectorMake( 0, 0, 1 ), -90, 90 );
FJLLeg:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 0 ), -90, 90, AffineVectorMake( 0, 0, 1 ), -90, 90 );
FJTorso:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake( 0, 1, 1 ), -110, 110, AffineVectorMake( 1, 1, 1 ), -110, 110 );
FJKnee:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,0,-1), -5, 125);
FJLArm:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,-1,0), -25, 120);
FJRArm:= TNewtonRagdollHingeJoint.Create(AffineVectorMake(0,-1,0), -25, 120);
FJShoulder:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake(0,1,1), -45, 145, AffineVectorMake(-1,0,0), -45, 145);
Fujoint:= TNewtonRagdollUniversalJoint.Create(AffineVectorMake(0,-90,1), -50, 75, AffineVectorMake(0,0,-1), -90, 90);
FJDummy:= TNewtonRagdollDummyJoint.Create;
FrootBone:= TNewtonRagdollBone.Create( FRag );
FrootBone.Joint:= Fhjoint;
FrootBone.Name:= 'Spine';
FrootBone.BoneID:= Skeleton.BoneByName( 'Bip01 Spine' ).BoneID;
FRag.SetRootBone( FrootBone );
Ftb := TNewtonRagdollBone.CreateOwned( FrootBone );
Ftb.Joint:= FJDummy;
Ftb.Name:= '0';
Ftb.BoneID:= Skeleton.BoneByName( 'Bip01' ).BoneID;
bone( Frootbone, 'Pelvis', FJDummy );
Ftorso:= bone( Frootbone, 'Spine1', FJTorso );
Ftb:= bone( Ftorso, 'Spine2', Fhjoint );
Fspine:= bone( Ftb, 'Spine3', Fhjoint );
FHeadBone:= bone( Fspine, 'Head', Fujoint );
bone( Fspine, 'Neck', FJDummy );
Ftb:= bone( Fspine, 'L Arm', FJShoulder );
FLeftArm:= bone( Ftb, 'L Arm1', FJLArm );
Ftb:= bone( FLeftArm, 'L Arm2', FJLArm );
Ftb:= bone( Ftb, 'L Hand', Fhjoint );
bone( Ftb, 'L Finger0', FJDummy );
bone( Ftb, 'L Finger01', FJDummy );
bone( Ftb, 'L Finger02', FJDummy );
bone( Ftb, 'L Finger1', FJDummy );
bone( Ftb, 'L Finger11', FJDummy );
bone( Ftb, 'L Finger12', FJDummy );
Ftb:= bone( Fspine, 'R Arm', FJShoulder );
FRightArm := bone( Ftb, 'R Arm1', FJRArm );
Ftb:= bone( FRightArm, 'R Arm2', FJRArm );
Ftb:= bone( Ftb, 'R Hand', Fhjoint );
bone( Ftb, 'R Finger0', FJDummy );
bone( Ftb, 'R Finger01', FJDummy );
bone( Ftb, 'R Finger02', FJDummy );
bone( Ftb, 'R Finger1', FJDummy );
bone( Ftb, 'R Finger11', FJDummy );
bone( Ftb, 'R Finger12', FJDummy );
Ftb:= bone( Frootbone, 'L Leg', FJLLeg );
FLeftleg := bone( Ftb, 'L Leg1', FJKnee );
Ftb:= bone( FLeftleg, 'L Foot', Fhjoint );
bone( Ftb, 'L Toe0', FJDummy );
bone( Ftb, 'L Toe01', FJDummy );
bone( Ftb, 'L Toe02', FJDummy );
Ftb:= bone( Frootbone, 'R Leg', FJRLeg );
Frightleg:= bone( Ftb, 'R Leg1', FJKnee );
Ftb:= bone( Frightleg, 'R Foot', Fhjoint );
bone( Ftb, 'R Toe0', FJDummy );
bone( Ftb, 'R Toe01', FJDummy );
bone( Ftb, 'R Toe02', FJDummy );}
FRag.BuildRagdoll;
FRag.Start;
AnimationMode:= aamNone;
FRagEnabled:= True;
end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonSkinRagdoll.UpdateRagdoll;
begin
if FRagEnabled then
FRag.Update;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonSkinRagdoll.StopRagdoll;
var i: integer;
begin
if FRagEnabled then
if Assigned( FRag ) then begin
for i:= 0 to FRag.BodyList.Count -1 do
NewtonDestroyBody( FManager.World,
PNewtonBody( FRag.BodyList.Items[i] ) );
FDummyJoint.Free;
FRagEnabled:= False;
AnimationMode := aamLoop;
FRag.Stop;
if Assigned(FOnStopRagdoll) then FOnStopRagdoll;
FDummyRoot.Free;
FRag.BodyList.Free;
FRag.Free;
end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonSkinRagdoll.InitNewton;
begin
FManager:= TOXNewtonManager(Scene);
FActived:= True;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
function TOXNewtonSkinRagdoll.bone
( oBone: TNewtonRagdollBone; id: String; j: TRagdollJoint ): TNewtonRagdollBone;
var b: TNewtonRagdollBone;
begin
b:= TNewtonRagdollBone.CreateOwned( oBone );
with b do begin
Name:= id;
BoneID:= Skeleton.BoneByName( 'Bip01 ' + id ).BoneID;
Joint:= j;
end;
Result:= b;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonSkinRagdoll last change by Dave Gravel. //
{******************************************************************************}
destructor TOXNewtonSkinRagdoll.destroy;
begin
StopRagdoll;
inherited destroy;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonRagdollBone last change by Dave Gravel. //
{******************************************************************************}
constructor TOXNewtonRagdollBone.create;
begin
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonRagdollBone last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonRagdollBone.CreateBone( pGeomType: TOXRagdollBoneGeomType );
begin
GeomType:= pGeomType;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonRagdollBone last change by Dave Gravel. //
{******************************************************************************}
procedure TOXNewtonRagdollBone.Render;
var
Matrix: TOXMatrix;
begin
if Body = nil then exit;
NewtonBodyGetMatrix( Body, @Matrix[0,0] );
case GeomType of
mdBox:
begin
Box.Matrix:= oxMDToMF( Matrix );
end;
mdCylinder:
begin
Cylinder.Matrix:= oxMDToMF( Matrix );
end;
mdSphere:
begin
SPhere.Matrix:= oxMDToMF( Matrix );
end;
end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonRagdoll last change by Dave Gravel. //
{******************************************************************************}
destructor TOXNewtonRagdollBone.Destroy;
begin
inherited destroy;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonRagdoll last change by Dave Gravel. //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -