(*********************************************************************)
(* 
   :Program.  	 SpriteDemo.MOD
   :Author.   	 Frank Staudte / Pit Burkhardt 
   :Address      Hasenbergstr.91 7000 Stuttgart 1 W-Germany
   :Phone.       Germany 0711/638388
   :shortcut. 	 [fst]
   :Version.  	 1.1
   :Date.     	 07.04.88
   :Copyright.   PD
   :Language. 	 Modula-II
   :Translator.  M2Amiga
   :Imports.	 Bewegung der Sprites.
   :UpDate.	 -
   :Contents.	 Little SimpleSprite Demo.
   :Remark.	 Thanks to [bne] and [mif]. 
       
**********************************************************************)

MODULE Sprite;
						
FROM Arts 		IMPORT TermProcedure;	
FROM SYSTEM             IMPORT ADR, BITSET, CAST;
FROM Heap               IMPORT AllocMem;
FROM Hardware	        IMPORT custom,Custom;	
FROM Intuition		IMPORT NewScreen,WindowPtr,ScreenPtr,OpenScreen,
				CloseScreen,customScreen;
FROM Graphics           IMPORT ViewPortPtr,SimpleSpritePtr,ViewModeSet,
  				sprites, GetSprite,MoveSprite,FreeSprite,
                                SetRGB4,ChangeSprite;   
FROM Img IMPORT		Imgheight,ImgPtr,AIR1,AIR2;

TYPE
  
VAR
  MyScreen			:NewScreen;
  wp                            :WindowPtr;
  sp                            :ScreenPtr;
  ViewPort                      :ViewPortPtr;
  SpPtr1         		:SimpleSpritePtr;
  SprNr1                        :INTEGER;
  wahr   			:BOOLEAN;
  Coll				:BITSET;
  XPos,YPos			:INTEGER;
  AddUp,i			:INTEGER;
    
PROCEDURE Testcollision (VAR wahr : BOOLEAN);
  VAR 
    Bits : BITSET;
  BEGIN
    Bits := CAST(BITSET,custom.clxdat);
    IF 9 IN Bits THEN 
      wahr := TRUE;
    ELSE
      wahr := FALSE;
    END;
    WHILE 9 IN Bits DO 
      Bits := CAST(BITSET,custom.clxdat);
    END;
END Testcollision;   
              
PROCEDURE CleanUp;
 BEGIN
  FreeSprite(SprNr1); 			
  IF sp<>NIL THEN CloseScreen(sp) END;
 END CleanUp;
 
BEGIN (* Main *)

TermProcedure(CleanUp);

WITH MyScreen DO
  leftEdge:=0;
  topEdge:=0;
  width:=320;
  height:=256;
  depth:=2;
  detailPen:=0;
  blockPen:=1;
  viewModes:=ViewModeSet{sprites};
  type:=customScreen;
  font:=NIL;
  defaultTitle:=ADR("Touch that simpleSprite");
  gadgets:=NIL;
  customBitMap:=NIL;
END; (* With *)

AllocMem (SpPtr1,SIZE(SpPtr1^),FALSE);  

WITH SpPtr1^ DO				
  posctldata:=ImgPtr[AIR1];
  height:=Imgheight;
  x:=100; y:=100;
  num:=2;
END;
     
  wp:=NIL;
  sp:=OpenScreen(MyScreen);
  IF sp#NIL THEN
    ViewPort:=ADR(sp^.viewPort);
    SetRGB4(ViewPort,0,0,0,0);
    SetRGB4(ViewPort,21,12,10,12);
    SetRGB4(ViewPort,22,0,0,15);
    SetRGB4(ViewPort,23,15,12,15);
    SprNr1:=GetSprite(SpPtr1,2);
    AddUp:=0;
    REPEAT  
      wahr:=FALSE;
      REPEAT					
        XPos:=320-sp^.mouseX;
        YPos:=256-sp^.mouseY;
        MoveSprite(ViewPort,SpPtr1,XPos,YPos);
        Testcollision(wahr);
      UNTIL wahr;   				
      ChangeSprite(ViewPort,SpPtr1,ImgPtr[AIR2]);
      FOR i:=0 TO 5000 DO END;
      wahr:=FALSE;
      REPEAT					
        XPos:=320-sp^.mouseX;
        YPos:=256-sp^.mouseY;
        MoveSprite(ViewPort,SpPtr1,XPos,YPos);
        Testcollision(wahr);
      UNTIL wahr;   				
    ChangeSprite(ViewPort,SpPtr1,ImgPtr[AIR1]);
    AddUp:=AddUp+1;
    UNTIL AddUp>=10;
  END;
END Sprite.

