Simulation options

This commit is contained in:
Simon Robertshaw 2012-04-15 22:16:57 +01:00
parent 900e23128a
commit a0506495ad
9 changed files with 292 additions and 13 deletions

View File

@ -59,6 +59,17 @@ public:
}
};
class GameController::OptionsCallback: public ControllerCallback
{
GameController * cc;
public:
OptionsCallback(GameController * cc_) { cc = cc_; }
virtual void ControllerExit()
{
//cc->gameModel->SetUser(cc->loginWindow->GetUser());
}
};
class GameController::SSaveCallback: public ControllerCallback
{
GameController * cc;
@ -108,7 +119,8 @@ GameController::GameController():
loginWindow(NULL),
ssave(NULL),
console(NULL),
tagsWindow(NULL)
tagsWindow(NULL),
options(NULL)
{
gameView = new GameView();
gameModel = new GameModel();
@ -484,9 +496,11 @@ void GameController::OpenStamps()
ui::Engine::Ref().ShowWindow(stamps->GetView());
}
void GameController::OpenDisplayOptions()
void GameController::OpenOptions()
{
//TODO: Implement
options = new OptionsController(gameModel->GetSimulation(), new OptionsCallback(this));
ui::Engine::Ref().ShowWindow(options->GetView());
}
void GameController::ShowConsole()

View File

@ -15,6 +15,7 @@
#include "stamps/StampsController.h"
//#include "cat/TPTScriptInterface.h"
#include "cat/LuaScriptInterface.h"
#include "options/OptionsController.h"
#include "Menu.h"
using namespace std;
@ -36,6 +37,7 @@ private:
ConsoleController * console;
TagsController * tagsWindow;
StampsController * stamps;
OptionsController * options;
CommandInterface * commandInterface;
public:
class LoginCallback;
@ -44,6 +46,7 @@ public:
class SSaveCallback;
class TagsCallback;
class StampsCallback;
class OptionsCallback;
GameController();
~GameController();
GameView * GetView();
@ -77,7 +80,7 @@ public:
void OpenSearch();
void OpenLogin();
void OpenTags();
void OpenDisplayOptions();
void OpenOptions();
void OpenRenderOptions();
void OpenSaveWindow();
void OpenStamps();

View File

@ -169,7 +169,7 @@ GameView::GameView():
SimulationOptionAction(GameView * _v) { v = _v; }
void ActionCallback(ui::Button * sender)
{
v->c->OpenDisplayOptions();
v->c->OpenOptions();
}
};
simulationOptionButton = new ui::Button(ui::Point(Size.X-54, Size.Y-18), ui::Point(16, 16));

View File

