unit mazewalk_imageclasses; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, LCLType, Math, mazewalk_collisionobjectclass; type TPickup = class; TPickupPointEvent = procedure (sPickup: TPickup; const sPoints: integer) of object; { TPickup } TPickup = class(TCollisionObject) private fActive: boolean; fOnPointChange: TPickupPointEvent; fPoints: integer; { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); procedure DoOnPointChange(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Active : boolean read fActive write fActive; property OnPointChange : TPickupPointEvent read fOnPointChange write fOnPointChange; end; { TWall } TWall = class(TCollisionObject) private fSolid: boolean; { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Solid : boolean read fSolid write fSolid; end; { TEnemy } TEnemy = class(TCollisionObject) private fLethal: boolean; { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Lethal : boolean read fLethal write fLethal; end; { TProjectile } TProjectile = class(TCollisionObject) private fLethal: boolean; { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Lethal : boolean read fLethal write fLethal; end; { TPlayer } TPlayer = class(TCollisionObject) private { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; { TPortal } TPortal = class(TCollisionObject) private { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; { TGoal } TGoal = class(TCollisionObject) private fActive: boolean; { private declarations } protected { protected declarations } procedure DoOnCollision(Sender: TCollisionObject); public { public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Active : boolean read fActive write fActive; end; implementation // *********************************************************************************************************** // *********************************************************************************************************** // *********************************************************************************************************** { TWall } procedure TWall.DoOnCollision(Sender: TCollisionObject); begin // end; constructor TWall.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; end; destructor TWall.Destroy; begin inherited Destroy; end; { TGoal } procedure TGoal.DoOnCollision(Sender: TCollisionObject); begin // end; constructor TGoal.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; end; destructor TGoal.Destroy; begin inherited Destroy; end; { TPortal } procedure TPortal.DoOnCollision(Sender: TCollisionObject); begin // end; constructor TPortal.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; end; destructor TPortal.Destroy; begin inherited Destroy; end; { TPlayer } procedure TPlayer.DoOnCollision(Sender: TCollisionObject); begin // end; constructor TPlayer.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; end; destructor TPlayer.Destroy; begin inherited Destroy; end; { TProjectile } procedure TProjectile.DoOnCollision(Sender: TCollisionObject); begin // end; constructor TProjectile.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; end; destructor TProjectile.Destroy; begin inherited Destroy; end; { TEnemy } procedure TEnemy.DoOnCollision(Sender: TCollisionObject); begin // if (Sender = Player) then Restart; end; constructor TEnemy.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; end; destructor TEnemy.Destroy; begin inherited Destroy; end; { TPickup } procedure TPickup.DoOnCollision(Sender: TCollisionObject); begin if Assigned(OnPointChange) then fOnPointChange(Sender, fPoints); ObjectList.Delete(ObjectList.IndexOf(Sender)); (Sender as TPickup).Free; end; procedure TPickup.DoOnPointChange(Sender: TCollisionObject); begin fPoints := fPoints + 1; fPlayer.DoOnPointChange(Sender, 1); end; constructor TPickup.Create(AOwner: TComponent); begin inherited Create(AOwner); OnCollision := @DoOnCollision; OnPointChange := @DoOnPointChange; end; destructor TPickup.Destroy; begin inherited Destroy; end; end.