HUD improvements
This commit is contained in:
parent
e65e222f2c
commit
603cf3149d
@ -375,7 +375,7 @@ void GameView::NotifyMenuListChanged(GameModel * sender)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameView::SetSample(Particle sample)
|
void GameView::SetSample(SimulationSample sample)
|
||||||
{
|
{
|
||||||
this->sample = sample;
|
this->sample = sample;
|
||||||
}
|
}
|
||||||
@ -1251,18 +1251,36 @@ void GameView::OnDraw()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Draw info about simulation under cursor
|
||||||
std::stringstream sampleInfo;
|
std::stringstream sampleInfo;
|
||||||
sampleInfo.precision(2);
|
sampleInfo.precision(2);
|
||||||
if(sample.type)
|
if(sample.particle.type)
|
||||||
sampleInfo << c->ElementResolve(sample.type) << ", Temp: " << std::fixed << sample.temp -273.15f;
|
sampleInfo << c->ElementResolve(sample.particle.type) << ", Temp: " << std::fixed << sample.particle.temp -273.15f;
|
||||||
else
|
else
|
||||||
sampleInfo << "Empty";
|
sampleInfo << "Empty";
|
||||||
|
|
||||||
if(sample.ctype && sample.ctype>0 && sample.ctype<PT_NUM)
|
sampleInfo << ", Pressure: " << std::fixed << sample.AirPressure;
|
||||||
sampleInfo << ", Ctype: " << c->ElementResolve(sample.ctype);
|
|
||||||
|
|
||||||
g->drawtext(XRES+BARSIZE-(10+Graphics::textwidth((char*)sampleInfo.str().c_str())), 10, (const char*)sampleInfo.str().c_str(), 255, 255, 255, 255);
|
int textWidth = Graphics::textwidth((char*)sampleInfo.str().c_str());
|
||||||
|
g->fillrect(XRES-20-textWidth, 12, textWidth+8, 15, 0, 0, 0, 255*0.5);
|
||||||
|
g->drawtext(XRES-16-textWidth, 16, (const char*)sampleInfo.str().c_str(), 255, 255, 255, 255*0.75);
|
||||||
|
|
||||||
|
|
||||||
|
//FPS and some version info
|
||||||
|
#ifndef DEBUG //In debug mode, the Engine will draw FPS and other info instead
|
||||||
|
std::stringstream fpsInfo;
|
||||||
|
fpsInfo.precision(2);
|
||||||
|
#ifdef SNAPSHOT
|
||||||
|
fpsInfo << "Snapshot " << SNAPSHOT_ID << ". ";
|
||||||
|
#endif
|
||||||
|
fpsInfo << "FPS: " << std::fixed << ui::Engine::Ref().GetFps();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
textWidth = Graphics::textwidth((char*)fpsInfo.str().c_str());
|
||||||
|
g->fillrect(12, 12, textWidth+8, 15, 0, 0, 0, 255*0.5);
|
||||||
|
g->drawtext(16, 16, (const char*)fpsInfo.str().c_str(), 32, 216, 255, 255*0.75);
|
||||||
|
|
||||||
|
//Tooltips
|
||||||
if(infoTipPresence)
|
if(infoTipPresence)
|
||||||
{
|
{
|
||||||
int infoTipAlpha = (infoTipPresence>50?50:infoTipPresence)*5;
|
int infoTipAlpha = (infoTipPresence>50?50:infoTipPresence)*5;
|
||||||
|
@ -87,7 +87,7 @@ private:
|
|||||||
|
|
||||||
Thumbnail * placeSaveThumb;
|
Thumbnail * placeSaveThumb;
|
||||||
|
|
||||||
Particle sample;
|
SimulationSample sample;
|
||||||
|
|
||||||
int lastOffset;
|
int lastOffset;
|
||||||
void setToolButtonOffset(int offset);
|
void setToolButtonOffset(int offset);
|
||||||
@ -99,7 +99,7 @@ public:
|
|||||||
|
|
||||||
//Breaks MVC, but any other way is going to be more of a mess.
|
//Breaks MVC, but any other way is going to be more of a mess.
|
||||||
ui::Point GetMousePosition();
|
ui::Point GetMousePosition();
|
||||||
void SetSample(Particle sample);
|
void SetSample(SimulationSample sample);
|
||||||
|
|
||||||
void AttachController(GameController * _c){ c = _c; }
|
void AttachController(GameController * _c){ c = _c; }
|
||||||
void NotifyRendererChanged(GameModel * sender);
|
void NotifyRendererChanged(GameModel * sender);
|
||||||
|
@ -182,9 +182,11 @@ void Engine::Draw()
|
|||||||
if(state_)
|
if(state_)
|
||||||
state_->DoDraw();
|
state_->DoDraw();
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
char fpsText[512];
|
char fpsText[512];
|
||||||
sprintf(fpsText, "FPS: %.2f, Delta: %.3f", fps, dt);
|
sprintf(fpsText, "FPS: %.2f, Delta: %.3f", fps, dt);
|
||||||
ui::Engine::Ref().g->drawtext(10, 10, fpsText, 255, 255, 255, 255);
|
ui::Engine::Ref().g->drawtext(10, 10, fpsText, 255, 255, 255, 255);
|
||||||
|
#endif
|
||||||
g->Finalise();
|
g->Finalise();
|
||||||
FrameIndex++;
|
FrameIndex++;
|
||||||
FrameIndex %= 7200;
|
FrameIndex %= 7200;
|
||||||
|
@ -41,6 +41,7 @@ namespace ui
|
|||||||
void Draw();
|
void Draw();
|
||||||
|
|
||||||
void SetFps(float fps);
|
void SetFps(float fps);
|
||||||
|
inline float GetFps() { return fps; };
|
||||||
|
|
||||||
inline int GetMouseX() { return mousex_; }
|
inline int GetMouseX() { return mousex_; }
|
||||||
inline int GetMouseY() { return mousey_; }
|
inline int GetMouseY() { return mousey_; }
|
||||||
|
25
src/simulation/Sample.h
Normal file
25
src/simulation/Sample.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#ifndef The_Powder_Toy_Sample_h
|
||||||
|
#define The_Powder_Toy_Sample_h
|
||||||
|
|
||||||
|
#include "Particle.h"
|
||||||
|
|
||||||
|
class SimulationSample
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Particle particle;
|
||||||
|
float AirPressure;
|
||||||
|
float AirTemperature;
|
||||||
|
float AirVelocityX;
|
||||||
|
float AirVelocityY;
|
||||||
|
|
||||||
|
int WallType;
|
||||||
|
float Gravity;
|
||||||
|
float GravityVelocityX;
|
||||||
|
float GravityVelocityY;
|
||||||
|
|
||||||
|
SimulationSample() : particle(), AirPressure(0), AirVelocityX(0), AirVelocityY(0), WallType(0), Gravity(0), GravityVelocityX(0), GravityVelocityY(0), AirTemperature(0) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -340,13 +340,25 @@ int Simulation::flood_prop(int x, int y, size_t propoffset, void * propvalue, St
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Particle Simulation::Get(int x, int y)
|
SimulationSample Simulation::Get(int x, int y)
|
||||||
{
|
{
|
||||||
|
SimulationSample sample;
|
||||||
if(pmap[y][x])
|
if(pmap[y][x])
|
||||||
return parts[pmap[y][x]>>8];
|
sample.particle = parts[pmap[y][x]>>8];
|
||||||
if(photons[y][x])
|
if(photons[y][x])
|
||||||
return parts[photons[y][x]>>8];
|
sample.particle = parts[photons[y][x]>>8];
|
||||||
return Particle();
|
sample.AirPressure = pv[y/CELL][x/CELL];
|
||||||
|
sample.AirTemperature = hv[y/CELL][x/CELL];
|
||||||
|
sample.AirVelocityX = vx[y/CELL][x/CELL];
|
||||||
|
sample.AirVelocityY = vy[y/CELL][x/CELL];
|
||||||
|
|
||||||
|
if(grav->ngrav_enable)
|
||||||
|
{
|
||||||
|
sample.Gravity = gravp[(y/CELL)*(XRES/CELL)+(x/CELL)];
|
||||||
|
sample.GravityVelocityX = gravx[(y/CELL)*(XRES/CELL)+(x/CELL)];
|
||||||
|
sample.GravityVelocityY = gravy[(y/CELL)*(XRES/CELL)+(x/CELL)];
|
||||||
|
}
|
||||||
|
return sample;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PMAP_CMP_CONDUCTIVE(pmap, t) (((pmap)&0xFF)==(t) || (((pmap)&0xFF)==PT_SPRK && parts[(pmap)>>8].ctype==(t)))
|
#define PMAP_CMP_CONDUCTIVE(pmap, t) (((pmap)&0xFF)==(t) || (((pmap)&0xFF)==PT_SPRK && parts[(pmap)>>8].ctype==(t)))
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "GOLMenu.h"
|
#include "GOLMenu.h"
|
||||||
#include "MenuSection.h"
|
#include "MenuSection.h"
|
||||||
#include "client/GameSave.h"
|
#include "client/GameSave.h"
|
||||||
|
#include "Sample.h"
|
||||||
|
|
||||||
#define CHANNELS ((int)(MAX_TEMP-73)/100+2)
|
#define CHANNELS ((int)(MAX_TEMP-73)/100+2)
|
||||||
|
|
||||||
@ -117,7 +118,7 @@ public:
|
|||||||
int Load(int x, int y, GameSave * save);
|
int Load(int x, int y, GameSave * save);
|
||||||
GameSave * Save();
|
GameSave * Save();
|
||||||
GameSave * Save(int x1, int y1, int x2, int y2);
|
GameSave * Save(int x1, int y1, int x2, int y2);
|
||||||
Particle Get(int x, int y);
|
SimulationSample 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);
|
||||||
|
Reference in New Issue
Block a user