@ -7,12 +7,60 @@
#include "OptionsController.h"
OptionsController::OptionsController() {
// TODO Auto-generated constructor stub
OptionsController::OptionsController(Simulation * sim, ControllerCallback * callback_):
callback(callback_),
HasExited(false)
{
view = new OptionsView();
model = new OptionsModel(sim);
model->AddObserver(view);
view->AttachController(this);
}
void OptionsController::SetHeatSimulation(bool state)
{
model->SetHeatSimulation(state);
}
void OptionsController::SetAmbientHeatSimulation(bool state)
{
model->SetAmbientHeatSimulation(state);
}
void OptionsController::SetNewtonianGravity(bool state)
{
model->SetNewtonianGravity(state);
}
void OptionsController::SetWaterEqualisation(bool state)
{
model->SetWaterEqualisation(state);
}
OptionsView * OptionsController::GetView()
{
return view;
}
void OptionsController::Exit()
{
if(ui::Engine::Ref().GetWindow() == view)
{
ui::Engine::Ref().CloseWindow();
}
if(callback)
callback->ControllerExit();
HasExited = true;
}
OptionsController::~OptionsController() {
// TODO Auto-generated destructor stub
if(ui::Engine::Ref().GetWindow() == view)
{
ui::Engine::Ref().CloseWindow();
}
delete model;
}

View File

@ -8,9 +8,26 @@
#ifndef OPTIONSCONTROLLER_H_
#define OPTIONSCONTROLLER_H_
#include "Controller.h"
#include "simulation/Simulation.h"
#include "OptionsView.h"
#include "OptionsModel.h"
class OptionsModel;
class OptionsView;
class OptionsController {
OptionsView * view;
OptionsModel * model;
ControllerCallback * callback;
public:
OptionsController();
bool HasExited;
OptionsController(Simulation * sim, ControllerCallback * callback_);
void SetHeatSimulation(bool state);
void SetAmbientHeatSimulation(bool state);
void SetNewtonianGravity(bool state);
void SetWaterEqualisation(bool state);
void Exit();
OptionsView * GetView();
virtual ~OptionsController();
};

View File

@ -7,9 +7,66 @@
#include "OptionsModel.h"
OptionsModel::OptionsModel() {
// TODO Auto-generated constructor stub
OptionsModel::OptionsModel(Simulation * sim_) {
sim = sim_;
}
void OptionsModel::AddObserver(OptionsView* view)
{
observers.push_back(view);
view->NotifySettingsChanged(this);
}
bool OptionsModel::GetHeatSimulation()
{
return sim->legacy_enable?false:true;
}
void OptionsModel::SetHeatSimulation(bool state)
{
sim->legacy_enable = state?0:1;
notifySettingsChanged();
}
bool OptionsModel::GetAmbientHeatSimulation()
{
return sim->aheat_enable?true:false;
}
void OptionsModel::SetAmbientHeatSimulation(bool state)
{
sim->aheat_enable = state?1:0;
notifySettingsChanged();
}
bool OptionsModel::GetNewtonianGravity()
{
return false;
//sim->
}
void OptionsModel::SetNewtonianGravity(bool state)
{
notifySettingsChanged();
}
bool OptionsModel::GetWaterEqualisation()
{
return sim->water_equal_test?true:false;
}
void OptionsModel::SetWaterEqualisation(bool state)
{
sim->water_equal_test = state?1:0;
notifySettingsChanged();
}
void OptionsModel::notifySettingsChanged()
{
for(int i = 0; i < observers.size(); i++)
{
observers[i]->NotifySettingsChanged(this);
}
}
OptionsModel::~OptionsModel() {

View File

@ -7,10 +7,27 @@
#ifndef OPTIONSMODEL_H_
#define OPTIONSMODEL_H_
#include <vector>
#include "OptionsView.h"
#include "simulation/Simulation.h"
class Simulation;
class OptionsView;
class OptionsModel {
Simulation * sim;
std::vector<OptionsView*> observers;
void notifySettingsChanged();
public:
OptionsModel();
OptionsModel(Simulation * sim_);
void AddObserver(OptionsView* view);
bool GetHeatSimulation();
void SetHeatSimulation(bool state);
bool GetAmbientHeatSimulation();
void SetAmbientHeatSimulation(bool state);
bool GetNewtonianGravity();
void SetNewtonianGravity(bool state);
bool GetWaterEqualisation();
void SetWaterEqualisation(bool state);
virtual ~OptionsModel();
};

View File

@ -6,13 +6,123 @@
*/
#include "OptionsView.h"
#include "interface/Button.h"
#include "interface/Label.h"
OptionsView::OptionsView():
ui::Window(ui::Point(-1, -1), ui::Point(300, 300)){
// TODO Auto-generated constructor stub
ui::Label * tempLabel = new ui::Label(ui::Point(3, 3), ui::Point(Size.X-6, 14), "Simulation Options");
tempLabel->SetTextColour(ui::Colour(255, 220, 0));
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
class HeatSimulationAction: public ui::CheckboxAction
{
OptionsView * v;
public:
HeatSimulationAction(OptionsView * v_){ v = v_; }
virtual void ActionCallback(ui::Checkbox * sender){ v->c->SetHeatSimulation(sender->GetChecked()); }
};
heatSimulation = new ui::Checkbox(ui::Point(3, 23), ui::Point(Size.X-6, 16), "Heat simulation \bgIntroduced in version 34");
heatSimulation->SetActionCallback(new HeatSimulationAction(this));
AddComponent(heatSimulation);
tempLabel = new ui::Label(ui::Point(24, heatSimulation->Position.Y+14), ui::Point(Size.X-28, 16), "\bgCan cause odd behaviour with very old saves");
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
class AmbientHeatSimulationAction: public ui::CheckboxAction
{
OptionsView * v;
public:
AmbientHeatSimulationAction(OptionsView * v_){ v = v_; }
virtual void ActionCallback(ui::Checkbox * sender){ v->c->SetAmbientHeatSimulation(sender->GetChecked()); }
};
ambientHeatSimulation = new ui::Checkbox(ui::Point(3, 53), ui::Point(Size.X-6, 16), "Ambient heat simulation \bgIntroduced in version 50");
ambientHeatSimulation->SetActionCallback(new AmbientHeatSimulationAction(this));
AddComponent(ambientHeatSimulation);
tempLabel = new ui::Label(ui::Point(24, ambientHeatSimulation->Position.Y+14), ui::Point(Size.X-28, 16), "\bgCan cause odd behaviour with old saves");
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
class NewtonianGravityAction: public ui::CheckboxAction
{
OptionsView * v;
public:
NewtonianGravityAction(OptionsView * v_){ v = v_; }
virtual void ActionCallback(ui::Checkbox * sender){ v->c->SetNewtonianGravity(sender->GetChecked()); }
};
newtonianGravity = new ui::Checkbox(ui::Point(3, 83), ui::Point(Size.X-6, 16), "Newtonian gravity \bgIntroduced in version 48");
newtonianGravity->SetActionCallback(new NewtonianGravityAction(this));
AddComponent(newtonianGravity);
tempLabel = new ui::Label(ui::Point(24, newtonianGravity->Position.Y+14), ui::Point(Size.X-28, 16), "\bgMay cause poor performance on older computers");
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
class WaterEqualisationAction: public ui::CheckboxAction
{
OptionsView * v;
public:
WaterEqualisationAction(OptionsView * v_){ v = v_; }
virtual void ActionCallback(ui::Checkbox * sender){ v->c->SetWaterEqualisation(sender->GetChecked()); }
};
waterEqualisation = new ui::Checkbox(ui::Point(3, 113), ui::Point(Size.X-6, 16), "Water equalisation \bgIntroduced in version 61");
waterEqualisation->SetActionCallback(new WaterEqualisationAction(this));
AddComponent(waterEqualisation);
tempLabel = new ui::Label(ui::Point(24, waterEqualisation->Position.Y+14), ui::Point(Size.X-28, 16), "\bgMay cause poor performance with a lot of water");
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
tempLabel = new ui::Label(ui::Point(3, 143), ui::Point(Size.X-24, 16), "Air Simulation Mode");
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
tempLabel = new ui::Label(ui::Point(3, 163), ui::Point(Size.X-24, 16), "Gravity Simulation Mode");
tempLabel->SetAlignment(AlignLeft, AlignMiddle);
AddComponent(tempLabel);
class CloseAction: public ui::ButtonAction
{
public:
OptionsView * v;
CloseAction(OptionsView * v_) { v = v_; }
void ActionCallback(ui::Button * sender)
{
v->c->Exit();
}
};
ui::Button * tempButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point(Size.X, 16), "OK");
tempButton->SetActionCallback(new CloseAction(this));
AddComponent(tempButton);
}
void OptionsView::NotifySettingsChanged(OptionsModel * sender)
{
heatSimulation->SetChecked(sender->GetHeatSimulation());
ambientHeatSimulation->SetChecked(sender->GetAmbientHeatSimulation());
newtonianGravity->SetChecked(sender->GetNewtonianGravity());
waterEqualisation->SetChecked(sender->GetWaterEqualisation());
}
void OptionsView::AttachController(OptionsController * c_)
{
c = c_;
}
void OptionsView::OnDraw()
{
Graphics * g = ui::Engine::Ref().g;
g->clearrect(Position.X-2, Position.Y-2, Size.X+3, Size.Y+3);
g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
}
OptionsView::~OptionsView() {
// TODO Auto-generated destructor stub
}

View File

@ -9,10 +9,23 @@
#define OPTIONSVIEW_H_
#include "interface/Window.h"
#include "OptionsController.h"
#include "interface/Checkbox.h"
#include "OptionsModel.h"
class OptionsModel;
class OptionsController;
class OptionsView: public ui::Window {
OptionsController * c;
ui::Checkbox * heatSimulation;
ui::Checkbox * ambientHeatSimulation;
ui::Checkbox * newtonianGravity;
ui::Checkbox * waterEqualisation;
public:
OptionsView();
void NotifySettingsChanged(OptionsModel * sender);
void AttachController(OptionsController * c_);
void OnDraw();
virtual ~OptionsView();
};