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

游戏

开发平台:

Visual C++

  1. // (C) Copyright 1996 by Anthony J. Carin.  All Rights Reserved.
  2. #include <stdafx.h>
  3. #include <weapon.h>
  4. #include "levels.h"
  5. #include <mmsystem.h>
  6. weapon::weapon(CString& weapondat) : handheld()
  7. {
  8.    hitfloor = FALSE;
  9.    throwing = FALSE;
  10.    pickingup = FALSE;
  11.    delete m_body;
  12.    CString tmpstr;
  13.    if (weapondat.CompareNoCase((CString)"SHIELD.DAT") == 0)
  14.        m_hhtype = SHIELD;
  15.    else if (weapondat.CompareNoCase((CString)"SWORD.DAT") == 0)
  16.        m_hhtype = SWORD;
  17.    else
  18.        m_hhtype = KNIFE;
  19.    tmpstr = picklist((float)random(100)/100.0f, getpath(weapondat));
  20.    if (!tmpstr.IsEmpty())
  21.    {
  22.        m_body = new image((LPCTSTR) getpath(tmpstr));
  23.        int color = random(100) + 70;
  24.        m_body->setcolor(RGB(color,color,color+10));
  25.    }
  26.    else
  27.        m_body = 0;
  28. }
  29. void weapon::draw()
  30. {
  31.     handheld::draw();
  32.     if (Next || Prev)
  33.     {
  34.         if (hitfloor)
  35.             throwing = FALSE;
  36.         if (throwing)
  37.         {
  38.             coordinate tmp = location();
  39.             coordinate tmp2 = tmp;
  40.             tmp.setx(tmp.x() + tcsin(throwdir, throwspeed));
  41.             tmp.setz(tmp.z() + tccos(throwdir, throwspeed));
  42.             tmp2.stepto(tmp, throwspeed);
  43.             setto(tmp2);
  44.             setzposition(flipdir);
  45.             flipdir = flipdir - (direction) TC_PI_4;
  46.             m_view.setxdir(m_view.x()+TC_PI_2);
  47.         }
  48.     }
  49. }
  50. void weapon::Throw(direction& dir, float speed)
  51. {
  52.     throwing = TRUE;
  53.     throwdir = dir;
  54.     flipdir  = dir;
  55.     throwspeed = speed;
  56. }
  57. void handheld::draw()
  58. {
  59.     baseobject::draw();
  60.     if (Next || Prev)
  61.     {
  62.         m_prevview = m_view;
  63.         settledown(0.0f);
  64.         if (m_prevview.y() == m_view.y() && !hitfloor)
  65.         {
  66.             hitfloor = TRUE;
  67.             PlaySound(getpath((CString)"hitfloor.wav"), NULL, SND_ASYNC);
  68.         }
  69.         if (Game->LevelPtr()->GuyLocation().distanceto(location()) < .5f && hitfloor)
  70.         {
  71.             if (!pickingup)
  72.             {
  73.                 pickingup = TRUE;
  74.                 Game->LevelPtr()->usercontrol->pickup();
  75.             }
  76.         }
  77.         else
  78.             pickingup = FALSE;
  79.     }
  80. }