00001
00009 #ifndef BUILDING_H
00010 #define BUILDING_H
00011
00012 class cBuilding;
00013
00014 #include "cObject.h"
00015 #include "cWeapon.h"
00016
00020 class cBuilding : public cObject {
00021 protected:
00022 static int sInstances;
00023 static long sTextures[4];
00024 protected:
00025 bool mDirtybase;
00026 float mBase[16];
00027 cExplosion mExplosion;
00028 float mRooms[3];
00029 public:
00030 cBuilding(int x, int y, int z, int rooms_x, int rooms_y, int rooms_z);
00031
00032 virtual void damageByParticle(float* localpos, float damage, cObject* enactor = NULL);
00033 virtual float constrainParticle(float* worldpos, float radius = 0.0f, float* localpos = NULL);
00034
00035 virtual void onSpawn();
00036
00037 virtual void animate(float spf);
00038 virtual void transform();
00039 virtual void drawSolid();
00040 virtual void drawEffect();
00041 };
00042
00043 struct cParticle;
00044
00050 class cScatterfield : public cObject {
00051 protected:
00052 static int sInstances;
00053 static unsigned int sTextures[16];
00054 public:
00055 enum CollisionType { CT_NONE, CT_CYLINDER, CT_SPHERE, CT_BOX };
00056 enum BillboardType { BT_NONE, BT_AROUND, BT_AXIS };
00057 protected:
00058 std::list<cParticle*> mDecals;
00059 public:
00060 cScatterfield(float x, float y, float z, float radius, float density);
00061 virtual void drawEffect();
00062 };
00063
00064
00068 class cTile : public cObject {
00069 public:
00071 enum Kinds {
00072 KIND_CONCRETE,
00073 KIND_ROAD_EASTWEST,
00074 KIND_ROAD_NORTHSOUTH,
00075 KIND_ROAD_JUNKTION,
00076
00077 MAX_KINDS
00078 };
00079 protected:
00081 static int sInstances;
00083 static long sTextures[MAX_KINDS];
00084
00085 static long sDisplaylists[MAX_KINDS*2];
00086 protected:
00088 int mKind;
00089 public:
00090
00092 cTile(int x, int y, int z, int kind);
00093 virtual void drawSolid();
00094 };
00095
00096
00097 class cPadmap : public cObject {
00098 float mHeights[16*16];
00099 public:
00100 cPadmap(float x, float z);
00101 virtual float constrainParticle(float* worldpos, float radius = 0.0f, float* localpos = NULL);
00102 virtual void drawSolid();
00103 };
00104
00105 class cHeightmap : public cObject {
00106 int mDims[2];
00107 float* mHeights;
00108 float* mPlanes;
00109 public:
00110 cHeightmap(float x, float z);
00111 virtual float constrainParticle(float* worldpos, float radius = 0.0f, float* localpos = NULL);
00112 virtual void drawSolid();
00113 };
00114
00115 #endif