home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Pascal / Book Demos in Pascal / SpriteEngine / SE RectBounce / SpriteHandlers.p < prev    next >
Encoding:
Text File  |  1995-04-04  |  2.2 KB  |  85 lines  |  [TEXT/PJMM]

  1. unit SpriteHandlers;
  2.  
  3. interface
  4.  
  5.     uses
  6. {$IFC UNDEFINED THINK_PASCAL}
  7.         Types, QuickDraw, Fonts, Events, Packages, Menus, Dialogs, Windows,{}
  8.         OSUtils, ToolUtils, OSEvents, 
  9. {$ENDC}
  10.         QDOffScreen, SpriteStructure, SpriteTools;
  11.  
  12.     procedure MoveSprite (theSprite: SpritePtr);
  13.     procedure HitSprite (theSprite: SpritePtr; anotherSprite: SpritePtr);
  14.     procedure InitSprites;
  15.  
  16. implementation
  17.  
  18.  
  19. (*** Custom handlers - application dependent ***)
  20.  
  21. {Edit this as necessary. It should always include the following three routines:}
  22.  
  23. {MoveSprite: move the sprite}
  24.  
  25. {HitSprite: handle collisions between two sprites}
  26.  
  27. {InitSprites: Load all faces and create initial sprites}
  28.  
  29.     var
  30.         firstFace, secondFace, thirdFace: GrafPtr;
  31.  
  32.     procedure MoveSprite (theSprite: SpritePtr);
  33.     begin
  34.         theSprite^.position.h := theSprite^.position.h + theSprite^.speed.h;
  35.         theSprite^.position.v := theSprite^.position.v + theSprite^.speed.v;
  36.         if KeepOnScreen(theSprite) then
  37.             ;
  38.     end; (*MoveSprite*)
  39.  
  40.  
  41.     procedure HitSprite (theSprite: SpritePtr; anotherSprite: SpritePtr);
  42.     var
  43.         tempSpeed: Integer;
  44.     begin
  45.     if RectSeparate(theSprite, anotherSprite) >= 2 then { 2 or 3: horizontal, otherwise vertical}
  46.         begin
  47.             tempSpeed := theSprite^.speed.h;
  48.             theSprite^.speed.h := anotherSprite^.speed.h;
  49.             anotherSprite^.speed.h := tempSpeed;
  50.         end
  51.     else
  52.         begin
  53.             tempSpeed := theSprite^.speed.v;
  54.             theSprite^.speed.v := anotherSprite^.speed.v;
  55.             anotherSprite^.speed.v := tempSpeed;
  56.         end;
  57.     end; (*HitSprite*)
  58.  
  59.     procedure InitSprites;
  60.         var
  61.             theSprite: SpritePtr;
  62.     begin
  63. (*Load all pictures*)
  64.         firstFace := LoadFaceFromCicn(128);            (*cicn resource #128.*)
  65.         secondFace := LoadFaceFromCicn(129);            (*cicn resource #129.*)
  66.         thirdFace := LoadFaceFromCicn(130);            (*cicn resource #130.*)
  67.  
  68. (*Create sprites*)
  69.         theSprite := NewSprite;
  70.         theSprite^.face := firstFace;
  71.         SetPt(theSprite^.position, 100, 100);
  72.         SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  73.  
  74.         theSprite := NewSprite;
  75.         theSprite^.face := secondFace;
  76.         SetPt(theSprite^.position, 50, 50);
  77.         SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  78.  
  79.         theSprite := NewSprite;
  80.         theSprite^.face := thirdFace;
  81.         SetPt(theSprite^.position, 150, 150);
  82.         SetPt(theSprite^.speed, Rand(7)-3, Rand(7)-3);
  83.     end; (*InitSprites*)
  84.  
  85. end.