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

游戏

开发平台:

Visual C++

  1. // (C) Copyright 1996 by Anthony J. Carin.  All Rights Reserved.
  2. #include <stdafx.h>
  3. #include <baseobj.h>
  4. #include "levels.h"
  5. #include "higharea.h"
  6. baseobject::baseobject(CString& filename) : qentry()
  7. {
  8.    if (!filename.IsEmpty())
  9.         m_body = new image(filename);
  10.    else
  11.         m_body = 0;
  12.    m_type = BASEOBJECT;
  13. }
  14. baseobject::~baseobject()
  15. {
  16.    delete m_body;
  17. }
  18. void baseobject::draw()
  19. {
  20.    view c;
  21.    c = m_view;
  22.    c.setzdir(c.zdirection()+zposition);
  23.    c.setxdir(c.xdirection()+xposition);
  24.    c.setydir(c.ydirection()+yposition);
  25.    if (m_body)
  26.    {
  27.       m_body->setto(c);
  28.       m_body->draw();
  29.    }
  30. }
  31. const float EXTRAHIGHT = .25f;
  32. void baseobject::settledown(float y)
  33. {
  34.     float newy = 0.0f;
  35.     coordinate tmp = m_view;
  36.     higharea *tmpptr = Game->HighAreas()->First();
  37.     while (tmpptr != NULL)
  38.     {
  39.         if (tmpptr->iswithin(location()) &&
  40.             newy < tmpptr->hight())
  41.             newy = tmpptr->hight();
  42.         tmpptr = Game->HighAreas()->Next();
  43.     }
  44.     if (newy)
  45.         y += (newy + EXTRAHIGHT);
  46.     if (tmp.y() > y)
  47.     {
  48.         tmp.sety(tmp.y()-0.4f);
  49.         m_view.stepto(tmp, 1.0f);
  50.     }
  51.     else if (tmp.y() < y)
  52.     {
  53.         m_view.sety(y);
  54.     }
  55. }