summaryrefslogtreecommitdiff
path: root/src/PowderToy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/PowderToy.cpp')
-rw-r--r--src/PowderToy.cpp66
1 files changed, 42 insertions, 24 deletions
diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp
index 7ede4d5..1e9630c 100644
--- a/src/PowderToy.cpp
+++ b/src/PowderToy.cpp
@@ -5,6 +5,7 @@
#include <sstream>
#include <string>
#include "Config.h"
+#include "Global.h"
#include "Simulation.h"
#include "Renderer.h"
#include "Graphics.h"
@@ -17,7 +18,6 @@
#include "interface/ControlFactory.h"
#include "interface/Point.h"
#include "interface/Label.h"
-#include "GameSession.h"
using namespace std;
@@ -44,9 +44,8 @@ SDL_Surface * SDLOpen()
return SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_SWSURFACE);
}
-int SDLPoll(SDL_Event * event)
+/*int SDLPoll(SDL_Event * event)
{
- event->type = 0;
while (SDL_PollEvent(event))
{
switch (event->type)
@@ -56,50 +55,60 @@ int SDLPoll(SDL_Event * event)
}
}
return 0;
-}
+}*/
int main(int argc, char * argv[])
{
int elapsedTime = 0, currentTime = 0, lastTime = 0, currentFrame = 0;
- float fps, fpsLimit, delta;
+ float fps = 0, fpsLimit = 30, delta = 1.0f;
//Renderer * ren;
//Simulation * sim = new Simulation();
//ren = new Renderer(g, sim);
- GameSession * gameSession = new GameSession();
+ Global::Ref().g = new Graphics();
+ Global::Ref().g->AttachSDLSurface(SDLOpen());
+
ui::Engine * engine = &ui::Engine::Ref();//new ui::Engine();
ui::State * engineState = new ui::State();
ui::Sandbox * sandbox = new ui::Sandbox();
ui::Button * button = new ui::Button(ui::Point(100, 100), ui::Point(100, 100), std::string("poP"));
ui::Label * fpsLabel = new ui::Label(ui::Point(2, 2), ui::Point(200, 14), std::string("FPS: 0"));
- engine->Begin(XRES, YRES, SDLOpen());
+ engine->Begin(XRES, YRES);
engine->SetState(engineState);
engineState->AddComponent(fpsLabel);
engineState->AddComponent(sandbox);
engineState->AddComponent(button);
- //window->Add(ControlFactory::MainMenu(gameSession, 0, 0, 200, 200));
+ engineState->AddComponent(ControlFactory::MainMenu(0, YRES+MENUSIZE-17, XRES+BARSIZE, 16));
SDL_Event event;
- while(!SDLPoll(&event))
+ while(engine->Running())
{
- //mouseButton = SDL_GetMouseState(&mouseX, &mouseY);
- switch(event.type)
+ event.type = 0;
+ while (SDL_PollEvent(&event))
{
- case SDL_KEYDOWN:
- break;
- case SDL_KEYUP:
- break;
- case SDL_MOUSEMOTION:
- engine->onMouseMove(event.motion.x, event.motion.y);
- break;
- case SDL_MOUSEBUTTONDOWN:
- engine->onMouseClick(event.motion.x, event.motion.y, event.button.button);
- break;
- case SDL_MOUSEBUTTONUP:
- engine->onMouseUnclick(event.motion.x, event.motion.y, event.button.button);
- break;
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ engine->Exit();
+ break;
+ case SDL_KEYDOWN:
+ break;
+ case SDL_KEYUP:
+ break;
+ case SDL_MOUSEMOTION:
+ engine->onMouseMove(event.motion.x, event.motion.y);
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ engine->onMouseClick(event.motion.x, event.motion.y, event.button.button);
+ break;
+ case SDL_MOUSEBUTTONUP:
+ engine->onMouseUnclick(event.motion.x, event.motion.y, event.button.button);
+ break;
+ }
+ event.type = 0; //Clear last event
}
+ //mouseButton = SDL_GetMouseState(&mouseX, &mouseY);
fpsLabel->LabelText = "";
stringstream fpsText;
fpsText << "FPS: " << fps;
@@ -111,6 +120,15 @@ int main(int argc, char * argv[])
currentFrame++;
currentTime = SDL_GetTicks();
elapsedTime = currentTime - lastTime;
+ if((currentFrame>2 || elapsedTime > 1000*2/ui::Engine::Ref().FpsLimit) && elapsedTime && currentFrame*1000/elapsedTime > ui::Engine::Ref().FpsLimit)
+ {
+ while (currentFrame*1000/elapsedTime > ui::Engine::Ref().FpsLimit)
+ {
+ SDL_Delay(1);
+ currentTime = SDL_GetTicks();
+ elapsedTime = currentTime-lastTime;
+ }
+ }
if(elapsedTime>=1000)
{
fps = (((float)currentFrame)/((float)elapsedTime))*1000.0f;