00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_IVARIA_ISO_H__
00020 #define __CS_IVARIA_ISO_H__
00021
00022 #include "csutil/scf.h"
00023 #include "csutil/cscolor.h"
00024 #include "csutil/flags.h"
00025 #include "csgeom/csrect.h"
00026 #include "csgeom/math2d.h"
00027 #include "csgeom/math3d.h"
00028 #include "ivideo/graph3d.h"
00029
00030 class csMatrix3;
00031 struct iObjectRegistry;
00032 struct iEvent;
00033 struct iGraphics2D;
00034 struct iGraphics3D;
00035 struct iTextureManager;
00036 struct iMaterial;
00037 struct iMaterialHandle;
00038 struct iMaterialWrapper;
00039 struct iMaterialList;
00040 struct iMeshFactoryList;
00041 struct iMeshFactoryWrapper;
00042 struct iClipper2D;
00043 struct iIsoWorld;
00044 struct iIsoView;
00045 struct iIsoRenderView;
00046 struct iIsoSprite;
00047 struct iIsoMeshSprite;
00048 struct iIsoGrid;
00049 struct iIsoCell;
00050 struct iIsoLight;
00051 struct G3DPolygonDPFX;
00052 struct iMeshObject;
00053 struct iCamera;
00054 struct iLight;
00055 struct iMeshObjectFactory;
00056
00057 SCF_VERSION (iGridChangeCallback, 0, 0, 1);
00058
00062 struct iGridChangeCallback : public iBase
00063 {
00065 virtual void GridChange (iIsoSprite* spr) = 0;
00066 };
00067
00068 SCF_VERSION (iIsoEngine, 0, 1, 1);
00069
00073 struct iIsoEngine : public iBase
00074 {
00076 virtual iObjectRegistry* GetObjectRegistry() const = 0;
00078 virtual iGraphics2D* GetG2D() const = 0;
00080 virtual iGraphics3D* GetG3D() const = 0;
00082 virtual iTextureManager* GetTextureManager() const = 0;
00083
00085 virtual int GetBeginDrawFlags () const = 0;
00086
00088 virtual iIsoWorld* CreateWorld() = 0;
00090 virtual iIsoView* CreateView(iIsoWorld *world) = 0;
00092 virtual iIsoLight* CreateLight() = 0;
00094 virtual iIsoSprite* CreateSprite() = 0;
00096 virtual iIsoMeshSprite* CreateMeshSprite() = 0;
00098 virtual iIsoSprite* CreateFloorSprite(const csVector3& pos, float w,
00099 float h) = 0;
00101 virtual iIsoSprite* CreateFrontSprite(const csVector3& pos, float w,
00102 float h) = 0;
00104 virtual iIsoSprite* CreateZWallSprite(const csVector3& pos, float w,
00105 float h) = 0;
00107 virtual iIsoSprite* CreateXWallSprite(const csVector3& pos, float w,
00108 float h) = 0;
00109
00111 virtual iMaterialList* GetMaterialList () = 0;
00116 virtual iMaterialWrapper *CreateMaterialWrapper(const char *vfsfilename,
00117 const char *materialname) = 0;
00118
00120 virtual iMeshFactoryList* GetMeshFactories () = 0;
00122 virtual iMeshFactoryWrapper *CreateMeshFactory(const char* classId,
00123 const char *name) = 0;
00125 virtual iMeshFactoryWrapper *CreateMeshFactory(const char *name) = 0;
00126
00127 };
00128
00129 SCF_VERSION (iIsoWorld, 0, 0, 1);
00130
00134 struct iIsoWorld : public iBase
00135 {
00137 virtual void AddSprite(iIsoSprite *sprite) = 0;
00139 virtual void RemoveSprite(iIsoSprite *sprite) = 0;
00141 virtual void MoveSprite(iIsoSprite *sprite, const csVector3& oldpos,
00142 const csVector3& newpos) = 0;
00143
00145 virtual iIsoGrid* CreateGrid(int width, int height) = 0;
00147 virtual iIsoGrid* FindGrid(const csVector3& pos) = 0;
00148
00150 virtual void Draw(iIsoRenderView *rview) = 0;
00151 };
00152
00153 SCF_VERSION (iIsoGrid, 0, 0, 1);
00154
00161 struct iIsoGrid : public iBase
00162 {
00164 virtual iIsoWorld* GetWorld() const = 0;
00172 virtual void SetSpace(int minx, int minz, float miny = -1.0,
00173 float maxy = +10.0) = 0;
00175 virtual bool Contains(const csVector3& pos) = 0;
00177 virtual const csBox3& GetBox() const = 0;
00179 virtual int GetWidth() const = 0;
00181 virtual int GetHeight() const = 0;
00183 virtual void GetGridOffset(int& minx, int& miny) const = 0;
00185 virtual iIsoCell* GetGridCell(int x, int y) = 0;
00186
00191 virtual void SetGroundMult(int multx, int multy) = 0;
00193 virtual int GetGroundMultX() const = 0;
00195 virtual int GetGroundMultY() const = 0;
00200 virtual void SetGroundValue(int x, int y, int gr_x, int gr_y, float val) = 0;
00202 virtual float GetGroundValue(int x, int y, int gr_x, int gr_y) = 0;
00204 virtual float GetGroundValue(int x, int y) = 0;
00206 virtual bool GroundHitBeam(const csVector3& src, const csVector3& dest) = 0;
00207
00209 virtual void SetAllLight(const csColor& color) = 0;
00211 virtual void SetAllStaticLight(const csColor& color) = 0;
00213 virtual void RegisterLight(iIsoLight *light) = 0;
00215 virtual void UnRegisterLight(iIsoLight *light) = 0;
00217 virtual void RegisterDynamicLight(iIsoLight *light) = 0;
00219 virtual void UnRegisterDynamicLight(iIsoLight *light) = 0;
00221 virtual void GetFakeLights(const csVector3& pos, iLight **& flights,
00222 int& num) = 0;
00223
00225 virtual void AddSprite(iIsoSprite *sprite) = 0;
00227 virtual void AddSprite(iIsoSprite *sprite, const csVector3& pos) = 0;
00229 virtual void RemoveSprite(iIsoSprite *sprite) = 0;
00234 virtual void MoveSprite(iIsoSprite *sprite, const csVector3& oldpos,
00235 const csVector3& newpos) = 0;
00236
00238 virtual void Draw(iIsoRenderView *rview) = 0;
00239 };
00240
00241 SCF_VERSION (iIsoCellTraverseCallback, 0, 0, 1);
00242
00246 struct iIsoCellTraverseCallback : public iBase
00247 {
00249 virtual void Traverse (iIsoSprite* spr) = 0;
00250 };
00251
00252 SCF_VERSION (iIsoCell, 0, 0, 2);
00253
00257 struct iIsoCell : public iBase
00258 {
00260 virtual void AddSprite(iIsoSprite *sprite, const csVector3& pos) = 0;
00262 virtual void RemoveSprite(iIsoSprite *sprite, const csVector3& pos) = 0;
00264 virtual void Draw(iIsoRenderView *rview) = 0;
00266 virtual void Traverse(iIsoCellTraverseCallback* func) = 0;
00267 };
00268
00269 SCF_VERSION (iIsoView, 0, 0, 1);
00270
00286 struct iIsoView : public iBase
00287 {
00289 virtual iIsoEngine *GetEngine() const = 0;
00290
00292 virtual void SetWorld(iIsoWorld* world) = 0;
00294 virtual iIsoWorld* GetWorld() const = 0;
00295
00297 virtual void SetRect(const csRect& rect) = 0;
00299 virtual const csRect& GetRect() const = 0;
00300
00311 virtual void SetAxes(float xscale, float yscale, float zscale,
00312 float zskew, float xskew) = 0;
00313
00315 virtual const csVector2& GetScroll() const = 0;
00317 virtual csVector3 GetViewScroll() const = 0;
00319 virtual void SetScroll(const csVector3& worldpos, const csVector2& coord) = 0;
00321 virtual void MoveScroll(const csVector3& delta) = 0;
00322
00324 virtual void W2S(const csVector3& world, csVector2& screen) const = 0;
00330 virtual void W2S(const csVector3& world, csVector3& screen) const = 0;
00335 virtual void S2W(const csVector2& screen, csVector3& world) const = 0;
00336
00341 virtual void Draw() = 0;
00342
00348 virtual iCamera* GetFakeCamera(const csVector3& center,
00349 iIsoRenderView *rview) = 0;
00350 };
00351
00352 SCF_VERSION (iIsoRenderView, 0, 0, 1);
00353
00355 #define CSISO_RENDERPASS_PRE 0
00356
00357 #define CSISO_RENDERPASS_BG 1
00358
00359 #define CSISO_RENDERPASS_MAIN 2
00360
00361 #define CSISO_RENDERPASS_FG 3
00362
00363 #define CSISO_RENDERPASS_POST 4
00364
00368 struct iIsoRenderView : public iBase
00369 {
00371 virtual iIsoView* GetView() const = 0;
00373 virtual iGraphics3D* GetG3D() const = 0;
00375 virtual int GetRenderPass() const = 0;
00377 virtual iClipper2D* GetClipper() const = 0;
00379 virtual void GetPrecalcGrid(int& startx, int& starty, int& scanw,
00380 int& scanh, float& cellpery) const = 0;
00382 virtual float GetMinZ() const = 0;
00384 virtual void SetMinZ(float val) = 0;
00386 virtual void AddPolyFX(int materialindex, G3DPolygonDPFX *g3dpolyfx,
00387 uint mixmode) = 0;
00388 };
00389
00390 SCF_VERSION (iIsoSprite, 0, 0, 1);
00391
00395 struct iIsoSprite : public iBase
00396 {
00398 virtual int GetVertexCount() const = 0;
00400 virtual void AddVertex(const csVector3& coord, float u, float v) = 0;
00402 virtual const csVector3& GetVertexPosition(int i) = 0;
00404 virtual void SetAllColors(const csColor& color) = 0;
00406 virtual void AddToVertexColor(int i, const csColor& color) = 0;
00408 virtual void ResetAllColors() = 0;
00410 virtual void SetAllStaticColors(const csColor& color) = 0;
00412 virtual void AddToVertexStaticColor(int i, const csColor& color) = 0;
00413
00415 virtual const csVector3& GetPosition() const = 0;
00417 virtual void SetPosition(const csVector3& pos) = 0;
00419 virtual void MovePosition(const csVector3& delta) = 0;
00425 virtual void ForcePosition(const csVector3& pos) = 0;
00426
00428 virtual void SetMaterialWrapper(iMaterialWrapper *material) = 0;
00430 virtual iMaterialWrapper* GetMaterialWrapper() const = 0;
00432 virtual void SetMixMode (uint mode) = 0;
00434 virtual uint GetMixMode () const = 0;
00435
00437 virtual void Draw(iIsoRenderView *rview) = 0;
00438
00440 virtual void SetGrid(iIsoGrid *grid) = 0;
00442 virtual iIsoGrid *GetGrid() const = 0;
00444 virtual void SetGridChangeCallback (iGridChangeCallback* cb) = 0;
00446 virtual iGridChangeCallback* GetGridChangeCallback () const = 0;
00447 };
00448
00449
00450
00451 SCF_VERSION (iIsoMeshSprite, 0, 0, 1);
00452
00457 struct iIsoMeshSprite : iIsoSprite {
00459 virtual void SetMeshObject(iMeshObject *mesh) = 0;
00461 virtual iMeshObject* GetMeshObject() const = 0;
00462
00464 virtual void SetTransform(const csMatrix3& transform) = 0;
00466 virtual const csMatrix3& GetTransform() const = 0;
00467
00468 #ifndef CS_USE_NEW_RENDERER
00469
00470 virtual void SetZBufMode(csZBufMode mode) = 0;
00472 virtual csZBufMode GetZBufMode() const = 0;
00473 #endif // CS_USE_NEW_RENDERER
00474 };
00475
00476
00487 #define CSISO_ATTN_NONE 0
00488 #define CSISO_ATTN_LINEAR 1
00489 #define CSISO_ATTN_INVERSE 2
00490 #define CSISO_ATTN_REALISTIC 3
00491
00493 #define CSISO_LIGHT_STATIC 0x0000
00494
00495 #define CSISO_LIGHT_DYNAMIC 0x0001
00496
00497 SCF_VERSION (iIsoLight, 0, 0, 1);
00498
00502 struct iIsoLight : public iBase
00503 {
00505 virtual void SetGrid(iIsoGrid *grid) = 0;
00507 virtual iIsoGrid* GetGrid() const = 0;
00509 virtual csFlags& Flags() = 0;
00511 virtual void SetAttenuation(int attn) = 0;
00513 virtual int GetAttenuation() const = 0;
00515 virtual void SetPosition(const csVector3& pos) = 0;
00517 virtual const csVector3& GetPosition() const = 0;
00519 virtual void SetColor(const csColor& col) = 0;
00521 virtual const csColor& GetColor() const = 0;
00523 virtual void SetRadius(float radius) = 0;
00525 virtual float GetRadius() const = 0;
00526
00528 virtual void ShineGrid() = 0;
00530 virtual void ShineSprite(iIsoSprite *sprite) = 0;
00532 virtual iLight* GetFakeLight() = 0;
00534 virtual float GetVis(int gridx, int gridy) const = 0;
00535 };
00536
00537 SCF_VERSION (iIsoMaterialWrapperIndex, 0, 0, 1);
00538
00544 struct iIsoMaterialWrapperIndex: public iBase
00545 {
00547 virtual int GetIndex() const = 0;
00549 virtual void SetIndex(int i) = 0;
00550 };
00551 #endif // __CS_IVARIA_ISO_H__