| @@ -40,8 +40,9 @@ Layer::~Layer() | |||||
| free(data); | free(data); | ||||
| } | } | ||||
| void Layer::Render(Scene *scene, int x, int y, int z) | |||||
| void Layer::Render(int x, int y, int z) | |||||
| { | { | ||||
| Scene *scene = Scene::GetDefault(); | |||||
| for (int j = 0; j < height; j++) | for (int j = 0; j < height; j++) | ||||
| for (int i = 0; i < width; i++) | for (int i = 0; i < width; i++) | ||||
| if (data[j * width + i]) | if (data[j * width + i]) | ||||
| @@ -19,8 +19,6 @@ | |||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #include "scene.h" | |||||
| class Layer | class Layer | ||||
| { | { | ||||
| public: | public: | ||||
| @@ -29,7 +27,7 @@ public: | |||||
| int GetZ(); | int GetZ(); | ||||
| void Render(Scene *scene, int x, int y, int z); | |||||
| void Render(int x, int y, int z); | |||||
| private: | private: | ||||
| int width, height, altitude, orientation; | int width, height, altitude, orientation; | ||||
| @@ -160,10 +160,10 @@ Map::~Map() | |||||
| delete data; | delete data; | ||||
| } | } | ||||
| void Map::Render(Scene *scene, int x, int y, int z) | |||||
| void Map::Render(int x, int y, int z) | |||||
| { | { | ||||
| for (int i = 0; i < data->nlayers; i++) | for (int i = 0; i < data->nlayers; i++) | ||||
| data->layers[i]->Render(scene, x, y, z); | |||||
| data->layers[i]->Render(x, y, z); | |||||
| } | } | ||||
| int Map::GetWidth() | int Map::GetWidth() | ||||
| @@ -18,8 +18,6 @@ | |||||
| #if !defined __DH_MAP_H__ | #if !defined __DH_MAP_H__ | ||||
| #define __DH_MAP_H__ | #define __DH_MAP_H__ | ||||
| #include "scene.h" | |||||
| class MapData; | class MapData; | ||||
| class Map | class Map | ||||
| @@ -28,7 +26,7 @@ public: | |||||
| Map(char const *path); | Map(char const *path); | ||||
| ~Map(); | ~Map(); | ||||
| void Render(Scene *scene, int x, int y, int z); | |||||
| void Render(int x, int y, int z); | |||||
| int GetWidth(); | int GetWidth(); | ||||
| int GetHeight(); | int GetHeight(); | ||||
| @@ -54,8 +54,12 @@ private: | |||||
| Tile *tiles; | Tile *tiles; | ||||
| int ntiles; | int ntiles; | ||||
| float angle; | float angle; | ||||
| static Scene *scene; | |||||
| }; | }; | ||||
| Scene *SceneData::scene = NULL; | |||||
| /* | /* | ||||
| * Public Scene class | * Public Scene class | ||||
| */ | */ | ||||
| @@ -73,6 +77,20 @@ Scene::~Scene() | |||||
| delete data; | delete data; | ||||
| } | } | ||||
| Scene *Scene::GetDefault() | |||||
| { | |||||
| if (!SceneData::scene) | |||||
| SceneData::scene = new Scene(0.0f); | |||||
| return SceneData::scene; | |||||
| } | |||||
| void Scene::Reset() | |||||
| { | |||||
| if (SceneData::scene) | |||||
| delete SceneData::scene; | |||||
| SceneData::scene = NULL; | |||||
| } | |||||
| void Scene::AddTile(uint32_t code, int x, int y, int z, int o) | void Scene::AddTile(uint32_t code, int x, int y, int z, int o) | ||||
| { | { | ||||
| if ((data->ntiles % 1024) == 0) | if ((data->ntiles % 1024) == 0) | ||||
| @@ -26,6 +26,9 @@ public: | |||||
| Scene(float angle); | Scene(float angle); | ||||
| ~Scene(); | ~Scene(); | ||||
| static Scene *GetDefault(); | |||||
| static void Reset(); | |||||
| void AddTile(uint32_t code, int x, int y, int z, int o); | void AddTile(uint32_t code, int x, int y, int z, int o); | ||||
| void Render(); | void Render(); | ||||
| @@ -224,12 +224,15 @@ void Ticker::TickDraw() | |||||
| { | { | ||||
| Profiler::Start(Profiler::STAT_TICK_DRAW); | Profiler::Start(Profiler::STAT_TICK_DRAW); | ||||
| Scene::GetDefault(); | |||||
| /* Tick objects for the draw loop */ | /* Tick objects for the draw loop */ | ||||
| for (int i = Entity::DRAWGROUP_BEGIN; i < Entity::DRAWGROUP_END; i++) | for (int i = Entity::DRAWGROUP_BEGIN; i < Entity::DRAWGROUP_END; i++) | ||||
| { | { | ||||
| switch (i) | switch (i) | ||||
| { | { | ||||
| case Entity::DRAWGROUP_HUD: | case Entity::DRAWGROUP_HUD: | ||||
| Scene::GetDefault()->Render(); | |||||
| Video::SetDepth(false); | Video::SetDepth(false); | ||||
| break; | break; | ||||
| default: | default: | ||||
| @@ -254,6 +257,8 @@ void Ticker::TickDraw() | |||||
| } | } | ||||
| } | } | ||||
| Scene::Reset(); | |||||
| Profiler::Stop(Profiler::STAT_TICK_DRAW); | Profiler::Stop(Profiler::STAT_TICK_DRAW); | ||||
| Profiler::Start(Profiler::STAT_TICK_BLIT); | Profiler::Start(Profiler::STAT_TICK_BLIT); | ||||
| } | } | ||||