World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Класс LODFile_Sprites

#include <LOD.h>

+ Граф наследования:LODFile_Sprites:
+ Граф связей класса LODFile_Sprites:

Открытые члены

 LODFile_Sprites ()
 
virtual ~LODFile_Sprites ()
 
void DeleteSomeSprites ()
 
void DeleteSpritesRange (int uStartIndex, int uStopIndex)
 
int _461397 ()
 
void DeleteSomeOtherSprites ()
 
int LoadSpriteFromFile (LODSprite *pSpriteHeader, const String &pContainer)
 
bool LoadSprites (const String &pFilename)
 
int LoadSprite (const char *pContainerName, unsigned int uPaletteID)
 
void ReleaseLostHardwareSprites ()
 
void ReleaseAll ()
 
void MoveSpritesToVideoMemory ()
 
void _inlined_sub0 ()
 
void _inlined_sub1 ()
 
- Открытые члены унаследованные от LOD::File
 File ()
 
virtual ~File ()
 
bool Open (const String &pFilename)
 
void Close ()
 
voidLoadRaw (const String &pContainer, size_t *data_size=nullptr)
 
voidLoadCompressedTexture (const String &pContainer, size_t *data_size=nullptr)
 
voidLoadCompressed (const String &pContainer, size_t *data_size=nullptr)
 
bool DoesContainerExist (const String &filename)
 
String GetSubNodeName (size_t index) const
 
size_t GetSubNodesCount () const
 
int GetSubNodeIndex (const String &name) const
 

Открытые атрибуты

unsigned int uNumLoadedSprites
 
int field_ECA0
 
int field_ECA4
 
int field_ECA8
 
SpritepHardwareSprites
 
int field_ECB4
 

Дополнительные унаследованные члены

- Защищенные члены унаследованные от LOD::File
FILE * FindContainer (const String &filename, size_t *data_size=nullptr)
 
virtual bool OpenFile (const String &sFilename)
 
bool LoadHeader ()
 
bool LoadSubIndices (const String &sFolder)
 
virtual void ResetSubIndices ()
 
- Защищенные данные унаследованные от LOD::File
FILE * pFile
 
String pLODName
 
bool isFileOpened
 
struct FileHeader header
 
std::vector< DirectorypRoot
 
String pContainerName
 
unsigned int uOffsetToSubIndex
 
unsigned int uNumSubDirs
 
struct DirectorypSubIndices
 

Подробное описание

См. определение в файле LOD.h строка 210

Конструктор(ы)

◆ LODFile_Sprites()

LODFile_Sprites::LODFile_Sprites ( )

См. определение в файле LOD.cpp строка 402

402  : LOD::File() {
403  field_ECA4 = 0;
404  field_ECA0 = 0;
405  pHardwareSprites = 0;
406  // can_load_hardware_sprites = 0;
407  field_ECB4 = 0;
408  uNumLoadedSprites = 0;
409 }

Перекрестные ссылки field_ECA0, field_ECA4, field_ECB4, pHardwareSprites и uNumLoadedSprites.

◆ ~LODFile_Sprites()

LODFile_Sprites::~LODFile_Sprites ( )
virtual

См. определение в файле LOD.cpp строка 387

387  {
388  if (this->pHardwareSprites) {
389  for (int i = 0; i < this->uNumLoadedSprites; ++i) {
390  this->pHardwareSprites[i].Release();
391  }
392  }
393 }

Методы

◆ DeleteSomeSprites()

void LODFile_Sprites::DeleteSomeSprites ( )

См. определение в файле LOD.cpp строка 299

299  {
300  int *v1 = (int *)&this->uNumLoadedSprites;
301  int *v2 = &this->field_ECA8;
303  *v1 = *v2;
304 }

Используется в SpawnActor().

+ Граф вызова функции:

◆ DeleteSpritesRange()

void LODFile_Sprites::DeleteSpritesRange ( int  uStartIndex,
int  uStopIndex 
)

См. определение в файле LOD.cpp строка 306

306  {
307  if (this->pHardwareSprites) {
308  if (uStartIndex < uStopIndex) {
309  for (int i = uStartIndex; i < uStopIndex; i++) {
311  }
312  }
313  }
314 }

Используется в DeleteSomeOtherSprites().

+ Граф вызова функции:

◆ _461397()

int LODFile_Sprites::_461397 ( )

См. определение в файле LOD.cpp строка 843

