Skip to content

Commit

Permalink
Refactor|Resources: Moved sprites to ResourceSystem
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Nov 19, 2013
1 parent 12441fc commit e32f4be
Show file tree
Hide file tree
Showing 13 changed files with 339 additions and 370 deletions.
23 changes: 23 additions & 0 deletions doomsday/client/include/resource/resourcesystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
# include "Fonts"
#endif
#include "Materials"
#include "resource/sprites.h"
#include "Textures"
#include <de/Error>
#include <de/String>
Expand Down Expand Up @@ -64,6 +65,7 @@ class ResourceSystem : public de::System
/// The referenced color palette could not be found. @ingroup errors
DENG2_ERROR(MissingColorPaletteError);

typedef QList<Sprite *> SpriteSet;
public:
/**
* Construct a new resource system, configuring all resource classes and
Expand Down Expand Up @@ -98,6 +100,27 @@ class ResourceSystem : public de::System
*/
de::Materials &materials();

/**
* Builds the sprite rotation matrixes to account for horizontally flipped
* sprites. Will report an error if the lumps are inconsistant.
*
* Sprite lump names are 4 characters for the actor, a letter for the frame,
* and a number for the rotation, A sprite that is flippable will have an
* additional letter/number appended. The rotation character can be 0 to
* signify no rotations.
*/
void initSprites();

void clearAllSprites();

int spriteCount();

Sprite *spritePtr(int spriteId, int frame);

Sprite &sprite(int spriteId, int frame);

SpriteSet &spriteSet(int spriteId);

/**
* Provides access to the Textures collection.
*/
Expand Down
14 changes: 0 additions & 14 deletions doomsday/client/include/resource/sprites.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,18 +101,4 @@ class Sprite
#endif
};

typedef QList<Sprite *> SpriteSet;

void R_InitSprites();

void R_ShutdownSprites();

int R_SpriteCount();

Sprite *R_SpritePtr(int spriteId, int frame);

Sprite &R_Sprite(int spriteId, int frame);

SpriteSet &R_SpriteSet(int spriteId);

#endif // DENG_RESOURCE_SPRITES_H
4 changes: 2 additions & 2 deletions doomsday/client/src/dd_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1139,7 +1139,7 @@ static int DD_ActivateGameWorker(void *parameters)
if(p->initiatedBusyMode)
Con_SetProgress(130);

R_InitSprites(); // Fully initialize sprites.
App_ResourceSystem().initSprites(); // Fully initialize sprites.
Models_Init();

Def_PostInit();
Expand Down Expand Up @@ -1975,7 +1975,7 @@ boolean DD_Init(void)

Def_Read();

R_InitSprites();
App_ResourceSystem().initSprites();
Models_Init();

Def_PostInit();
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/api_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ DENG_EXTERN_C boolean R_GetSpriteInfo(int spriteId, int frame, spriteinfo_t *inf

de::zapPtr(info);

Sprite *sprite = R_SpritePtr(spriteId, frame);
Sprite *sprite = App_ResourceSystem().spritePtr(spriteId, frame);
if(!sprite)
{
LOG_WARNING("Invalid sprite id (%i) and/or frame index (%i).")
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/billboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ static void setupPSpriteParams(rendpspriteparams_t *params, vispsprite_t *spr)
int const frameIdx = psp->statePtr->frame;
float const offScaleY = weaponOffsetScaleY / 1000.0f;

Sprite const *sprite = &R_Sprite(spriteIdx, frameIdx);
Sprite const *sprite = &App_ResourceSystem().sprite(spriteIdx, frameIdx);

boolean flip = sprite->_flip[0];

Expand Down
9 changes: 4 additions & 5 deletions doomsday/client/src/render/r_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,7 @@ void R_Update()
Def_Read();

R_UpdateRawTexs();
R_InitSprites(); // Fully reinitialize sprites.
App_ResourceSystem().initSprites(); // Fully reinitialize sprites.
Models_Init(); // Defs might've changed.

R_UpdateTranslationTables();
Expand All @@ -580,7 +580,6 @@ void R_Update()

void R_Shutdown()
{
R_ShutdownSprites();
Models_Shutdown();
R_ShutdownSvgs();
#ifdef __CLIENT__
Expand Down Expand Up @@ -1558,7 +1557,7 @@ static void cacheSpritesForState(int stateIdx, MaterialVariantSpec const &spec)
state_t *state = toState(stateIdx);
DENG2_ASSERT(state != 0);

SpriteSet const &sprites = R_SpriteSet(state->sprite);
ResourceSystem::SpriteSet const &sprites = App_ResourceSystem().spriteSet(state->sprite);
foreach(Sprite *sprite, sprites)
for(int i = 0; i < Sprite::max_angles; ++i)
{
Expand Down Expand Up @@ -1637,7 +1636,7 @@ void Rend_CacheForMap()
{
MaterialVariantSpec const &spec = Rend_SpriteMaterialSpec();

for(int i = 0; i < R_SpriteCount(); ++i)
for(int i = 0; i < App_ResourceSystem().spriteCount(); ++i)
{
if(map.thinkers().iterate(reinterpret_cast<thinkfunc_t>(gx.MobjThinker),
0x1/*mobjs are public*/,
Expand All @@ -1646,7 +1645,7 @@ void Rend_CacheForMap()
// This sprite is used by some state of at least one mobj.

// Precache all angles for all frames.
SpriteSet const &sprites = R_SpriteSet(i);
ResourceSystem::SpriteSet const &sprites = App_ResourceSystem().spriteSet(i);
foreach(Sprite *sprite, sprites)
for(int k = 0; k < Sprite::max_angles; ++k)
{
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/r_things.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ void R_ProjectSprite(mobj_t *mo)
// ...in an invalid state?
if(!mo->state || mo->state == states) return;
// ...no sprite frame is defined?
Sprite *sprite = R_SpritePtr(mo->sprite, mo->frame);
Sprite *sprite = App_ResourceSystem().spritePtr(mo->sprite, mo->frame);
if(!sprite) return;
// ...fully transparent?
float const alpha = Mobj_Alpha(mo);
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/render/rend_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2669,7 +2669,7 @@ static int projectSpriteWorker(mobj_t &mo, void * /*context*/)

if(cluster.visCeiling().surface().hasSkyMaskedMaterial())
{
Sprite *sprite = R_SpritePtr(mo.sprite, mo.frame);
Sprite *sprite = App_ResourceSystem().spritePtr(mo.sprite, mo.frame);
if(Material *material = sprite->material())
{
if(!(mo.dPlayer && (mo.dPlayer->flags & DDPF_CAMERA))
Expand Down
2 changes: 1 addition & 1 deletion doomsday/client/src/resource/models.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -948,7 +948,7 @@ static void scaleModel(modeldef_t &mf, float destHeight, float offset)

static void scaleModelToSprite(modeldef_t &mf, int spriteIdx, int frameIdx)
{
Sprite *sprite = R_SpritePtr(spriteIdx, frameIdx);
Sprite *sprite = App_ResourceSystem().spritePtr(spriteIdx, frameIdx);
if(!sprite) return;

MaterialSnapshot const &ms = sprite->_mats[0]->prepare(Rend_SpriteMaterialSpec());
Expand Down
Loading

0 comments on commit e32f4be

Please sign in to comment.