249 lines
7.3 KiB
C++
249 lines
7.3 KiB
C++
/*
|
|
* RenderView.cpp
|
|
*
|
|
* Created on: Jan 23, 2012
|
|
* Author: Simon
|
|
*/
|
|
|
|
#include "simulation/ElementGraphics.h"
|
|
#include "Graphics.h"
|
|
#include "Renderer.h"
|
|
#include "RenderView.h"
|
|
|
|
class RenderView::RenderModeAction: public ui::CheckboxAction
|
|
{
|
|
RenderView * v;
|
|
public:
|
|
unsigned int renderMode;
|
|
RenderModeAction(RenderView * v_, unsigned int renderMode_)
|
|
{
|
|
v = v_;
|
|
renderMode = renderMode_;
|
|
}
|
|
virtual void ActionCallback(ui::Checkbox * sender)
|
|
{
|
|
if(sender->GetChecked())
|
|
v->c->SetRenderMode(renderMode);
|
|
else
|
|
v->c->UnsetRenderMode(renderMode);
|
|
}
|
|
};
|
|
|
|
class RenderView::DisplayModeAction: public ui::CheckboxAction
|
|
{
|
|
RenderView * v;
|
|
public:
|
|
unsigned int displayMode;
|
|
DisplayModeAction(RenderView * v_, unsigned int displayMode_)
|
|
{
|
|
v = v_;
|
|
displayMode = displayMode_;
|
|
}
|
|
virtual void ActionCallback(ui::Checkbox * sender)
|
|
{
|
|
if(sender->GetChecked())
|
|
v->c->SetDisplayMode(displayMode);
|
|
else
|
|
v->c->UnsetDisplayMode(displayMode);
|
|
}
|
|
};
|
|
|
|
class RenderView::ColourModeAction: public ui::CheckboxAction
|
|
{
|
|
RenderView * v;
|
|
public:
|
|
unsigned int colourMode;
|
|
ColourModeAction(RenderView * v_, unsigned int colourMode_)
|
|
{
|
|
v = v_;
|
|
colourMode = colourMode_;
|
|
}
|
|
virtual void ActionCallback(ui::Checkbox * sender)
|
|
{
|
|
if(sender->GetChecked())
|
|
v->c->SetColourMode(colourMode);
|
|
else
|
|
v->c->SetColourMode(0);
|
|
}
|
|
};
|
|
|
|
RenderView::RenderView():
|
|
ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)),
|
|
ren(NULL)
|
|
{
|
|
ui::Checkbox * tCheckbox;
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(1, YRES+4), ui::Point(55, 16), "Effects");
|
|
renderModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_EFFE));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(1, YRES+4+18), ui::Point(55, 16), "Fire");
|
|
renderModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_FIRE));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(61, YRES+4), ui::Point(55, 16), "Glow");
|
|
renderModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_GLOW));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(61, YRES+4+18), ui::Point(55, 16), "Blur");
|
|
renderModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLUR));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(121, YRES+4), ui::Point(55, 16), "Blob");
|
|
renderModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLOB));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(121, YRES+4+18), ui::Point(55, 16), "Point");
|
|
renderModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BASC));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(186, YRES+4), ui::Point(70, 16), "Alt. Air");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRC));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(186, YRES+4+18), ui::Point(70, 16), "Pressure");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRP));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(261, YRES+4), ui::Point(70, 16), "Velocity");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRV));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(261, YRES+4+18), ui::Point(70, 16), "Air-heat");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRH));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(336, YRES+4), ui::Point(70, 16), "Air");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIR));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(336, YRES+4+18), ui::Point(70, 16), "Warp");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_WARP));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(411, YRES+4), ui::Point(70, 16), "Persistent");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_PERS));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(411, YRES+4+18), ui::Point(70, 16), "Effect");
|
|
displayModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_EFFE));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(486, YRES+4), ui::Point(50, 16), "Heat");
|
|
colourModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_HEAT));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(486, YRES+4+18), ui::Point(50, 16), "Life");
|
|
colourModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_LIFE));
|
|
AddComponent(tCheckbox);
|
|
|
|
tCheckbox = new ui::Checkbox(ui::Point(536, YRES+4+18), ui::Point(50, 16), "H-Gradient");
|
|
colourModes.push_back(tCheckbox);
|
|
tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_GRAD));
|
|
AddComponent(tCheckbox);
|
|
}
|
|
|
|
void RenderView::OnMouseDown(int x, int y, unsigned button)
|
|
{
|
|
if(x > XRES || y < YRES)
|
|
c->Exit();
|
|
}
|
|
|
|
void RenderView::NotifyRendererChanged(RenderModel * sender)
|
|
{
|
|
ren = sender->GetRenderer();
|
|
}
|
|
|
|
void RenderView::NotifyRenderChanged(RenderModel * sender)
|
|
{
|
|
for(int i = 0; i < renderModes.size(); i++)
|
|
{
|
|
if(renderModes[i]->GetActionCallback())
|
|
{
|
|
//Compares bitmasks at the moment, this means that "Point" is always on when other options that depend on it are, this might confuse some users, TODO: get the full list and compare that?
|
|
RenderModeAction * action = (RenderModeAction *)(renderModes[i]->GetActionCallback());
|
|
if(action->renderMode == (sender->GetRenderMode() & action->renderMode))
|
|
{
|
|
renderModes[i]->SetChecked(true);
|
|
}
|
|
else
|
|
{
|
|
renderModes[i]->SetChecked(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void RenderView::NotifyDisplayChanged(RenderModel * sender)
|
|
{
|
|
for(int i = 0; i < displayModes.size(); i++)
|
|
{
|
|
if(displayModes[i]->GetActionCallback())
|
|
{
|
|
DisplayModeAction * action = (DisplayModeAction *)(displayModes[i]->GetActionCallback());
|
|
if(action->displayMode == (sender->GetDisplayMode() & action->displayMode))
|
|
{
|
|
displayModes[i]->SetChecked(true);
|
|
}
|
|
else
|
|
{
|
|
displayModes[i]->SetChecked(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void RenderView::NotifyColourChanged(RenderModel * sender)
|
|
{
|
|
for(int i = 0; i < colourModes.size(); i++)
|
|
{
|
|
if(colourModes[i]->GetActionCallback())
|
|
{
|
|
ColourModeAction * action = (ColourModeAction *)(colourModes[i]->GetActionCallback());
|
|
if(action->colourMode == sender->GetColourMode())
|
|
{
|
|
colourModes[i]->SetChecked(true);
|
|
}
|
|
else
|
|
{
|
|
colourModes[i]->SetChecked(false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void RenderView::OnDraw()
|
|
{
|
|
Graphics * g = ui::Engine::Ref().g;
|
|
g->clearrect(0, 0, XRES, YRES+MENUSIZE);
|
|
g->draw_line(0, YRES, XRES-1, YRES, 255, 255, 255, XRES+BARSIZE);
|
|
g->draw_line(180, YRES, 180, YRES+MENUSIZE, 200, 200, 200, XRES+BARSIZE);
|
|
g->draw_line(480, YRES, 480, YRES+MENUSIZE, 200, 200, 200, XRES+BARSIZE);
|
|
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
|
|
}
|