Skip to content

Commit

Permalink
Gracefully exit if image files are not found.
Browse files Browse the repository at this point in the history
  • Loading branch information
rohit-n committed Mar 13, 2015
1 parent fa874ac commit bae65e0
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 32 deletions.
75 changes: 48 additions & 27 deletions draw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ void Renderer::toggleWireframe()
wireframe = !wireframe;
}

void Renderer::init(int x, int y)
bool Renderer::init(int x, int y)
{
_screenVBO = 0;

Expand Down Expand Up @@ -155,45 +155,65 @@ void Renderer::init(int x, int y)
font2.reset(new Font("./data/fonts/VeraMono.ttf", 16.0f));

resPlayer.reset(new SpriteSheet("./data/sprites/player.png", ENTDIM, false));
generateSheetBuffers(resPlayer.get(), ENTDIM);

resPlayerLeft.reset(new SpriteSheet("./data/sprites/player.png", ENTDIM, true));
generateSheetBuffers(resPlayerLeft.get(), ENTDIM);

resGuardRight.reset(new SpriteSheet("./data/sprites/guard.png", ENTDIM, false));
generateSheetBuffers(resGuardRight.get(), ENTDIM);

resGuardLeft.reset(new SpriteSheet("./data/sprites/guard.png", ENTDIM, true));
generateSheetBuffers(resGuardLeft.get(), ENTDIM);

resEnforcerLeft.reset(new SpriteSheet("./data/sprites/enforcer.png", ENTDIM, true));
generateSheetBuffers(resEnforcerLeft.get(), ENTDIM);

resEnforcerRight.reset(new SpriteSheet("./data/sprites/enforcer.png", ENTDIM, false));
generateSheetBuffers(resEnforcerRight.get(), ENTDIM);

resProfessionalLeft.reset(new SpriteSheet("./data/sprites/professional.png", ENTDIM, true));
generateSheetBuffers(resProfessionalLeft.get(), ENTDIM);

resProfessionalRight.reset(new SpriteSheet("./data/sprites/professional.png", ENTDIM, false));
generateSheetBuffers(resProfessionalRight.get(), ENTDIM);

resSniperLeft.reset(new SpriteSheet("./data/sprites/sniper.png", ENTDIM, true));
generateSheetBuffers(resSniperLeft.get(), ENTDIM);

resSniperRight.reset(new SpriteSheet("./data/sprites/sniper.png", ENTDIM, false));
generateSheetBuffers(resSniperRight.get(), ENTDIM);

resObjects.reset(new SpriteSheet("./data/sprites/objects.png", ENTDIM, false));
generateSheetBuffers(resObjects.get(), ENTDIM);

resLinkables.reset(new SpriteSheet("./data/sprites/linkable.png", ENTDIM, false));
generateSheetBuffers(resLinkables.get(), ENTDIM);

resInterface.reset(new SpriteSheet("./data/sprites/interface.png", 32, false));
generateSheetBuffers(resInterface.get(), 32);

resGlass.reset(new SpriteSheet("./data/sprites/glass.png", 8, false));

if (resPlayer->getTexId() == 0 ||
resPlayerLeft->getTexId() == 0 ||
resGuardRight->getTexId() == 0 ||
resGuardLeft->getTexId() == 0 ||
resEnforcerLeft->getTexId() == 0 ||
resEnforcerRight->getTexId() == 0 ||
resProfessionalLeft->getTexId() == 0 ||
resProfessionalRight->getTexId() == 0 ||
resSniperLeft->getTexId() == 0 ||
resSniperRight->getTexId() == 0 ||
resObjects->getTexId() == 0 ||
resLinkables->getTexId() == 0 ||
resInterface->getTexId() == 0 ||
resGlass->getTexId() == 0)
{
resPlayer.reset();
resPlayerLeft.reset();
resGuardRight.reset();
resGuardLeft.reset();
resEnforcerLeft.reset();
resEnforcerRight.reset();
resProfessionalLeft.reset();
resProfessionalRight.reset();
resSniperLeft.reset();
resSniperRight.reset();
resObjects.reset();
resLinkables.reset();
resInterface.reset();
resGlass.reset();
return false;
}

generateSheetBuffers(resPlayer.get(), ENTDIM);
generateSheetBuffers(resPlayerLeft.get(), ENTDIM);
generateSheetBuffers(resGuardRight.get(), ENTDIM);
generateSheetBuffers(resGuardLeft.get(), ENTDIM);
generateSheetBuffers(resEnforcerLeft.get(), ENTDIM);
generateSheetBuffers(resEnforcerRight.get(), ENTDIM);
generateSheetBuffers(resProfessionalLeft.get(), ENTDIM);
generateSheetBuffers(resProfessionalRight.get(), ENTDIM);
generateSheetBuffers(resSniperLeft.get(), ENTDIM);
generateSheetBuffers(resSniperRight.get(), ENTDIM);
generateSheetBuffers(resObjects.get(), ENTDIM);
generateSheetBuffers(resLinkables.get(), ENTDIM);
generateSheetBuffers(resInterface.get(), 32);
generateSheetBuffers(resGlass.get(), 8);

_mouseOverStrings[MO_CircuitBox] = "A circuit box. Use it to unlock its circuit.";
Expand Down Expand Up @@ -230,6 +250,7 @@ void Renderer::init(int x, int y)
_messageStrings[SM_ObjectivesIncomplete] = "Objectives not completed.";

handleSettingsChange();
return true;
}

