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

📄 oxnewtonstaticobjects.pas

📁 Newton Game Dynamic 1.52 Delphi下基于GLScene的OpenGL游戏开发控件。功能非常强大和易于使用。 Advanced physics engine for re
💻 PAS
📖 第 1 页 / 共 4 页
字号:
{******************************************************************************}
procedure TOXNewtonStaCone.Notification(AComponent: TComponent; Operation: TOperation);
begin
   inherited;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
procedure TOXNewtonStaCone.UpdateTransformation;
begin
  if FActived then
    oxPSetInitTransform( FBody, Self );
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
function TOXNewtonStaCone.GetGeom: PNewtonCollision;
begin
  result:= FCollision;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
function TOXNewtonStaCone.GetBody: PNewtonBody;
begin
  result:= FBody;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
procedure TOXNewtonStaCone.InitNewton;
begin
  FManager:= TOXNewtonManager(Scene);
  if FActived or ( FManager = nil ) then Exit;
  FCollision:= NewtonCreateCone( FManager.World, BottomRadius, Height, nil );
  FBody:= NewtonCreateBody( FManager.World, FCollision );
  if FManager.WorldMatrialCustom then begin
    FContactID:= FManager.WorldDefaultMaterialID;
    oxSetObjectMaterial( FBody );
  end;
  NewtonBodySetUserData( FBody, Self );
  oxPSetInitTransform( FBody, Self );
  NewtonReleaseCollision( FManager.World, FCollision );
  FManager.AddLog( 'Static Cone Name: '+Name, 1, ':Info Object' );
  FManager.AddLog(  Name + ' InitNewton.', 1, ':Info Object' );
  FActived:= True;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
procedure TOXNewtonStaCone.DoProgress( const progressTime: TProgressTimes );
begin
  inherited;
  if FActived then begin
    if Assigned( FOnStepRender ) then
      FOnStepRender( progressTime.deltaTime, progressTime.newTime );
  end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
procedure TOXNewtonStaCone.BuildList( var rci: TRenderContextInfo );
begin
  if FOXVisual then
    oxStaConeBuildList( self, rci ) else
  exit;  
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCone last change by Dave Gravel.                 //
{******************************************************************************}
destructor TOXNewtonStaCone.Destroy;
begin
  if FActived and assigned( FBody ) then begin
    if ( not ( csDesigning in ComponentState ) ) then
      if Name = '' then FManager.AddLog( ClassName + ' destroyed.', 1, ':Info Object' )
      else FManager.AddLog( Name + ' destroyed.', 1, ':Info Object' );
    FActived:= False;
    NewtonDestroyBody( FManager.World, FBody );
  end;
  inherited destroy;
end;


