00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 #ifndef KR_RESOURCE_INCLUDED
00070 #define KR_RESOURCE_INCLUDED
00071
00072 #include "../util/glstring.h"
00073 #include "../util/gltypes.h"
00074 #include "../util/glutil.h"
00075 #include "../util/glfixed.h"
00076
00077
00078 struct SDL_RWops;
00079 struct KrRect;
00080 class KrSpriteResource;
00081 class KrTileResource;
00082 class KrCanvasResource;
00083 class KrFontResource;
00084 class KrBoxResource;
00085 class KrTextDataResource;
00086 class KrBinaryDataResource;
00087 class KrEncoder;
00088 class KrImage;
00089
00090
00093 enum
00094 {
00095 KYRATAG_END = 1,
00096 KYRATAG_SPRITE,
00097 KYRATAG_TILE,
00098 KYRATAG_CANVAS,
00099 KYRATAG_FONT,
00100 KYRATAG_BOX,
00101 KYRATAG_TEXTDATA,
00102 KYRATAG_BINARYDATA
00103 };
00104
00105
00106
00107 class KrCollisionMap
00108 {
00109 public:
00110 KrCollisionMap( GlFixed xScale, GlFixed yScale,
00111 int width, int height );
00112
00113 ~KrCollisionMap() { delete [] map; }
00114
00115
00116 U32* GetRow( int i ) { GLASSERT( i>=0 && i<cy );
00117 return map + cx * i;
00118 }
00119
00120
00121
00122 bool Collide( int dx, int dy, const KrRect& intersection, KrCollisionMap* );
00123
00124
00125 GlFixed XScale() { return xScale; }
00126 GlFixed YScale() { return yScale; }
00127
00128 private:
00129 int cx, cy;
00130 U32* map;
00131 GlFixed xScale, yScale;
00132 };
00133
00134
00139 class KrResource
00140 {
00141 public:
00142 KrResource() : resId( 0 ) {}
00143 virtual ~KrResource() {}
00144
00146 virtual U32 Type() = 0;
00148 virtual const std::string& TypeName() = 0;
00149
00151 const std::string& ResourceName() { return resName; }
00153 const U32 ResourceId() { return resId; }
00154
00155 virtual KrSpriteResource* ToSpriteResource() { return 0; }
00156 virtual KrTileResource* ToTileResource() { return 0; }
00157 virtual KrCanvasResource* ToCanvasResource() { return 0; }
00158 virtual KrFontResource* ToFontResource() { return 0; }
00159 virtual KrBoxResource* ToBoxResource() { return 0; }
00160 virtual KrTextDataResource* ToTextDataResource() { return 0; }
00161 virtual KrBinaryDataResource* ToBinaryDataResource() { return 0; }
00162
00169 virtual void CacheScale( GlFixed xScale, GlFixed yScale ) {}
00170
00172 virtual bool IsScaleCached( GlFixed xScale, GlFixed yScale ) { return false; }
00173
00175 virtual void FreeScaleCache() {}
00176
00177
00178 virtual void Save( KrEncoder* ) { GLASSERT( 0 ); }
00179
00180
00181
00182
00183 virtual KrCollisionMap* GetCollisionMap( KrImage* state, int window ) { return 0; }
00184
00185 protected:
00186 void SetNameAndId( const std::string& _name, U32 _id ) { resName = _name; resId = _id; }
00187 KrCollisionMap* collisionMap;
00188
00189 private:
00190 std::string resName;
00191 U32 resId;
00192
00193 };
00194
00195
00196 class KrResourceFactory
00197 {
00198 public:
00199 virtual ~KrResourceFactory();
00200
00201 static KrResourceFactory* Instance();
00202
00203 virtual KrResource* Create( U32 id,
00204 U32 size,
00205 SDL_RWops* file );
00206
00207 private:
00208 KrResourceFactory();
00209 static KrResourceFactory* instance;
00210 };
00211
00212
00213
00214 #endif