00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CS_PROCTEX_H__
00021 #define __CS_PROCTEX_H__
00022
00023 #include <stdarg.h>
00024 #include "csutil/csobject.h"
00025 #include "itexture/iproctex.h"
00026 #include "iengine/texture.h"
00027 #include "qint.h"
00028
00029 struct iTextureWrapper;
00030 struct iMaterialWrapper;
00031 struct iEngine;
00032
00033 struct iObjectRegistry;
00034 struct iGraphics2D;
00035 struct iGraphics3D;
00036 struct iTextureManager;
00037 struct iTextureWrapper;
00038 struct iEventHandler;
00039
00040 class ProcEventHandler;
00041
00046 class csProcTexture : public csObject
00047 {
00048 friend struct ProcCallback;
00049 friend class ProcEventHandler;
00050
00051 private:
00052
00053
00054 static iEventHandler* SetupProcEventHandler (iObjectRegistry* object_reg);
00055 csRef<iEventHandler> proceh;
00056
00057 protected:
00058
00059 bool ptReady;
00060
00061
00062 int texFlags;
00063
00064
00065 iTextureWrapper* tex;
00066
00067 int mat_w, mat_h;
00068 csRef<iGraphics3D> g3d;
00069 csRef<iGraphics2D> g2d;
00070 iObjectRegistry* object_reg;
00071 bool anim_prepared;
00072
00073 bool key_color;
00074 int key_red, key_green, key_blue;
00075
00076
00077
00078
00079 bool use_cb;
00080
00081 bool always_animate;
00082
00083 bool visible;
00084
00085 bool GetAlwaysAnimate ();
00086 void SetAlwaysAnimate (bool enable);
00087
00088 struct eiTextureWrapper : public iTextureWrapper
00089 {
00090 SCF_DECLARE_EMBEDDED_IBASE(csProcTexture);
00091 virtual iObject *QueryObject();
00092 virtual iTextureWrapper *Clone () const;
00093 virtual void SetImageFile (iImage *Image);
00094 virtual iImage* GetImageFile ();
00095 virtual void SetTextureHandle (iTextureHandle *tex);
00096 virtual iTextureHandle* GetTextureHandle ();
00097 virtual void SetKeyColor (int red, int green, int blue);
00098 virtual void GetKeyColor (int &red, int &green, int &blue);
00099 virtual void SetFlags (int flags);
00100 virtual int GetFlags ();
00101 virtual void Register (iTextureManager *txtmng);
00102 virtual void SetUseCallback (iTextureCallback* callback);
00103 virtual iTextureCallback* GetUseCallback ();
00104 virtual void Visit ();
00105 virtual bool IsVisitRequired () const;
00106 virtual void SetKeepImage (bool k);
00107 virtual bool KeepImage () const;
00108 } scfiTextureWrapper;
00109 friend struct eiTextureWrapper;
00110
00111 struct eiProcTexture : public iProcTexture
00112 {
00113 SCF_DECLARE_EMBEDDED_IBASE(csProcTexture);
00114
00115 virtual bool GetAlwaysAnimate ();
00116 virtual void SetAlwaysAnimate (bool enable);
00117 } scfiProcTexture;
00118 friend struct eiProcTexture;
00119
00120 public:
00121
00122
00123
00124 csTicks last_cur_time;
00125
00126 private:
00127 static void ProcCallback (iTextureWrapper* txt, void* data);
00128
00129 public:
00130 SCF_DECLARE_IBASE_EXT (csObject);
00131
00132 csProcTexture ();
00133 virtual ~csProcTexture ();
00134
00135 iGraphics3D* GetG3D () { return g3d; }
00136 iGraphics2D* GetG2D () { return g2d; }
00137
00145 void DisableAutoUpdate () { use_cb = false; }
00146
00161 virtual bool Initialize (iObjectRegistry* object_reg);
00162
00172 iMaterialWrapper* Initialize (iObjectRegistry* object_reg, iEngine* engine,
00173 iTextureManager* txtmgr, const char* name);
00174
00179 virtual bool PrepareAnim ();
00180
00182 void SetKeyColor (int red, int green, int blue)
00183 {
00184 key_color = true;
00185 key_red = red;
00186 key_green = green;
00187 key_blue = blue;
00188 }
00189
00194 virtual void Animate (csTicks current_time) = 0;
00195
00197 virtual void GetDimension (int &w, int &h)
00198 { w = mat_w; h = mat_h; }
00199
00200 static int GetRandom (int max)
00201 {
00202 return int ((float(max)*rand()/(RAND_MAX+1.0)));
00203 }
00204
00206 iTextureWrapper* GetTextureWrapper ()
00207 { return &scfiTextureWrapper; }
00208 };
00209
00210
00211 #endif // __CS_PROCTEX_H__
00212