3DWRAP.CPP
上传用户:abcdshs
上传日期:2007-01-07
资源大小:1858k
文件大小:9k
源码类别:

游戏

开发平台:

Visual C++

  1. // (C) Copyright 1996 by Anthony J. Carin.  All Rights Reserved.
  2. #include <stdafx.h>
  3. #include "3dwrap.h"
  4. #include "3dshapes.h"
  5. #include "personal.h"
  6. #include "queue.h"
  7. #pragma warning (disable: 4096)
  8. #include "vfw.h"
  9. #include "floor.h"
  10. #include "command.h"
  11. #include "levels.h"
  12. #include "3dtools.h"
  13. #include "bmpsurf.h"
  14. #include "landscpe.h"
  15. #include "gateway.h"
  16. #include "dudehold.h"
  17. #include "teleport.h"
  18. #include "weaphold.h"
  19. #include "resource.h"
  20. DudesWrapper::DudesWrapper()
  21. {
  22.     m_g = new global;
  23.     hdc = 0;
  24.     hrc = 0;
  25.     hwnd = 0;
  26.     ghwnd = NULL;
  27.     wndcreated = FALSE;
  28. }
  29. DudesWrapper::~DudesWrapper()
  30. {
  31.     delete m_g;
  32. }
  33. short            DudesWrapper::Centx()
  34. {
  35.     return m_g->centx;
  36. }
  37. short            DudesWrapper::Centy()
  38. {
  39.     return m_g->centy;
  40. }
  41. short            DudesWrapper::Cx()
  42. {
  43.     return m_g->cx;
  44. }
  45. short            DudesWrapper::Cy()
  46. {
  47.     return m_g->cy;
  48. }
  49. void            DudesWrapper::SetCentx(short s)
  50. {
  51.     m_g->centx = s;
  52. }
  53. void            DudesWrapper::SetCenty(short s)
  54. {
  55.     m_g->centy = s;
  56. }
  57. void            DudesWrapper::SetCx(short s)
  58. {
  59.     m_g->cx = s;
  60. }
  61. void            DudesWrapper::SetCy(short s)
  62. {
  63.     m_g->cy = s;
  64. }
  65. short            DudesWrapper::Detail()
  66. {
  67.     return m_g->detail;
  68. }
  69. void            DudesWrapper::SetDetail(short d)
  70. {
  71.     m_g->detail = d;
  72. }
  73. coordinate&       DudesWrapper::Aim()
  74. {
  75.     static coordinate c = *(m_g->aim);
  76.     return c;
  77. }
  78. short            DudesWrapper::LevelNum()
  79. {
  80.     return m_g->levelnum;
  81. }
  82. void            DudesWrapper::SetLevelNum(short l)
  83. {
  84.     m_g->levelnum = l;
  85. }
  86. levels          *DudesWrapper::LevelPtr()
  87. {
  88.     return m_g->levelptr;
  89. }
  90. void          DudesWrapper::SetLevelPtr(levels *p)
  91. {
  92.     m_g->levelptr = p;
  93. }
  94. drawqueue       *DudesWrapper::DrawQueue()
  95. {
  96.     return m_g->queue;
  97. }
  98. personal        *DudesWrapper::Hero()
  99. {
  100.     return m_g->hero;
  101. }
  102. floortype       *DudesWrapper::Floor()
  103. {
  104.     return m_g->floor;
  105. }
  106. tc3dtools       *DudesWrapper::Tool3d()
  107. {
  108.     return m_g->tool3d;
  109. }
  110. char             DudesWrapper::Motionless()
  111. {
  112.     return m_g->motionless;
  113. }
  114. void             DudesWrapper::NowMotionless()
  115. {
  116.     m_g->motionless = TRUE;
  117. }
  118. void             DudesWrapper::NotMotionless()
  119. {
  120.     m_g->motionless = FALSE;
  121. }
  122. char             DudesWrapper::IsPaused()
  123. {
  124.     return m_g->pause;
  125. }
  126. void             DudesWrapper::PauseOn()
  127. {
  128.     m_g->pause = TRUE;
  129. }
  130. void             DudesWrapper::PauseOff()
  131. {
  132.     m_g->pause = FALSE;
  133. }
  134. viewmodetype     DudesWrapper::Viewmode()
  135. {
  136.     return m_g->viewmode;
  137. }
  138. void     DudesWrapper::SetViewmode(viewmodetype v)
  139. {
  140.     m_g->viewmode = v;
  141. }
  142. bmplist         *DudesWrapper::Bmpsurfs()
  143. {
  144.     return m_g->bmpsurfs;
  145. }
  146. highlist        *DudesWrapper::HighAreas()
  147. {
  148.     return m_g->highareas;
  149. }
  150. landscapelist   *DudesWrapper::Landscapes()
  151. {
  152.     return m_g->landscapes;
  153. }
  154. float            DudesWrapper::Sintable(int i)
  155. {
  156.     return m_g->sintable[i];
  157. }
  158. float            DudesWrapper::Costable(int i)
  159. {
  160.     return m_g->costable[i];
  161. }
  162. void             DudesWrapper::SetDrawQueue   (drawqueue     *p)
  163. {
  164.     m_g->queue = p;
  165. }
  166. void             DudesWrapper::SetHero        (personal      *p)
  167. {
  168.     m_g->hero = p;
  169. }
  170. void             DudesWrapper::SetHero        (personal&      p)
  171. {
  172.     *(m_g->hero) = p;
  173. }
  174. void             DudesWrapper::SetFloor       (floortype     *p)
  175. {
  176.     m_g->floor = p;
  177. }
  178. void             DudesWrapper::SetTool3d      (tc3dtools     *p)
  179. {
  180.     m_g->tool3d = p;
  181. }
  182. void             DudesWrapper::SetBmpsurfs    (bmplist       *p)
  183. {
  184.     m_g->bmpsurfs = p;
  185. }
  186. void             DudesWrapper::SetHighAreas   (highlist      *p)
  187. {
  188.     m_g->highareas = p;
  189. }
  190. void             DudesWrapper::SetLandscapes  (landscapelist *p)
  191. {
  192.     m_g->landscapes = p;
  193. }
  194. void DudesWrapper::NewGame()
  195. {
  196. #ifdef EDITOR
  197.    char OKtoLoad = FALSE;
  198.    if (m_g->levelptr && m_g->levelptr->completed())
  199.        OKtoLoad = TRUE;
  200. #endif
  201.    delete m_g->levelptr;
  202.    m_g->levelptr = NULL;
  203.    if (ghwnd == NULL && wndcreated == FALSE)
  204.    {
  205.        wndcreated = TRUE;
  206.        ghwnd = MCIWndCreate(hwnd, NULL,
  207.            MCIWNDF_NOPLAYBAR |
  208.            MCIWNDF_NOMENU |
  209.            MCIWNDF_NOERRORDLG |
  210.            MCIWNDF_NOOPEN, NULL);
  211.    }
  212.    DrawQueue()->purge();
  213.    NotMotionless();
  214.    Floor()->setcolor(RGB(random(256),random(256),random(256)));
  215.    createlevel(Hero()->startlevel());
  216.    if (Detail() > 50)
  217.         Floor()->settexture((CString)"floor.bmp");
  218.    else
  219.         Floor()->cleartexture();
  220. #ifndef EDITOR
  221.    m_g->levelptr->usercontrol->selectpunch(random(100),getpath((CString)"punch.dat"));
  222. #else
  223.    if (OKtoLoad)
  224. #endif
  225.    Landscapes()->load(getpath((CString)"landscpe.map"));
  226.    camera.setx(0.0f);
  227.    camera.setz(-7.0f);
  228. }
  229. void DudesWrapper::InitLaunch()
  230. {
  231.     char tmpbuf[300];
  232.     FILE *fp = fopen("starter.dat", "r");
  233.     if (fp > 0)
  234.     {
  235.         fscanf(fp, "%s", tmpbuf);
  236.         fclose(fp);
  237.     }
  238.     else
  239.         strcpy(tmpbuf, "level1\bobal.dud");
  240.     Hero()->load(tmpbuf);
  241.     createlevel(Hero()->startlevel());
  242. }
  243. void DudesWrapper::Launch()
  244. {
  245.     if (IsPaused())
  246.         return;
  247.     Tool3d()->reset();
  248. #ifndef EDITOR
  249.     Tool3d()->lookat(camera, Aim());
  250. #else
  251.     if (m_g->levelptr->selection)
  252.         Tool3d()->lookat(camera, m_g->levelptr->selection->location());
  253.     else
  254.         Tool3d()->lookat(camera, Aim());
  255. #endif
  256.     camera.setxdir(camera.xdirectionto(Aim()));
  257.     camera.setydir(camera.ydirectionto(Aim()));
  258.     Tool3d()->lightposition(camera);
  259.     if (Detail() > 10)
  260.         Floor()->draw(Aim());
  261.     m_g->levelptr->draw();
  262.     if (m_g->levelptr->completed())
  263.     {
  264.         SetLevelNum((short)(LevelNum()+1));
  265.         if (nextlevelexists())
  266.         {
  267.             Hero()->setstartlevel(LevelNum());
  268.             Hero()->save();
  269.             NewGame();
  270.         }
  271.     }
  272.     Tool3d()->finish();
  273.     Landscapes()->CreateCloseLandscapes();
  274.     if (ghwnd != NULL)
  275.     {
  276.         if (MCIWndGetPosition(ghwnd) >= MCIWndGetEnd(ghwnd))
  277.             MCIWndPlay(ghwnd);
  278.     }
  279. }
  280. void DudesWrapper::CleanUp()
  281. {
  282.    FILE *fp = fopen("starter.dat", "w");
  283.    if (fp > 0)
  284.    {
  285.        fprintf(fp, "%sn", Hero()->filepath());
  286.        fclose(fp);
  287.    }
  288.    if (ghwnd != NULL)
  289.        MCIWndDestroy(ghwnd);
  290. }
  291. void DudesWrapper::createlevel(short level)
  292. {
  293.     levels *lptr;
  294.     switch (level)
  295.     {
  296.     case 0:Hero()->setstartlevel(1);
  297.     case 1:lptr  = new level1(); break;
  298.     case 2:lptr  = new level2(); break;
  299.     case 3:lptr  = new level3(); break;
  300.     case 4:lptr  = new level4(); break;
  301.     case 5:lptr  = new level5(); break;
  302.     case 6:lptr  = new level6(); break;
  303.     case 7:lptr  = new level7(); break;
  304.     case 8:lptr  = new level8(); break;
  305.     case 9:lptr  = new level9(); break;
  306.     case 10:lptr = new level10(); break;
  307.     case 11:lptr = new level11(); break;
  308.     case 12:lptr = new level12(); break;
  309.     default:lptr = new lastlevel(level); break;
  310.     }
  311.     SetLevelPtr(lptr);
  312. #ifndef EDITOR
  313.     LPCSTR tmp = (LPCSTR)getpath((CString)"3ddudes.mid");
  314.     if (ghwnd != NULL)
  315.     {
  316.         MCIWndClose(ghwnd);
  317.         MCIWndOpen(ghwnd, tmp, 0);
  318.         MCIWndPlay(ghwnd);
  319.     }
  320. #endif
  321. }
  322. char DudesWrapper::nextlevelexists()
  323. {
  324.     char buf[40];
  325.     FILE *fp;
  326.     sprintf(buf, "level%d\test.cmd", LevelNum());
  327.     fp = fopen(buf,"r");
  328.     if (fp > 0)
  329.     {
  330.         fclose(fp);
  331.         return TRUE;
  332.     }
  333.     if (Motionless() == FALSE)
  334.     {
  335.         NowMotionless();
  336.         CDialog nomore(IDD_NOMORE);
  337.         nomore.DoModal();
  338.     }
  339.     return FALSE;
  340. }
  341. void             DudesWrapper::NewLandscape(CString& s)
  342. {
  343.     landscape *tmp = new landscape(s);
  344.     DrawQueue()->add(tmp);
  345.     LevelPtr()->selection = tmp;
  346. }
  347. void             DudesWrapper::NewGateway(CString& s)
  348. {
  349.     gateway *tmp = new gateway(s);
  350.     DrawQueue()->add(tmp);
  351.     LevelPtr()->selection = tmp;
  352. }
  353. void             DudesWrapper::NewDudeholder(CString& s)
  354. {
  355.     dudeholder *tmp = new dudeholder(s);
  356.     DrawQueue()->add(tmp);
  357.     LevelPtr()->selection = tmp;
  358. }
  359. void             DudesWrapper::NewTeleporter(short s)
  360. {
  361.     Teleporter *tmp = new Teleporter(s);
  362.     DrawQueue()->add(tmp);
  363.     LevelPtr()->selection = tmp;
  364. }
  365. void             DudesWrapper::NewWeaponholder(int s)
  366. {
  367.     weaponholder *tmp = new weaponholder((WeaponType)s);
  368.     DrawQueue()->add(tmp);
  369.     LevelPtr()->selection = tmp;
  370. }
  371. landscape       *DudesWrapper::LastLandscape()
  372. {
  373.     return LevelPtr()->selection;
  374. }