diff --git a/Data/Map/Ugly.tmx b/Data/Map/Ugly.tmx index c7240e3..dce9026 100644 --- a/Data/Map/Ugly.tmx +++ b/Data/Map/Ugly.tmx @@ -28,47 +28,28 @@ - - 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 - - - - - - - - - - - - - - diff --git a/src/Level/Level.cpp b/src/Level/Level.cpp index 123da3a..2c4ccb9 100644 --- a/src/Level/Level.cpp +++ b/src/Level/Level.cpp @@ -28,11 +28,12 @@ Level::Level(Game* game) { _tileHeight = 0; _bgm = NULL; _collisions = NULL; + _middleLayer = -1; } Level::~Level() { - for(std::list::iterator i = _layers.begin(); i != _layers.end(); ++i) { - delete (*i); + for(int i = 0; i < _layers.size(); i++) { + delete _layers.at(i); } _layers.clear(); @@ -41,8 +42,8 @@ Level::~Level() { } _tilesets.clear(); - for(std::list::iterator i = _npcs.begin(); i != _npcs.end(); ++i) { - delete (*i); + for(int i = 0; i < _npcs.size(); i++) { + delete _npcs.at(i); } _npcs.clear(); @@ -52,8 +53,8 @@ Level::~Level() { _warps.clear(); if(_collisions) { - delete[] _collisions; - _collisions = NULL; + delete[] _collisions; + _collisions = NULL; } if(_bgm) { @@ -106,6 +107,9 @@ bool Level::Load(const std::string& filename) { } continue; } + else if(!strcasecmp(tmxLayer->GetName().c_str(), "middle")) { + _middleLayer = i; + } Layer* layer = new Layer( tmxLayer->GetWidth(), tmxLayer->GetHeight(), @@ -132,6 +136,10 @@ bool Level::Load(const std::string& filename) { _layers.push_back(layer); } + if(_middleLayer == -1) { + _middleLayer = int(std::floor(float(_layers.size()) / 2.0f)); // <-- nasty + } + for(int i = 0; i < map.GetNumObjectGroups(); i++) { const Tmx::ObjectGroup* tmxGroup = map.GetObjectGroup(i); for(int j = 0; j < tmxGroup->GetNumObjects(); j++) { @@ -171,20 +179,33 @@ void Level::PlayBGM() { } void Level::Update(float dt) { - for(std::list::iterator i = _layers.begin(); i != _layers.end(); ++i) { - (*i)->Update(dt); + for(int i = 0; i < _layers.size(); i++) { + _layers.at(i)->Update(dt); } - for(std::list::iterator i = _npcs.begin(); i != _npcs.end(); ++i) { - (*i)->Update(dt); + for(int i = 0; i < _npcs.size(); i++) { + _npcs.at(i)->Update(dt); } } -void Level::Draw(int xOffset, int yOffset) { - for(std::list::iterator i = _layers.begin(); i != _layers.end(); ++i) { - (*i)->Draw(xOffset, yOffset); +void Level::DrawBackground(int xOffset, int yOffset, float playerY) { + for(int i = 0; i < (_middleLayer + 1); i++) { + _layers.at(i)->Draw(xOffset, yOffset); } - for(std::list::iterator i = _npcs.begin(); i != _npcs.end(); ++i) { - (*i)->Render(); + for(int i = 0; i < _npcs.size(); i++) { + NPC* npc = _npcs.at(i); + if(npc->GetY() <= playerY) + npc->Render(); + } +} + +void Level::DrawForeground(int xOffset, int yOffset, float playerY) { + for(int i = (_middleLayer + 1); i < _layers.size(); i++) { + _layers.at(i)->Draw(xOffset, yOffset); + } + for(int i = 0; i < _npcs.size(); i++) { + NPC* npc = _npcs.at(i); + if(npc->GetY() > playerY) + npc->Render(); } } diff --git a/src/Level/Level.h b/src/Level/Level.h index 7e6da0a..1ada89d 100644 --- a/src/Level/Level.h +++ b/src/Level/Level.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include class Game; @@ -20,7 +21,8 @@ public: void PlayBGM(void); void Update(float dt); - void Draw(int xOffset, int yOffset); + void DrawBackground(int xOffset, int yOffset, float playerY); + void DrawForeground(int xOffset, int yOffset, float playerY); Game* GetGame() { return _game; } @@ -38,10 +40,11 @@ private: int _height; int _tileWidth; int _tileHeight; - std::list _layers; + std::vector _layers; std::list _tilesets; - std::list _npcs; + std::vector _npcs; std::list _warps; Music* _bgm; bool* _collisions; + int _middleLayer; }; diff --git a/src/Main/Game.cpp b/src/Main/Game.cpp index 06c92fc..012b51b 100644 --- a/src/Main/Game.cpp +++ b/src/Main/Game.cpp @@ -40,15 +40,9 @@ Game::~Game(void) { } bool Game::Init(void) { - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GREATER, 0.1f); - // Return success. return true; } @@ -58,7 +52,7 @@ void Game::Prepare(float dt) { } void Game::Render(void) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT); if(_inTitleScreen) { RenderTitle(); } else { @@ -165,12 +159,6 @@ void Game::RenderTitle(void) { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_ALPHA_TEST); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - _titleScreen->Render(); } @@ -209,8 +197,9 @@ void Game::RenderGame(void) { } // Render our shit.. - _level->Draw(xOffset, yOffset); + _level->DrawBackground(xOffset, yOffset, _player->GetY()); _player->Render(); + _level->DrawForeground(xOffset, yOffset, _player->GetY()); _testFont->SetColor(0.0f, 1.0f, 1.0f, 1.0f); _testFont->RenderText( _player->GetX() - 5, @@ -221,14 +210,11 @@ void Game::RenderGame(void) { _player->GetY() - _testFont->GetLineSkip() - 20, ""); - glLoadIdentity(); - - glDisable(GL_DEPTH_TEST); - glDisable(GL_ALPHA_TEST); RenderHUD(); } void Game::RenderHUD(void) { + glLoadIdentity(); if(_inGameMenuShown) { _inGameMenu->Render(); } diff --git a/src/Main/main.cpp b/src/Main/main.cpp index 3a01324..90fbac7 100644 --- a/src/Main/main.cpp +++ b/src/Main/main.cpp @@ -56,7 +56,6 @@ int main(int argc, char** argv) { SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); flags = SDL_OPENGL | SDL_HWSURFACE | SDL_RESIZABLE;