All pastes #15752 Raw Edit

Miscellany

public text v1 · immutable
#15752 ·published 2005-06-24 10:52 UTC
rendered paste body
unit Physics;

interface

uses
  Math,
  Math3D,
  Sons,
  Vars;

const
  MAX_PLAYERS = 4;  

type
  TMarbles = class
    Items: array[1..MAX_PLAYERS] of TMarble;
    Count: integer;
    CollisionQueue: PCollisionQueue;
    constructor Create;
    procedure Update(Time: single);
    procedure RunCollisions;
  end;

var
  Marbles: TMarbles;
  
implementation

// all TMarble definitions...
// all TCollisionQueue definitions...

constructor TMarbles.Create;
begin
    Count := 0;
    CollisionQueue := nil;
end;

procedure TMarbles.Update(Time: single);
var
  i,j: integer;
begin
  with Self do
  begin
    for i:=1 to Count do
    begin
      for j:=1 to Count do
      begin
        if IsCollision(Items[i],Items[j]) then
        begin
          CollisionQueue.Add(i,j);
        end;
      end;
    end;
    CollisionQueue.MixUp(0);
    RunCollisions;
    for i:=1 to Count do Items[i].Update(Time);
  end;
end;

procedure TMarbles.RunCollisions;
var
  p: PCollisionQueue;
begin
  p := Self.CollisionQueue;
  while p<>nil do
  begin
    Self.Items[p.i].DoCollision(Self.Items[p.j],true);
    PlaySample(samp);
  end;
end;

end.