843  {
844  this->field_ECA8 = this->uNumLoadedSprites;
845  if (this->uNumLoadedSprites < this->field_ECA0)
846  this->field_ECA8 = this->field_ECA0;
847  if (this->field_ECA0 < this->field_ECA4) field_ECA0 = this->field_ECA4;
848  return this->uNumLoadedSprites;
849 }

Используется в Engine::_461103_load_level_sub().

+ Граф вызова функции:

◆ DeleteSomeOtherSprites()

void LODFile_Sprites::DeleteSomeOtherSprites ( )

См. определение в файле LOD.cpp строка 232

232  {
233  int *v1 = (int *)&this->uNumLoadedSprites;
234  int *v2 = &this->field_ECA0;
236 
237  // testing - do no reset sprite count as we are not clearing sprites
238  // see sprite::release below
239 
240  *v1 = *v2;
241 }

Перекрестные ссылки DeleteSpritesRange(), field_ECA0 и uNumLoadedSprites.

Используется в OutdoorLocation::Initialize() и Engine::ResetCursor_Palettes_LODs_Level_Audio_SFT_Windows().

+ Граф вызовов:
+ Граф вызова функции:

◆ LoadSpriteFromFile()

int LODFile_Sprites::LoadSpriteFromFile ( LODSprite pSpriteHeader,
const String pContainer 
)

См. определение в файле LOD.cpp строка 98

98  {
99  FILE *File = FindContainer(pContainer, 0);
100  if (File == nullptr) {
101  return -1;
102  }
103 
104  fread(pSprite, sizeof(LODSpriteHeader), 1, File);
105  strcpy(pSprite->pName, pContainer.c_str());
106  LODSpriteLine *pSpriteLines = new LODSpriteLine[pSprite->uHeight];
107  fread(pSpriteLines, sizeof(LODSpriteLine), pSprite->uHeight, File);
108 
109  uint8_t *pDecompressedBytes = nullptr;
110 
111  int Sizea = pSprite->uSpriteSize;
112  if (pSprite->uDecompressedSize) {
113  pDecompressedBytes = (uint8_t*)malloc(pSprite->uDecompressedSize);
114  void *DstBufa = malloc(Sizea);
115  fread(DstBufa, 1, Sizea, File);
116  zlib::Uncompress(pDecompressedBytes,
117  (unsigned int *)&pSprite->uDecompressedSize,
118  DstBufa, Sizea);
119  pSprite->uSpriteSize = pSprite->uDecompressedSize;
120  free(DstBufa);
121  } else {
122  pDecompressedBytes = (uint8_t*)malloc(Sizea);
123  fread(pDecompressedBytes, 1, Sizea, File);
124  }
125 
126  pSprite->bitmap = new uint8_t[pSprite->uWidth * pSprite->uHeight];
127  memset(pSprite->bitmap, 0, pSprite->uWidth * pSprite->uHeight);
128  for (uint i = 0; i < pSprite->uHeight; i++) {
129  if (pSpriteLines[i].begin >= 0) {
130  memcpy(pSprite->bitmap + (i * pSprite->uWidth) + pSpriteLines[i].begin,
131  pDecompressedBytes + pSpriteLines[i].offset,
132  pSpriteLines[i].end - pSpriteLines[i].begin);
133  }
134  }
135 
136  delete[] pSpriteLines;
137 
138  return 1;
139 }

Перекрестные ссылки LODSpriteLine::begin, LODSprite::bitmap, LODSpriteLine::end, LOD::File::File(), LOD::File::FindContainer(), LODSpriteLine::offset, LODSpriteHeader::pName, LODSpriteHeader::uDecompressedSize, LODSpriteHeader::uHeight, zlib::Uncompress(), LODSpriteHeader::uSpriteSize и LODSpriteHeader::uWidth.

Используется в LoadSprite().

+ Граф вызовов:
+ Граф вызова функции:

◆ LoadSprites()

bool LODFile_Sprites::LoadSprites ( const String pFilename)

См. определение в файле LOD.cpp строка 141

141  {
142  if (!Open(pFilename)) {
143  return false;
144  }
145 
146  return LoadSubIndices("sprites08");
147 }

Перекрестные ссылки LOD::File::LoadSubIndices() и LOD::File::Open().

Используется в MM7_LoadLods().

+ Граф вызовов:
+ Граф вызова функции:

◆ LoadSprite()

int LODFile_Sprites::LoadSprite ( const char *  pContainerName,
unsigned int  uPaletteID 
)

См. определение в файле LOD.cpp строка 149

