The-Powder-Toy/src/PowderToy.cpp

148 lines
3.7 KiB
C++
Raw Normal View History

2012-01-08 11:39:03 -06:00
#include <time.h>
#include <SDL/SDL.h>
2012-01-14 12:51:24 -06:00
#include <iostream>
#include <sstream>
#include <string>
2012-01-08 11:39:03 -06:00
#include "Config.h"
#include "Global.h"
2012-01-08 11:39:03 -06:00
#include "Simulation.h"
#include "Renderer.h"
#include "Graphics.h"
#include "Air.h"
2012-01-14 12:51:24 -06:00
#include "interface/Engine.h"
2012-01-08 11:39:03 -06:00
#include "interface/Button.h"
#include "interface/Sandbox.h"
#include "interface/Panel.h"
#include "interface/ControlFactory.h"
2012-01-14 12:51:24 -06:00
#include "interface/Point.h"
#include "interface/Label.h"
2012-01-08 11:39:03 -06:00
2012-01-17 14:46:06 -06:00
#include "game/GameController.h"
#include "game/GameView.h"
2012-01-14 12:51:24 -06:00
using namespace std;
2012-01-08 11:39:03 -06:00
SDL_Surface * SDLOpen()
{
2012-01-14 12:51:24 -06:00
#if defined(WIN32) && defined(WINCONSOLE)
FILE * console = fopen("CON", "w" );
#endif
2012-01-08 11:39:03 -06:00
if (SDL_Init(SDL_INIT_VIDEO)<0)
{
fprintf(stderr, "Initializing SDL: %s\n", SDL_GetError());
return 0;
}
2012-01-14 12:51:24 -06:00
#if defined(WIN32) && defined(WINCONSOLE)
//On Windows, SDL redirects stdout to stdout.txt, which can be annoying when debugging, here we redirect back to the console
if (console)
{
freopen("CON", "w", stdout);
freopen("con", "w", stderr);
fclose(console);
}
#endif
2012-01-08 11:39:03 -06:00
atexit(SDL_Quit);
return SDL_SetVideoMode(XRES + BARSIZE, YRES + MENUSIZE, 32, SDL_SWSURFACE);
}
/*int SDLPoll(SDL_Event * event)
2012-01-08 11:39:03 -06:00
{
while (SDL_PollEvent(event))
{
switch (event->type)
{
case SDL_QUIT:
return 1;
}
}
return 0;
}*/
2012-01-08 11:39:03 -06:00
int main(int argc, char * argv[])
{
2012-01-14 12:51:24 -06:00
int elapsedTime = 0, currentTime = 0, lastTime = 0, currentFrame = 0;
float fps = 0, fpsLimit = 30, delta = 1.0f;
2012-01-08 11:39:03 -06:00
//Renderer * ren;
//Simulation * sim = new Simulation();
//ren = new Renderer(g, sim);
2012-01-17 14:46:06 -06:00
ui::Engine::Ref().g = new Graphics();
ui::Engine::Ref().g->AttachSDLSurface(SDLOpen());
2012-01-14 12:51:24 -06:00
ui::Engine * engine = &ui::Engine::Ref();//new ui::Engine();
2012-01-17 14:46:06 -06:00
//ui::State * engineState = new ui::State();
2012-01-14 12:51:24 -06:00
ui::Label * fpsLabel = new ui::Label(ui::Point(2, 2), ui::Point(200, 14), std::string("FPS: 0"));
2012-01-17 14:46:06 -06:00
//engineState->AddComponent(fpsLabel);
engine->Begin(XRES, YRES);
2012-01-17 14:46:06 -06:00
// engine->SetState(engineState);
GameController * gameController = new GameController();
engine->ShowWindow(gameController->GetView());
/*ui::Sandbox * sandbox = new ui::Sandbox();
ui::Button * button = new ui::Button(ui::Point(100, 100), ui::Point(100, 100), std::string("poP"));
2012-01-14 12:51:24 -06:00
engineState->AddComponent(fpsLabel);
engineState->AddComponent(sandbox);
engineState->AddComponent(button);
2012-01-17 14:46:06 -06:00
engineState->AddComponent(ControlFactory::MainMenu(0, YRES+MENUSIZE-17, XRES+BARSIZE, 16));*/
2012-01-08 11:39:03 -06:00
SDL_Event event;
while(engine->Running())
2012-01-08 11:39:03 -06:00
{
event.type = 0;
while (SDL_PollEvent(&event))
2012-01-08 11:39:03 -06:00
{
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
2012-01-08 11:39:03 -06:00
}
//mouseButton = SDL_GetMouseState(&mouseX, &mouseY);
2012-01-14 12:51:24 -06:00
fpsLabel->LabelText = "";
stringstream fpsText;
fpsText << "FPS: " << fps;
fpsLabel->LabelText = fpsText.str();
2012-01-08 11:39:03 -06:00
2012-01-14 12:51:24 -06:00
engine->Tick(delta);
engine->Draw();
2012-01-08 11:39:03 -06:00
2012-01-14 12:51:24 -06:00
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;
}
}
2012-01-14 12:51:24 -06:00
if(elapsedTime>=1000)
{
fps = (((float)currentFrame)/((float)elapsedTime))*1000.0f;
currentFrame = 0;
lastTime = currentTime;
delta = 60.0f/fps;
}
2012-01-08 11:39:03 -06:00
}
}