home *** CD-ROM | disk | FTP | other *** search
- Unit OopObjs;
-
- { OOPOBJS.PAS Version 1.1 Copyright 1992 Scott D. Ramsay }
-
- { OOPOBJS.PAS is free! Go crazy. }
- { When I was learning Linked-List in High School, I thought that I'd only }
- { need it in boring stuff like database Programming. Doubled linked-list, }
- { is a great way to handle multiple Objects For games. Throw in some OOP }
- { design and Volia! Easy managable sprites. }
- { I give this code to Public Domain. Use it as you see fit. Just include }
- { the first comment line when distributing the source code, Thanks. }
-
- { Changes from 1.0: }
- { Added new parameter in method checkhit. }
- { Var item:pobj }
- { Is a Pointer to the Object which called the checkhit }
-
- Interface
-
- Type
- plist = ^tlist;
- PObjs = ^tobjs;
- tobjs = Object
- nx,ny, { Sprite Position }
- flp, { Sprite number (For animation) }
- nrx, { I Forget what this does }
- num_sprite, { Num of sprites per Objects }
- timeo, { How long this Object lasts }
- pointage : Integer; { Score value (For gamers) }
- mapcolor : Byte; { Color For radar display }
- id, { I Forget this one too }
- explo, { True if the Object is explodin}
- overshow : Boolean; { See: Procedure DRAWITEMS }
- powner : plist; { The PLIST node which this }
- { Object belongs }
- Constructor init(vx,vy:Integer);
- Procedure drawitemObject;Virtual;
- Procedure calcitemObject;Virtual;
- Function checkhit(hx,hy:Integer;Var item:pobjs):Boolean;Virtual;
- Destructor done; Virtual;
- end;
- PobjMov = ^tobjMov;
- tobjMov = Object(tobjs)
- ndx,ndy : Integer;
- Constructor init(vx,vy,vdx,vdy:Integer);
- Procedure calcitemObject; Virtual;
- end;
- tlist = Record
- item : pobjs;
- prev,next : plist;
- end;
- pkill = ^tkill;
- tkill = Record
- tk : plist;
- next : pkill;
- end;
-
- Procedure addp(Var nkbeg,nkend,p:plist);
- Procedure deletep(Var nkbeg,nkend,p:plist);
- Procedure calcitems(Var nkbeg:plist);
- Procedure drawitems(Var nkbeg:plist;over:Boolean);
- Procedure add2kill_list(Var kill:pkill;Var i:plist);
- Procedure cleankill_list(Var kill:pkill;Var nkbeg,nkend:plist);
- Procedure clean_plist(Var nkbeg,nkend:plist);
-
- Implementation
-
- Procedure calcitems(Var nkbeg:plist);
- Var
- p : plist;
- begin
- p := nkbeg;
- While p<>nil do
- begin
- p^.item^.calcitemObject;
- p := p^.next;
- end;
- end;
-
-
- Procedure drawitems(Var nkbeg:plist;over:Boolean);
- {
- This Procedure is usually called from: (GMorPH.PAS)
- Tmorph.pre_map
- Tmorph.post_map
- The OVER flag tells when this Object should be drawn. Behind
- geomorph or infront of the geomorph.
- }
- Var
- p : plist;
- begin
- p := nkbeg;
- While p<>nil do
- begin
- if (p^.item^.overshow=over)
- then p^.item^.drawitemObject;
- p := p^.next;
- end;
- end;
-
-
- Procedure clean_plist(Var nkbeg,nkend:plist);
- Var
- p,p2 : plist;
- begin
- p := nkbeg;
- While p<>nil do
- begin
- p2 := p;
- p := p^.next;
- dispose(p2^.item,done);
- dispose(p2);
- end;
- nkbeg := nil;
- nkend := nil;
- end;
-
-
- Procedure addp(Var nkbeg,nkend,p:plist);
- begin
- p^.next := nil;
- if nkend=nil
- then
- begin
- nkbeg := p;
- nkend := p;
- p^.prev := nil;
- end
- else
- begin
- p^.prev := nkend;
- nkend^.next := p;
- nkend := p;
- end;
- end;
-
-
- Procedure deletep(Var nkbeg,nkend,p:plist);
- begin
- if nkbeg=nkend
- then
- begin
- nkbeg := nil;
- nkend := nil;
- end
- else
- if nkbeg=p
- then
- begin
- nkbeg := nkbeg^.next;
- nkbeg^.prev := nil;
- end
- else
- if nkend=p
- then
- begin
- nkend := nkend^.prev;
- nkend^.next := nil;
- end
- else
- begin
- p^.next^.prev := p^.prev;
- p^.prev^.next := p^.next;
- end;
- dispose(p^.item,done);
- dispose(p);
- end;
-
-
- Procedure cleankill_list(Var kill:pkill;Var nkbeg,nkend:plist);
- Var
- p,p2 : pkill;
- begin
- p := kill;
- While p<>nil do
- begin
- p2 := p;
- p := p^.next;
- deletep(nkbeg,nkend,p2^.tk);
- dispose(p2);
- end;
- kill := nil;
- end;
-
-
- Procedure add2kill_list(Var kill:pkill;Var i:plist);
- Var
- p : pkill;
- begin
- new(p);
- p^.tk := i;
- p^.next := kill;
- kill := p
- end;
-
- (**) { tobjs Methods }
-
- Constructor tobjs.init(vx,vy:Integer);
- begin
- nx := vx; ny := vy; num_sprite := 1;
- mapcolor := $fb; pointage := 0;
- flp := 0; overshow := False;
- end;
-
-
- Destructor tobjs.done;
- begin
- end;
-
-
- Procedure tobjs.drawitemObject;
- begin
- { i.e.
- fbitdraw(nx,ny,pic[flip]^);
- }
- end;
-
-
- Procedure tobjs.calcitemObject;
- begin
- end;
-
-
- Function tobjs.checkhit(hx,hy:Integer;Var item:pobjs):Boolean;
- begin
- end;
-
- (**) { tobjMov methods }
-
- Constructor tobjMov.init(vx,vy,vdx,vdy:Integer);
- begin
- nx := vx; ny := vy; ndx := vdx; ndy := vdy;
- mapcolor := $fb; pointage := 0;
- flp := 0; overshow := False;
- end;
-
-
- Procedure tobjMov.calcitemObject;
- begin
- { These are just simple examples of what should go in the methods }
- inc(nx,ndx); inc(ny,ndy);
- flp := (flp+1)mod num_sprite;
- end;
-
- end.