home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 138.lha / Cycle / Joystick.c < prev    next >
C/C++ Source or Header  |  1986-11-20  |  3KB  |  114 lines

  1. /*
  2.   This player has no strategy of its own, but just moves in the direction
  3.   indicated by a joystick; this lets a human play against the Warrior Cycle
  4.   programs.
  5.  */
  6. #include "cycles.h"
  7. #include <exec/types.h>
  8. #include <exec/devices.h>
  9. #include <devices/gameport.h>
  10. #include <devices/inputevent.h>
  11.  
  12. char player_name[] = "Joystick";
  13.  
  14. static struct MsgPort    *gameport;
  15. static struct IOStdReq   *gameio;
  16. static BYTE              gamebuffer[sizeof(struct InputEvent)];
  17. static BYTE              *gamebuff;
  18. static struct InputEvent *gamedata;
  19.  
  20. struct IOStdReq *CreateStdIO();
  21.  
  22. strategy_init()
  23. {
  24.   gameport = CreatePort(0,0);
  25.   if (!gameport) {
  26.     printf("Error, couldn't create port\n");
  27.     return(-1);;
  28.   }
  29.   gameio = CreateStdIO(gameport);
  30.   if (!gameio) {
  31.     printf("error, couldn't create StdIO message\n");
  32.     DeletePort(gameport);
  33.     return(-1);
  34.   }
  35.   if (OpenDevice("gameport.device",1,gameio,0)) {
  36.     printf("error, couldn't open gameport.device\n");
  37.     DeleteStdIO(gameio);
  38.     DeletePort(gameport);
  39.     return(-1);
  40.   }
  41.   if (SetCType(GPCT_ABSJOYSTICK)) {
  42.     printf("Error, can't set controller type\n");
  43.     CloseDevice(gameio);
  44.     DeleteStdIO(gameio);
  45.     DeletePort(gameport);
  46.     return(-1);
  47.   }
  48.   if (SetTrigger(GPTF_UPKEYS|GPTF_DOWNKEYS,50)) {
  49.     printf("error, can't set trigger type\n");
  50.     CloseDevice(gameio);
  51.     DeleteStdIO(gameio);
  52.     DeletePort(gameport);
  53.     return(-1);
  54.   }
  55.   gameio->io_Command = GPD_READEVENT;
  56.   gameio->io_Data    = (APTR)gamebuffer;
  57.   gameio->io_Length  = sizeof(struct InputEvent);
  58.   gameio->io_Flags   = 0;
  59.   gamedata           = (struct InputEvent *)gamebuffer;
  60. }
  61.  
  62. strategy_finish()
  63. {
  64.     CloseDevice(gameio);
  65.     DeleteStdIO(gameio);
  66.     DeletePort(gameport);
  67. }
  68.  
  69. strategy()
  70. {
  71.   long code;
  72.   long xmove,ymove;
  73.   long x,y,dir;
  74.  
  75.   GetInfo(&x,&y,&dir);
  76.   gameio->io_Length = sizeof(struct InputEvent);
  77.   SendIO(gameio);
  78.   WaitPort(gameport);
  79.   /* wait for joystick event, chain to last event is list */
  80.   while (GetMsg(gameport))
  81.     ;
  82.   code  = gamedata->ie_Code;
  83.   xmove = gamedata->ie_X;
  84.   ymove = gamedata->ie_Y;
  85.   if (ymove) return((ymove<0) ? DIR_UP : DIR_DOWN );
  86.   if (xmove) return((xmove<0) ? DIR_LEFT : DIR_RIGHT );
  87.   return(dir);
  88. }
  89.  
  90. static SetCType(type)
  91. {
  92.   gameio->io_Command = GPD_SETCTYPE;
  93.   gameio->io_Length  = 1;
  94.   gameio->io_Data    = (APTR)gamebuff;
  95.   *gamebuff          = type;
  96.   SendIO(gameio);
  97.   WaitPort(gameport);
  98.   GetMsg(gameport);
  99.   return(gameio->io_Error);
  100. }
  101. static SetTrigger(keys,timeout)
  102. {
  103.   struct GamePortTrigger gpt;
  104.  
  105.   gameio->io_Command = GPD_SETTRIGGER;
  106.   gameio->io_Length  = sizeof(gpt);
  107.   gameio->io_Data    = (APTR)&gpt;
  108.   gpt.gpt_Keys       = keys;
  109.   gpt.gpt_Timeout    = timeout;
  110.   gpt.gpt_XDelta     = 1;
  111.   gpt.gpt_YDelta     = 1;
  112.   return(DoIO(gameio));
  113. }
  114.