home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / OBJGLV.ZIP / SRC / DEMO4B / RENDGEST.CPP < prev    next >
C/C++ Source or Header  |  1993-05-12  |  4KB  |  122 lines

  1. // Copyright 1993, Mark T. Pflaging
  2. #include "rendgest.hpp"
  3. #include "userint.hpp"
  4. #include "keyboard.hpp"
  5. #include "segasupp.hpp"
  6. void RendGestSet::Init(InitFile & ini, char * sectionName)
  7. {
  8.     setName(sectionName);
  9.     addId(ini.find(sectionName, "Up"), Up);
  10.     addId(ini.find(sectionName, "Down"), Down);
  11.     addId(ini.find(sectionName, "Left"), Left);
  12.     addId(ini.find(sectionName, "Right"), Right);
  13.  
  14.     addId(ini.find(sectionName, "StraightUp"), StraightUp);
  15.     addId(ini.find(sectionName, "StraightDown"), StraightDown);
  16.     addId(ini.find(sectionName, "StraightLeft"), StraightLeft);
  17.     addId(ini.find(sectionName, "StraightRight"), StraightRight);
  18.  
  19.     addId(ini.find(sectionName, "GeneralExtreme"), GeneralExtreme);
  20.     addId(ini.find(sectionName, "ExtremeUp"), ExtremeUp);
  21.     addId(ini.find(sectionName, "ExtremeDown"), ExtremeDown);
  22.     addId(ini.find(sectionName, "ExtremeLeft"), ExtremeLeft);
  23.     addId(ini.find(sectionName, "ExtremeRight"), ExtremeRight);
  24.  
  25.     addId(ini.find(sectionName, "TiltUp"), TiltUp);
  26.     addId(ini.find(sectionName, "TiltDown"), TiltDown);
  27.     addId(ini.find(sectionName, "TwistCW"), TwistCW);
  28.     addId(ini.find(sectionName, "TwistCCW"), TwistCCW);
  29.  
  30.     addId(ini.find(sectionName, "Mode1On"), Mode1On);
  31.     addId(ini.find(sectionName, "Mode2On"), Mode2On);
  32.     char * temp = ini.find(sectionName, "Mode1Off");
  33.     if (temp) {
  34.         addId(temp, Mode1Off);
  35.         useMode1Off = True;
  36.     }
  37.     else useMode1Off = False;
  38.     temp = ini.find(sectionName, "Mode2Off");
  39.     if (temp) {
  40.         addId(temp, Mode2Off);
  41.         useMode2Off = True;
  42.     }
  43.     else useMode2Off = False;
  44.     addId(ini.find(sectionName, "Select"), Select);
  45.     addId(ini.find(sectionName, "Move"), Move);
  46.     addId(ini.find(sectionName, "Twist"), Twist);
  47.     for (int i = 0; i <= Twist; i ++) {
  48.         statusBits[i] = False;
  49.     }
  50. }
  51.  
  52. void RendGestSet::Register(Gesture & arg, Boolean onOrOff)
  53. {
  54.     NumberedGestSet::Register(arg, onOrOff);
  55.     NumberedGesture & found = (NumberedGesture &)arg;
  56.     if (!onOrOff) {
  57.         switch (RendGests(found.getId())) {
  58.         case Mode1On:
  59.             if (useMode1Off) return;
  60.         case Mode2On:
  61.             if (useMode2Off) return;
  62. /***
  63.         case Mode1Off:
  64.         case Mode2Off:
  65.             return;
  66. ***/
  67.         }
  68.     }
  69.     if (onOrOff) {
  70.         switch (RendGests(found.getId())) {
  71.         case Mode1Off:
  72.             statusBits[Mode1On] = False;
  73.             return;
  74.         case Mode2Off:
  75.             statusBits[Mode2On] = False;
  76.             return;
  77.         }
  78.     }
  79.     statusBits[found.getId()] = onOrOff;
  80. }
  81.  
  82. void RendGestSet::postCheck()
  83. {
  84.     int x = 0, y = 0, buttons = 0;
  85.     if (statusBits[Up] || statusBits[TiltDown] || statusBits[StraightUp]) {
  86.         y -= 28;
  87.         if (statusBits[GeneralExtreme]) y -= 60;
  88.     }
  89.     if (statusBits[ExtremeUp]) y -= 60;
  90.     if (statusBits[Down] || statusBits[TiltUp] || statusBits[StraightDown]) {
  91.         y += 28;
  92.         if (statusBits[GeneralExtreme]) y += 60;
  93.     }
  94.     if (statusBits[ExtremeDown]) y += 60;
  95.     if (statusBits[Right] || statusBits[TwistCW] || statusBits[StraightRight]) {
  96.         x += 28;
  97.         if (statusBits[GeneralExtreme]) x += 60;
  98.     }
  99.     if (statusBits[ExtremeRight]) x += 60;
  100.     if (statusBits[Left] || statusBits[TwistCCW] || statusBits[StraightLeft]) {
  101.         x -= 28;
  102.         if (statusBits[GeneralExtreme]) x -= 60;
  103.     }
  104.     if (statusBits[ExtremeLeft]) x -= 60;
  105.     if (((statusBits[Mode1On]) && (statusBits[Mode2On])) ||
  106.         (statusBits[TwistCW] || statusBits[TwistCCW])
  107.     ) buttons = 3;
  108.     else {
  109.         if (statusBits[Mode1On] || statusBits[TiltUp] || statusBits[TiltDown]) buttons = 1;
  110.         if (statusBits[Mode2On] || statusBits[StraightUp] || statusBits[StraightDown]) buttons = 2;
  111.     }
  112.     do_joy_move(x, y, buttons);
  113. }
  114.  
  115. int RendGestSet::findGest()
  116. {
  117.     if (statusBits[Move]) return G_FIST;
  118.     if (statusBits[Twist]) return G_PINCH;
  119.     if (statusBits[Select]) return G_POINT;
  120.     return G_UNKNOWN;
  121. }
  122.