149  {
150  for (int i = 0; i < uNumLoadedSprites; ++i) {
151  if (pHardwareSprites[i].pName == pContainerName) {
152  return i;
153  }
154  }
155 
156  if (uNumLoadedSprites >= MAX_LOD_SPRITES) return -1;
157  // if not loaded - load from file
158 
159  if (!pHardwareSprites) {
160  pHardwareSprites = new Sprite[MAX_LOD_SPRITES];
161  }
162 
163  FILE *sprite_file = FindContainer(pContainerName, 0);
164  if (!sprite_file) {
165  return -1;
166  }
167 
168  static_assert(sizeof(LODSpriteHeader) == 32, "Wrong type size");
169 
170  LODSprite *header = new LODSprite();
171  LoadSpriteFromFile(header, pContainerName); // this line is not present here in the original.
172  // necessary for Grayface's mouse picking fix
173 
174  // if (uNumLoadedSprites == 879) __debugbreak();
175 
182 
183  HWLTexture *hwl = render->LoadHwlSprite(pContainerName);
184  if (hwl) {
191 
192  delete[] hwl->pPixels;
193  delete hwl;
194  }
195 
197  return uNumLoadedSprites - 1;
198 }

Перекрестные ссылки assets, LOD::File::FindContainer(), AssetsManager::GetSprite(), LOD::File::header, LoadSpriteFromFile(), LOD::File::pContainerName, pHardwareSprites, Sprite::pName, HWLTexture::pPixels, render, Sprite::sprite_header, Sprite::texture, Sprite::uAreaHeight, HWLTexture::uAreaHeigth, HWLTexture::uAreaWidth, Sprite::uAreaWidth, HWLTexture::uAreaX, Sprite::uAreaX, HWLTexture::uAreaY, Sprite::uAreaY, HWLTexture::uBufferHeight, Sprite::uBufferHeight, HWLTexture::uBufferWidth, Sprite::uBufferWidth, uNumLoadedSprites и Sprite::uPaletteID.

Используется в SpriteFrameTable::InitializeSprite().

+ Граф вызовов:
+ Граф вызова функции:

◆ ReleaseLostHardwareSprites()

void LODFile_Sprites::ReleaseLostHardwareSprites ( )

См. определение в файле LOD.cpp строка 200

200 {}

Используется в RenderD3D::HandleLostResources().

+ Граф вызова функции:

◆ ReleaseAll()

void LODFile_Sprites::ReleaseAll ( )

См. определение в файле LOD.cpp строка 202

202 {}

◆ MoveSpritesToVideoMemory()

void LODFile_Sprites::MoveSpritesToVideoMemory ( )

См. определение в файле LOD.cpp строка 204

204 {}

◆ _inlined_sub0()

void LODFile_Sprites::_inlined_sub0 ( )

См. определение в файле LOD.cpp строка 55

Перекрестные ссылки field_ECA0, field_ECA4 и uNumLoadedSprites.

Используется в Engine::SecondaryInitialization().

+ Граф вызова функции:

◆ _inlined_sub1()

void LODFile_Sprites::_inlined_sub1 ( )

См. определение в файле LOD.cpp строка 46

46  {
48 }

Перекрестные ссылки field_ECA0 и uNumLoadedSprites.

Используется в FinalInitialization().

+ Граф вызова функции:

Данные класса

◆ uNumLoadedSprites

unsigned int LODFile_Sprites::uNumLoadedSprites

См. определение в файле LOD.h строка 228

Используется в _inlined_sub0(), _inlined_sub1(), DeleteSomeOtherSprites(), Vis::IsPointInsideD3DBillboard(), LoadSprite() и LODFile_Sprites().

◆ field_ECA0

int LODFile_Sprites::field_ECA0

См. определение в файле LOD.h строка 229

Используется в _inlined_sub0(), _inlined_sub1(), DeleteSomeOtherSprites() и LODFile_Sprites().

◆ field_ECA4

int LODFile_Sprites::field_ECA4

См. определение в файле LOD.h строка 230

Используется в _inlined_sub0() и LODFile_Sprites().

◆ field_ECA8

int LODFile_Sprites::field_ECA8

См. определение в файле LOD.h строка 231

◆ pHardwareSprites

Sprite* LODFile_Sprites::pHardwareSprites

См. определение в файле LOD.h строка 233

Используется в SpriteFrameTable::InitializeSprite(), Vis::IsPointInsideD3DBillboard(), LoadSprite() и LODFile_Sprites().

