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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
+
+ H4sIAAAAAAAAC+2ZwQ2DMBAET1AM6SAtQAWQCkBK//+YR5QfnMwZr6N5zBOzw9o6IXdm1gkzJxYHtXOesSa2xLNxD28vtfPh0abHfk6OzkjtfFGd1M6GR77Hu897f+5z9KENHlrgoQUeWpT2iJhznjXoQws8tMBDCzx+RP0LXVmHPrTAQws8tMBDi1Y8zmZkKY+oGf9vfeBhNgnki/B4NOTiuUsv6XLH/ceXl8D3jvDY99cozuDwAABQ5wMVAhDqECcAAA==
-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
+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
-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
+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
-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
+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
-
- eJztl8ESwyAIRJP//+leemA6oIC7BhvejIemlV0QNb2upir3d2TnZeYyyHi5lYHWYsaWc5ha2TpFNFZ0Inn86jCY5SGf7exbK8bMm/xs/darZ3lA1yGSR0ZzpI/cvzvy8PiIxNR8ovaaxxsrDxSM+LP9dSnfIzQ1ndWY6L70ajLy0OqP0rHOCkadGHW3YiPvHQZe/dH6R+Iw8Xiovh5VPEiifrS9m723VkF4qNDj/5AHsi+eXgvpRT47ich6sOu9Yz13vEecmAdDI3IXN03TNE3zHqz3z9GoSOa/cUVOywPVJ5m5qJ5k9XamBitarF5YzaPK+RLVP+n8a5rmnXwA7bUBUA==
+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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;