Files

60 lines
2.7 KiB
C++

#include "BodyType.h"
namespace LogicalBodyTypes {
BodyType::BodyType(UINT32 cacheSize, Filter* filterP) {
filter = filterP;
hasSurfaces = false;
cache = new SurfaceCache(cacheSize);
animstates.resize(NUMANIMATIONSTATES);
physAnimSurfaces.resize(NUMANIMATIONSURFACETYPES);
for (int i = 0; i < NUMANIMATIONSTATES; i++) {
animstates[i].resize(Layers::Instance().GetCount());
}
for (int i = 0; i < NUMANIMATIONSURFACETYPES; i++) {
physAnimSurfaces[i].resize(Layers::Instance().GetCount());
}
// initialize body type specific layer properties with the layer specific layer properties.
Layers::LayerPropertiesVector::size_type numLayers = Layers::Instance().GetCount();
layerProperties.resize(numLayers);
for (Layers::LayerPropertiesVector::size_type layer = 0; layer < numLayers; layer++) {
layerProperties[layer] = Layers::Instance().GetLayerProperties(layer);
}
}
BodyType::~BodyType(void) {
delete cache;
}
void BodyType::AddSurfaceForAnimState(UINT16 usAnimState, Layers::LayerPropertiesVector::size_type layer, AnimationSurfaceType* animSurfaceType, AnimationSurfaceType* alphaSurfaceType, Filter* filter, PaletteTable* paletteTable) {
STRUCTURE_FILE_REF* pStructFile = SurfaceDB::Instance().GetStructFile(animSurfaceType);
UINT32 idx = cache->AddSurface(animSurfaceType, pStructFile);
UINT32 idxAlpha = 0;
if (alphaSurfaceType != NULL) {
idxAlpha = cache->AddSurface(alphaSurfaceType, pStructFile);
}
animstates[usAnimState][layer].push_back(FilterSurfaceTypePair(filter, FilterSurfaceTypePair::second_type(idx, LogicalSurfaceType(animSurfaceType, alphaSurfaceType, idxAlpha, paletteTable))));
hasSurfaces = true;
}
void BodyType::AddSurfaceForPhysSurface(UINT16 usAnimSurface, Layers::LayerPropertiesVector::size_type layer, AnimationSurfaceType* animSurfaceType, AnimationSurfaceType* alphaSurfaceType, Filter* filter, PaletteTable* paletteTable) {
STRUCTURE_FILE_REF* pStructFile = SurfaceDB::Instance().GetStructFile(animSurfaceType);
UINT32 idx = cache->AddSurface(animSurfaceType, pStructFile);
UINT32 idxAlpha = 0;
if (alphaSurfaceType != NULL) {
idxAlpha = cache->AddSurface(alphaSurfaceType, pStructFile);
}
physAnimSurfaces[usAnimSurface][layer].push_back(FilterSurfaceTypePair(filter, FilterSurfaceTypePair::second_type(idx, LogicalSurfaceType(animSurfaceType, alphaSurfaceType, idxAlpha, paletteTable))));
hasSurfaces = true;
}
void BodyType::SetLayerProperties(Layers::LayerPropertiesVector::size_type index, Layers::LayerProperties properties) {
layerProperties[index] = properties; // TODO range check?
}
const Layers::LayerProperties* BodyType::GetLayerProperties(Layers::LayerPropertiesVector::size_type index) {
return &layerProperties[index]; // TODO range check?
}
}