FLOOR.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 "floor.h"
  4. #include <3dtools.h>
  5. extern CString& getpath(CString& filename);
  6. const float FLOORRANGE = 6.0f;
  7. const float FLOORHIGHT = -.3f;
  8. floortype::floortype()
  9. {
  10.    m_surface = new surfs();
  11.    tilesize = FLOORRANGE*2;
  12.    m_surface->setcolor(RGB(148,148,40));
  13. }
  14. floortype::floortype(CString& c)
  15. {
  16.    m_surface = new bmpsurf(c);
  17.    tilesize = FLOORRANGE*2;
  18.    ((bmpsurf*)m_surface)->ExemptFromIntersect();
  19. }
  20. floortype::~floortype()
  21. {
  22.    delete m_surface;
  23. }
  24. static float Material[] = {0.7f, 0.7f, 0.7f, 1.0f};
  25. void floortype::draw(coordinate& coord)
  26. {
  27.    float cx,cz;
  28.    tccolor color = m_surface->color();
  29.    coordinate t_a,t_b,t_c,t_d;
  30.    getentirearea(coord);
  31.    Game->Tool3d()->material(color);
  32.    for (float x = m_a.x(); x < m_b.x(); x += tilesize)
  33.    {
  34.       for (float z = m_a.z(); z < m_c.z(); z += tilesize)
  35.       {
  36.          cx = x;
  37.          cz = z;
  38.          t_a.setto(cx, FLOORHIGHT, cz);
  39.          cx += tilesize;
  40.          t_b.setto(cx, FLOORHIGHT, cz);
  41.          cz += tilesize;
  42.          t_c.setto(cx, FLOORHIGHT, cz);
  43.          cx -= tilesize;
  44.          t_d.setto(cx, FLOORHIGHT, cz);
  45.          m_surface->setto(t_a,t_b,t_c,t_d);
  46.          m_surface->draw();
  47.       }
  48.    }
  49. }
  50. void floortype::getentirearea(coordinate& coord)
  51. {
  52.    int tmpx, tmpz;
  53.    tmpx = (int) (coord.x() - FLOORRANGE);
  54.    tmpz = (int) (coord.z() - FLOORRANGE);
  55.    m_a.setto((float) tmpx, FLOORHIGHT, (float) tmpz);
  56.    tmpx = (int) (coord.x() + FLOORRANGE);
  57.    m_b.setto((float) tmpx, FLOORHIGHT, (float) tmpz);
  58.    tmpz = (int) (coord.z() + FLOORRANGE);
  59.    m_c.setto((float) tmpx, FLOORHIGHT, (float) tmpz);
  60.    tmpx = (int) (coord.x() - FLOORRANGE);
  61.    m_d.setto((float) tmpx, FLOORHIGHT, (float) tmpz);
  62. }
  63. void floortype::settexture(CString& c)
  64. {
  65.    delete m_surface;
  66.    m_surface = new bmpsurf(getpath(c));
  67.    tilesize = FLOORRANGE*2;
  68.    ((bmpsurf*)m_surface)->ExemptFromIntersect();
  69. }
  70. void floortype::cleartexture()
  71. {
  72.    delete m_surface;
  73.    m_surface = new surfs();
  74.    tilesize = FLOORRANGE*2;
  75.    m_surface->setcolor(RGB(148,148,40));
  76. }