{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
constructor TOXNewtonStaCompound.Create( aOwner: TComponent );
begin
  inherited create( aOwner );
  FOrionX3D:= 100;   
  FActived:= False;
  FObjects:= TList.Create;
  FMaterialCustom:= False;
  FOXVisual:= True;
  FConvexHull:= False;
  FContactID:= -1;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCube(obj: TCompoundCube);
begin
  FObjects.Add(obj)
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddSphere(obj: TCompoundSphere);
begin
  FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCylinder(obj: TCompoundCylinder);
begin
  FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCapsule(obj: TCompoundCapsule);
begin
  FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddCone(obj: TCompoundCone);
begin
  FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddChamferCylinder(obj: TCompoundChamferCylinder);
begin
  FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.AddMesh(obj: TCompoundMesh);
begin
  FObjects.Add(obj);
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.Notification(AComponent: TComponent; Operation: TOperation);
begin
   inherited;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.UpdateTransformation;
begin
  if FActived then
    oxPSetInitTransform( FBody, Self );
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
function TOXNewtonStaCompound.GetGeom: PNewtonCollision;
begin
  result:= FCollision;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
function TOXNewtonStaCompound.GetBody: PNewtonBody;
begin
  result:= FBody;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.InitNewton;
var
  i: integer;
  tmpColArray: TCollisionPrimitiveArray;
  mTrans: TOXMatrix;
  mTriangles: TAffineVectorList;
begin
  if (Count = 0) then Exit;
  if (FObjects.Count = 0) then Exit;
  FManager:= TOXNewtonManager(Scene);
  if FActived or ( FManager = nil ) then Exit;
  FManager.AddLog(  Name + ' create.', 1, ':Info Object' );  
  SetLength(tmpColArray,FObjects.Count);
  SetLength(FCollisionArray,FObjects.Count);
  for i := 0 to FObjects.Count - 1 do
  begin
    FManager.AddLog( TGLBaseSceneObject(FObjects.Items[i]).ClassName + Name, 1, ':Info Object' );
    mTrans:= oxMSetCompound(TGLBaseSceneObject(FObjects.Items[i]), self);
    if (TGLBaseSceneObject(FObjects.Items[i]).ClassNameIs('TCompoundMesh')) then
    begin
      mTriangles:= TCompoundMesh(FObjects.Items[i]).MeshObjects.ExtractTriangles;
      mTriangles.TransformAsVectors(TCompoundMesh(FObjects.Items[i]).Matrix);
      mTriangles.Translate( TCompoundMesh(FObjects.Items[i]).Position.AsAffineVector );
      oxObjectStaCompound( i, self, mTriangles, mTrans, FCollisionArray, tmpColArray, FObjects );
      mTriangles.Free;
    end else
    begin
      oxObjectStaCompound(i, self, nil, mTrans, FCollisionArray, tmpColArray, FObjects);
    end;
  end;
  FCollision:= NewtonCreateCompoundCollision( Manager.World, FObjects.Count, tmpColArray );
  FBody:= NewtonCreateBody( FManager.World, FCollision );
  NewtonBodySetUserData( FBody, Self );
  if FManager.WorldMatrialCustom then begin
    FContactID:= FManager.WorldDefaultMaterialID;
    oxSetObjectMaterial( FBody );
  end;
  oxPSetInitTransform( FBody, Self );
  NewtonReleaseCollision( FManager.World, FCollision );
  for i := 0 to FObjects.Count - 1 do
  begin
    if (TGLBaseSceneObject(FObjects.Items[i]).ClassNameIs('TCompoundCapsule')) then
      TCompoundCapsule(FObjects.Items[i]).InitCaps;
    if assigned(FCollisionArray[i]) then
    begin
      NewtonReleaseCollision( FManager.World, FCollisionArray[i] );
      FCollisionArray[i]:= nil;
    end;
    if ConvexHull then
    if assigned(tmpColArray[i]) then
    begin
      NewtonReleaseCollision( FManager.World, tmpColArray[i] );
      tmpColArray[i]:= nil;
    end;
  end;
  FreeAndNil(FObjects);
  FManager.AddLog( 'Static Compound Name: '+Name, 1, ':Info Object' );
  FManager.AddLog(  Name + ' InitNewton.', 1, ':Info Object' );
  FActived:= True;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.DoProgress( const progressTime: TProgressTimes );
begin
  inherited;
  if FActived then begin
    if Assigned( FOnStepRender ) then
      FOnStepRender( progressTime.deltaTime, progressTime.newTime );
  end;
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
procedure TOXNewtonStaCompound.BuildList( var rci: TRenderContextInfo );
begin
  if FOXVisual then
    inherited else
  exit; 
end;
{******************************************************************************}
// [15-9-2007]: TOXNewtonStaCompound last change by Dave Gravel.             //
{******************************************************************************}
destructor TOXNewtonStaCompound.Destroy;
begin
  if FActived and assigned( FBody ) then begin
    if ( not ( csDesigning in ComponentState ) ) then
      if Name = '' then FManager.AddLog( ClassName + ' destroyed.', 1, ':Info Object' )
      else FManager.AddLog( Name + ' destroyed.', 1, ':Info Object' );
    FActived:= False;
    NewtonDestroyBody( FManager.World, FBody );
  end;
  if Assigned(FObjects) then FObjects.Free;
  inherited destroy;
end;
{******************************************************************************}
{$D '[15-9-2007]: TOXNewtonManager v1.55 by Dave Gravel under MPL-1.1 license.'}
{******************************************************************************}
initialization
  RegisterClasses( [ TOXNewtonStaCube, TOXNewtonStaSphere, TOXNewtonStaCylinder, TOXNewtonStaCompound,
                     TOXNewtonStaChamferCylinder, TOXNewtonStaCCylinder, TOXNewtonStaCone ] );
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -