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.