1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef NEVERHOOD_RESOURCE_H
#define NEVERHOOD_RESOURCE_H
#include "common/str.h"
#include "neverhood/neverhood.h"
#include "neverhood/graphics.h"
#include "neverhood/staticdata.h"
#include "neverhood/resourceman.h"
namespace Neverhood {
enum {
kResTypeBitmap = 2,
kResTypePalette = 3,
kResTypeAnimation = 4,
kResTypeData = 5,
kResTypeText = 6,
kResTypeSound = 7,
kResTypeMusic = 8,
kResTypeVideo = 10
};
enum {
kResNhcTypeSubFont = 11,
kResNhcTypeMessages = 12,
kResNhcTypeSubtitles = 13
};
class SpriteResource {
public:
SpriteResource(NeverhoodEngine *vm);
~SpriteResource();
void draw(Graphics::Surface *destSurface, bool flipX, bool flipY);
bool load(uint32 fileHash, bool doLoadPosition = false);
void unload();
const NDimensions& getDimensions() { return _dimensions; }
NPoint& getPosition() { return _position; }
bool isRle() const { return _rle; }
const byte *getPixels() const { return _pixels; }
protected:
NeverhoodEngine *_vm;
ResourceHandle _resourceHandle;
NDimensions _dimensions;
NPoint _position;
const byte *_pixels;
bool _rle;
};
class PaletteResource {
public:
PaletteResource(NeverhoodEngine *vm);
~PaletteResource();
bool load(uint32 fileHash);
void unload();
void copyPalette(byte *destPalette);
const byte *palette() { return _palette; }
protected:
NeverhoodEngine *_vm;
ResourceHandle _resourceHandle;
const byte *_palette;
};
struct AnimFrameInfo {
uint32 frameHash;
int16 counter;
NDrawRect drawOffset;
int16 deltaX, deltaY;
NDrawRect collisionBoundsOffset;
uint32 spriteDataOffs;
};
class AnimResource {
public:
AnimResource(NeverhoodEngine *vm);
~AnimResource();
void draw(uint frameIndex, Graphics::Surface *destSurface, bool flipX, bool flipY);
bool load(uint32 fileHash);
void unload();
void clear();
uint getFrameCount() const { return _frames.size(); }
const AnimFrameInfo& getFrameInfo(int16 index) const { return _frames[index]; }
int16 getFrameIndex(uint32 frameHash);
void setReplEnabled(bool value) { _replEnabled = value; }
void setRepl(byte oldColor, byte newColor);
NDimensions loadSpriteDimensions(uint32 fileHash);
protected:
NeverhoodEngine *_vm;
ResourceHandle _resourceHandle;
int16 _width, _height;
const byte *_currSpriteData;
uint32 _fileHash;
const byte *_paletteData;
const byte *_spriteData;
bool _replEnabled;
byte _replOldColor;
byte _replNewColor;
Common::Array<AnimFrameInfo> _frames;
};
class MouseCursorResource {
public:
MouseCursorResource(NeverhoodEngine *vm);
void load(uint32 fileHash);
void unload();
NDrawRect& getRect();
void draw(int frameNum, Graphics::Surface *destSurface);
int getCursorNum() const { return _cursorNum; }
void setCursorNum(int cursorNum) { _cursorNum = cursorNum; }
protected:
int _cursorNum;
SpriteResource _cursorSprite;
NDrawRect _rect;
uint32 _currFileHash;
};
class TextResource {
public:
TextResource(NeverhoodEngine *vm);
~TextResource();
void load(uint32 fileHash);
void unload();
const char *getString(uint index, const char *&textEnd);
uint getCount() const { return _count;}
protected:
NeverhoodEngine *_vm;
ResourceHandle _resourceHandle;
const byte *_textData;
uint _count;
};
/* DataResource
1 Single NPoint
2 Array of NPoints
3 Array of NRects
4 MessageList
5 SubRectList
6 RectList
*/
class DataResource {
public:
DataResource(NeverhoodEngine *vm);
~DataResource();
void load(uint32 fileHash);
void unload();
NPoint getPoint(uint32 nameHash);
NPointArray *getPointArray(uint32 nameHash);
NRectArray *getRectArray(uint32 nameHash);
HitRectList *getHitRectList();
MessageList *getMessageListAtPos(int16 klaymenX, int16 klaymenY, int16 mouseX, int16 mouseY);
protected:
struct DRDirectoryItem {
uint32 nameHash;
uint16 offset;
uint16 type;
};
struct DRRect {
NRect rect;
uint16 subRectIndex;
};
struct DRSubRect {
NRect rect;
uint32 messageListHash;
uint16 messageListItemIndex;
};
typedef Common::Array<DRSubRect> DRSubRectList;
NeverhoodEngine *_vm;
ResourceHandle _resourceHandle;
Common::Array<DRDirectoryItem> _directory;
Common::Array<NPoint> _points;
Common::Array<NPointArray*> _pointArrays;
Common::Array<NRectArray*> _rectArrays;
Common::Array<HitRectList*> _hitRectLists;
Common::Array<MessageList*> _messageLists;
Common::Array<DRRect> _drRects;
Common::Array<DRSubRectList*> _drSubRectLists;
DataResource::DRDirectoryItem *findDRDirectoryItem(uint32 nameHash, uint16 type);
};
uint32 calcHash(const char *value);
} // End of namespace Neverhood
#endif /* NEVERHOOD_RESOURCE_H */
|