void Renderer::setResolution(int x, int y)
Expand Down
7 changes: 5 additions & 2 deletions draw.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class Renderer
public:
Renderer();
~Renderer();
void init(int x, int y);
bool init(int x, int y);
void setResolution(int x, int y);
bool initShaders();
void drawText(float x, float y, const char* text, float red, float green, float blue, float alpha_scale, std::shared_ptr<Font> font);
Expand Down Expand Up @@ -182,7 +182,10 @@ class Renderer
void operator()(SpriteSheet* sheet) const
{
GLuint vbo = sheet->getVertexBuffer();
glDeleteBuffers(sheet->getNumberOfSprites(), sheet->getIndexBuffers());
if (sheet->getNumberOfSprites() > 0)
{
glDeleteBuffers(sheet->getNumberOfSprites(), sheet->getIndexBuffers());
}
glDeleteBuffers(1, &vbo);
delete sheet;
}
Expand Down
11 changes: 10 additions & 1 deletion main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,16 @@ int main(int argc, char **argv)
return 1;
}

renderer.init(winX, winY);
if (!renderer.init(winX, winY))
{
fprintf(stderr, "Error! Some files were not able to be loaded.\n\
Did you download the Clonepoint data files from rohit.itch.io/clonepoint\n\
and place them in the data/ directory?\n\n");
SDL_GL_DeleteContext(context);
SDL_DestroyWindow(screen);
SDL_Quit();
return 1;
}

renderer.setScreenshotIndex(atoi(Locator::getConfigManager()->getValue("screenshot_index").c_str()));

Expand Down
19 changes: 17 additions & 2 deletions sprite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,29 @@ along with Clonepoint. If not, see <http://www.gnu.org/licenses/>.

SpriteSheet::SpriteSheet(const char* filename, int tileDim, bool flip)
{
_numberOfSprites = 0;
_indexBuffers = nullptr;
if (flip)
{
SDL_Surface* surf = loadSurfaceFromImage(filename);
if (!surf)
{
fprintf(stderr, "Fatal: Failed to load %s\n", filename);
_tex = 0;
return;
}
surf = reverseSpriteSheet(surf, tileDim);
_tex = createTextureFromSurface(surf);
SDL_FreeSurface(surf);
}
else
{
_tex = loadTexture(filename);
if (_tex == 0)
{
fprintf(stderr, "Fatal: Failed to load %s\n", filename);
return;
}
}
_tileDim = tileDim;
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &_width);
Expand Down Expand Up @@ -71,8 +84,10 @@ SpriteSheet::~SpriteSheet()
glDeleteTextures(1, &_tex);
_width = 0;
_height = 0;

delete [] _indexBuffers;
if (_indexBuffers)
{
delete [] _indexBuffers;
}
}

GLint SpriteSheet::getWidth()
Expand Down

0 comments on commit bae65e0

Please sign in to comment.