◆ field_ECB4

int LODFile_Sprites::field_ECB4

См. определение в файле LOD.h строка 234

Используется в LODFile_Sprites().


Объявления и описания членов классов находятся в файлах:
LODFile_Sprites::DeleteSpritesRange
void DeleteSpritesRange(int uStartIndex, int uStopIndex)
Definition: LOD.cpp:306
LODSpriteLine
Definition: LOD.cpp:91
LOD::File::header
struct FileHeader header
Definition: LOD.h:87
HWLTexture::uAreaWidth
int uAreaWidth
Definition: HWLContainer.h:15
Sprite::uBufferHeight
int uBufferHeight
Definition: Sprites.h:32
LODSpriteHeader
Definition: LOD.h:177
Sprite::texture
Texture * texture
Definition: Sprites.h:28
HWLTexture
Definition: HWLContainer.h:9
Sprite
Definition: Sprites.h:10
Sprite::uAreaY
int uAreaY
Definition: Sprites.h:30
HWLTexture::uBufferWidth
int uBufferWidth
Definition: HWLContainer.h:13
Sprite::uBufferWidth
int uBufferWidth
Definition: Sprites.h:31
AssetsManager::GetSprite
Texture * GetSprite(const String &name, unsigned int palette_id, unsigned int lod_sprite_id)
Definition: AssetsManager.cpp:141
LOD::File::FindContainer
FILE * FindContainer(const String &filename, size_t *data_size=nullptr)
Definition: LOD.cpp:851
LODFile_Sprites::LoadSpriteFromFile
int LoadSpriteFromFile(LODSprite *pSpriteHeader, const String &pContainer)
Definition: LOD.cpp:98
LODFile_Sprites::field_ECB4
int field_ECB4
Definition: LOD.h:234
LOD::File::File
File()
Definition: LOD.cpp:739
v1
GLfloat GLfloat v1
Definition: SDL_opengl_glext.h:694
Sprite::uAreaWidth
int uAreaWidth
Definition: Sprites.h:33
LODSprite
Definition: LOD.h:197
Sprite::Release
void Release()
Definition: LOD.cpp:332
LOD::File::LoadSubIndices
bool LoadSubIndices(const String &sFolder)
Definition: LOD.cpp:804
LODFile_Sprites::uNumLoadedSprites
unsigned int uNumLoadedSprites
Definition: LOD.h:228
HWLTexture::uBufferHeight
int uBufferHeight
Definition: HWLContainer.h:14
HWLTexture::pPixels
uint16_t * pPixels
Definition: HWLContainer.h:21
zlib::Uncompress
int Uncompress(void *dest, unsigned int *destLen, const void *source, unsigned int sourceLen)
Definition: ZlibWrapper.cpp:7
uint8_t
unsigned __int8 uint8_t
Definition: SDL_config.h:35
Sprite::sprite_header
struct LODSprite * sprite_header
Definition: Sprites.h:36
LODFile_Sprites::field_ECA8
int field_ECA8
Definition: LOD.h:231
Sprite::uAreaX
int uAreaX
Definition: Sprites.h:29
LOD::File::pContainerName
String pContainerName
Definition: LOD.h:90
v2
GLfloat GLfloat GLfloat v2
Definition: SDL_opengl_glext.h:695
assets
AssetsManager * assets
Definition: AssetsManager.cpp:12
uint
unsigned int uint
Definition: MM7.h:4
LOD::File
Definition: LOD.h:58
Sprite::uPaletteID
int uPaletteID
Definition: Sprites.h:27
LOD::File::Open
bool Open(const String &pFilename)
Definition: LOD.cpp:751
LODFile_Sprites::field_ECA0
int field_ECA0
Definition: LOD.h:229
LODFile_Sprites::pHardwareSprites
Sprite * pHardwareSprites
Definition: LOD.h:233
HWLTexture::uAreaX
int uAreaX
Definition: HWLContainer.h:19
LODFile_Sprites::field_ECA4
int field_ECA4
Definition: LOD.h:230
HWLTexture::uAreaY
int uAreaY
Definition: HWLContainer.h:20
Sprite::pName
String pName
Definition: Sprites.h:26
Sprite::uAreaHeight
int uAreaHeight
Definition: Sprites.h:34
HWLTexture::uAreaHeigth
int uAreaHeigth
Definition: HWLContainer.h:16
render
std::shared_ptr< IRender > render
Definition: RenderOpenGL.cpp:52