⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oxnewtonsmdragdoll.pas

📁 Newton Game Dynamic 1.52 Delphi下基于GLScene的OpenGL游戏开发控件。功能非常强大和易于使用。 Advanced physics engine for re
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    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 + -