Element sampling HUD thingy (No very good with MVC)

This commit is contained in:
Simon Robertshaw 2012-04-08 00:11:21 +01:00
parent bbfbb81086
commit c88079d084
7 changed files with 57 additions and 3 deletions

View File

@ -348,6 +348,12 @@ void GameController::Tick()
void GameController::Update() void GameController::Update()
{ {
ui::Point pos = gameView->GetMousePosition();
if(pos.X >= 0 && pos.Y >= 0 && pos.X < XRES && pos.Y < YRES)
{
gameView->SetSample(gameModel->GetSimulation()->Get(pos.X, pos.Y));
}
gameModel->GetSimulation()->update_particles(); gameModel->GetSimulation()->update_particles();
if(renderOptions && renderOptions->HasExited) if(renderOptions && renderOptions->HasExited)
{ {
@ -558,4 +564,8 @@ void GameController::ReloadSim()
gameModel->GetSimulation()->Load(gameModel->GetSave()->GetData(), gameModel->GetSave()->GetDataLength()); gameModel->GetSimulation()->Load(gameModel->GetSave()->GetData(), gameModel->GetSave()->GetDataLength());
} }
std::string GameController::ElementResolve(int type)
{
return std::string(gameModel->GetSimulation()->ptypes[type].name);
}

View File

@ -90,6 +90,7 @@ public:
void ShowConsole(); void ShowConsole();
void FrameStep(); void FrameStep();
ui::Point PointTranslate(ui::Point point); ui::Point PointTranslate(ui::Point point);
std::string ElementResolve(int type);
}; };
#endif // GAMECONTROLLER_H #endif // GAMECONTROLLER_H

View File

@ -1,4 +1,5 @@
#include <sstream> #include <sstream>
#include <iomanip>
#include "Config.h" #include "Config.h"
#include "GameView.h" #include "GameView.h"
@ -29,7 +30,8 @@ GameView::GameView():
selectPoint1(0, 0), selectPoint1(0, 0),
selectPoint2(0, 0), selectPoint2(0, 0),
stampThumb(NULL), stampThumb(NULL),
clipboardThumb(NULL) clipboardThumb(NULL),
mousePosition(0, 0)
{ {
int currentX = 1; int currentX = 1;
//Set up UI //Set up UI
@ -282,6 +284,16 @@ void GameView::NotifyMenuListChanged(GameModel * sender)
} }
} }
void GameView::SetSample(Particle sample)
{
this->sample = sample;
}
ui::Point GameView::GetMousePosition()
{
return mousePosition;
}
void GameView::NotifyActiveToolsChanged(GameModel * sender) void GameView::NotifyActiveToolsChanged(GameModel * sender)
{ {
for(int i = 0; i < toolButtons.size(); i++) for(int i = 0; i < toolButtons.size(); i++)
@ -469,6 +481,7 @@ void GameView::NotifyBrushChanged(GameModel * sender)
void GameView::OnMouseMove(int x, int y, int dx, int dy) void GameView::OnMouseMove(int x, int y, int dx, int dy)
{ {
mousePosition = c->PointTranslate(ui::Point(x, y));
if(selectMode!=SelectNone) if(selectMode!=SelectNone)
{ {
if(selectMode==PlaceStamp || selectMode==PlaceClipboard) if(selectMode==PlaceStamp || selectMode==PlaceClipboard)
@ -837,9 +850,9 @@ void GameView::changeColour()
void GameView::OnDraw() void GameView::OnDraw()
{ {
Graphics * g = ui::Engine::Ref().g;
if(ren) if(ren)
{ {
Graphics * g = ui::Engine::Ref().g;
ren->draw_air(); ren->draw_air();
ren->render_parts(); ren->render_parts();
ren->render_fire(); ren->render_fire();
@ -931,4 +944,13 @@ void GameView::OnDraw()
} }
} }
} }
std::stringstream sampleInfo;
sampleInfo.precision(2);
if(sample.type)
sampleInfo << c->ElementResolve(sample.type) << ", Temp: " << std::fixed << sample.temp -273.15f;
else
sampleInfo << "Empty";
g->drawtext(XRES+BARSIZE-(10+Graphics::textwidth((char*)sampleInfo.str().c_str())), 5, (const char*)sampleInfo.str().c_str(), 255, 255, 255, 255);
} }

View File

@ -71,12 +71,21 @@ private:
ui::Point selectPoint1; ui::Point selectPoint1;
ui::Point selectPoint2; ui::Point selectPoint2;
ui::Point mousePosition;
Thumbnail * clipboardThumb; Thumbnail * clipboardThumb;
Thumbnail * stampThumb; Thumbnail * stampThumb;
Particle sample;
void changeColour(); void changeColour();
public: public:
GameView(); GameView();
//Breaks MVC, but any other way is going to be more of a mess.
ui::Point GetMousePosition();
void SetSample(Particle sample);
void AttachController(GameController * _c){ c = _c; } void AttachController(GameController * _c){ c = _c; }
void NotifyRendererChanged(GameModel * sender); void NotifyRendererChanged(GameModel * sender);
void NotifySimulationChanged(GameModel * sender); void NotifySimulationChanged(GameModel * sender);

View File

@ -148,4 +148,6 @@ void Component::OnMouseWheelInside(int localx, int localy, int d)
Component::~Component() Component::~Component()
{ {
if(GetParentWindow()->IsFocused(this))
GetParentWindow()->FocusComponent(NULL);
} }

View File

@ -120,6 +120,15 @@ int Simulation::flood_prop(int x, int y, size_t propoffset, void * propvalue, in
return 0; return 0;
} }
Particle Simulation::Get(int x, int y)
{
if(pmap[y][x])
return parts[pmap[y][x]>>8];
if(photons[y][x])
return parts[photons[y][x]>>8];
return Particle();
}
int Simulation::flood_parts(int x, int y, int fullc, int cm, int bm, int flags) int Simulation::flood_parts(int x, int y, int fullc, int cm, int bm, int flags)
{ {
int c = fullc&0xFF; int c = fullc&0xFF;

View File

@ -210,6 +210,7 @@ public:
int Load(int x, int y, unsigned char * data, int dataLength); int Load(int x, int y, unsigned char * data, int dataLength);
unsigned char * Save(int & dataLength); unsigned char * Save(int & dataLength);
unsigned char * Save(int x1, int y1, int x2, int y2, int & dataLength); unsigned char * Save(int x1, int y1, int x2, int y2, int & dataLength);
Particle Get(int x, int y);
inline int is_blocking(int t, int x, int y); inline int is_blocking(int t, int x, int y);
inline int is_boundary(int pt, int x, int y); inline int is_boundary(int pt, int x, int y);
inline int find_next_boundary(int pt, int *x, int *y, int dm, int *em); inline int find_next_boundary(int pt, int *x, int *y, int dm, int *em);