diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index 9056ba8c9..09f8f6cfc 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -5,6 +5,7 @@ #include "GameController.h" #include "GameModel.h" #include "search/SearchController.h" +#include "render/RenderController.h" #include "interface/Point.h" using namespace std; @@ -134,7 +135,8 @@ void GameController::OpenDisplayOptions() void GameController::OpenRenderOptions() { - //TODO: Implement + RenderController * renderController = new RenderController(gameModel->GetRenderer()); + ui::Engine::Ref().ShowWindow(renderController->GetView()); } void GameController::OpenSaveWindow() diff --git a/src/render/RenderController.cpp b/src/render/RenderController.cpp new file mode 100644 index 000000000..6f7f72e11 --- /dev/null +++ b/src/render/RenderController.cpp @@ -0,0 +1,24 @@ +/* + * RenderController.cpp + * + * Created on: Jan 23, 2012 + * Author: Simon + */ + +#include "RenderController.h" + +RenderController::RenderController(Renderer * ren) { + renderView = new RenderView(); + renderModel = new RenderModel(); + + renderView->AttachController(this); + renderModel->AddObserver(renderView); + + renderModel->SetRenderer(ren); +} + +RenderController::~RenderController() { + delete renderView; + delete renderModel; +} + diff --git a/src/render/RenderController.h b/src/render/RenderController.h new file mode 100644 index 000000000..1c574c130 --- /dev/null +++ b/src/render/RenderController.h @@ -0,0 +1,26 @@ +/* + * RenderController.h + * + * Created on: Jan 23, 2012 + * Author: Simon + */ + +#ifndef RENDERCONTROLLER_H_ +#define RENDERCONTROLLER_H_ + +#include "RenderView.h" +#include "RenderModel.h" +#include "Renderer.h" + +class RenderView; +class RenderModel; +class RenderController { + RenderView * renderView; + RenderModel * renderModel; +public: + RenderController(Renderer * ren); + RenderView * GetView() { return renderView; } + virtual ~RenderController(); +}; + +#endif /* RENDERCONTROLLER_H_ */ diff --git a/src/render/RenderModel.cpp b/src/render/RenderModel.cpp new file mode 100644 index 000000000..6bd9bdd40 --- /dev/null +++ b/src/render/RenderModel.cpp @@ -0,0 +1,42 @@ +/* + * RenderModel.cpp + * + * Created on: Jan 23, 2012 + * Author: Simon + */ + +#include "RenderModel.h" + +RenderModel::RenderModel() { + // TODO Auto-generated constructor stub + +} + +void RenderModel::AddObserver(RenderView * observer) +{ + observers.push_back(observer); + observer->NotifyRendererChanged(this); +} + +void RenderModel::SetRenderer(Renderer * ren) +{ + renderer = ren; + notifyRendererChanged(); +} + +Renderer * RenderModel::GetRenderer() +{ + return renderer; +} + +void RenderModel::notifyRendererChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyRendererChanged(this); + } +} + +RenderModel::~RenderModel() { + // TODO Auto-generated destructor stub +} diff --git a/src/render/RenderModel.h b/src/render/RenderModel.h new file mode 100644 index 000000000..b4f9ee8e2 --- /dev/null +++ b/src/render/RenderModel.h @@ -0,0 +1,30 @@ +/* + * RenderModel.h + * + * Created on: Jan 23, 2012 + * Author: Simon + */ + +#ifndef RENDERMODEL_H_ +#define RENDERMODEL_H_ + +#include +#include "RenderView.h" +#include "Renderer.h" + +using namespace std; + +class RenderView; +class RenderModel { + vector observers; + Renderer * renderer; + void notifyRendererChanged(); +public: + RenderModel(); + Renderer * GetRenderer(); + void AddObserver(RenderView * observer); + void SetRenderer(Renderer * ren); + virtual ~RenderModel(); +}; + +#endif /* RENDERMODEL_H_ */ diff --git a/src/render/RenderView.cpp b/src/render/RenderView.cpp new file mode 100644 index 000000000..93c0dec05 --- /dev/null +++ b/src/render/RenderView.cpp @@ -0,0 +1,38 @@ +/* + * RenderView.cpp + * + * Created on: Jan 23, 2012 + * Author: Simon + */ + +#include "RenderView.h" +#include "Graphics.h" + +RenderView::RenderView(): + ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)), + ren(NULL) +{ + // TODO Auto-generated constructor stub + +} + +void RenderView::NotifyRendererChanged(RenderModel * sender) +{ + ren = sender->GetRenderer(); +} + +void RenderView::OnDraw() +{ + Graphics * g = ui::Engine::Ref().g; + g->clearrect(0, 0, XRES, YRES+MENUSIZE); + g->draw_line(XRES-1, 0, XRES-1, YRES+MENUSIZE, 255, 255, 255, XRES+BARSIZE); + if(ren) + { + ren->render_parts(); + ren->render_fire(); + } +} + +RenderView::~RenderView() { + // TODO Auto-generated destructor stub +} diff --git a/src/render/RenderView.h b/src/render/RenderView.h new file mode 100644 index 000000000..37f023a5b --- /dev/null +++ b/src/render/RenderView.h @@ -0,0 +1,29 @@ +/* + * RenderView.h + * + * Created on: Jan 23, 2012 + * Author: Simon + */ + +#ifndef RENDERVIEW_H_ +#define RENDERVIEW_H_ + +#include "interface/Window.h" +#include "RenderController.h" +#include "RenderModel.h" +#include "Renderer.h" + +class RenderController; +class RenderModel; +class RenderView: public ui::Window { + RenderController * c; + Renderer * ren; +public: + RenderView(); + void NotifyRendererChanged(RenderModel * sender); + void AttachController(RenderController * c_) { c = c_; } + virtual void OnDraw(); + virtual ~RenderView(); +}; + +#endif /* RENDERVIEW_H_ */