//DO NOT MODIFY MAIN int main(int argv, char** argc) { Initialize(); LoadContent(); float timeThisFrame = 0; float timeLastFrame = 0; float deltaTime = 0; //DO NOT MODIFY THIS METHOD do { //Set lastframe time to this frames time timeLastFrame = timeThisFrame; //Set this frame time to time since starting the program timeThisFrame = (float)SDL_GetTicks(); //Get the number of seconds that have passed since last frame deltaTime = (timeThisFrame - timeLastFrame) / 1000; //Update the game Update(deltaTime); //Draw the game Draw(); } while (!quit); DestroyGame(); return 0; }
int main(int argc, char* argv[]) #endif //ANDROID { #if (defined ANDROID) if (argc > 2) { mJNIEnv = (JNIEnv * )argv[1]; mJNIClass = (jclass * )argv[2]; } #endif DebugTrace("I R in da native"); g_launcher = new JGameLauncher(); u32 flags = g_launcher->GetInitFlags(); if ((flags&JINIT_FLAG_ENABLE3D)!=0) { JRenderer::Set3DFlag(true); } g_SdlApp = new SdlApp(); int result = g_SdlApp->OnExecute(); if (g_launcher) delete g_launcher; if(g_SdlApp) delete g_SdlApp; // Shutdown DestroyGame(); return result; }
void GameStart() { RenderWindow window(VideoMode(MapWidth * SpriteSize, MapHeight * SpriteSize), "Snake"); Clock clock; Game* game; NewGame(game); Text text = game->game_text->text; while (window.isOpen()) //разбить на 3 метода { float time = clock.getElapsedTime().asSeconds(); clock.restart(); game->consts->time_counter += time; ProcessEvents(window, game); if (game->state == STARTGAME) { window.clear(); text.setCharacterSize(120); text.setString(" Snake!\n\nPress 'U' to start!"); text.setPosition(250, 50); window.draw(text); } else if (game->state == RESTART) { DestroyGame(game); NewGame(game); text = game->game_text->text; game->state = PLAY; } else if (game->state == PAUSE) { window.clear(); Render(window, game); text.setCharacterSize(150); text.setString("Pause"); text.setPosition(455, 160); window.draw(text); } else if (game->state == PLAY) { while (game->consts->time_counter > game->consts->speed) { game->consts->time_counter = 0; //Snake movement Step(game->snake); int snake_draw_counter = SnakeLength(game->snake); ProcessCollisions(snake_draw_counter, game); } Render(window, game); } else if (game->state == ENDGAME) { window.clear(); text.setCharacterSize(120); text.setString(" Score: " + ToString(game->consts->score) + "\n Press 'Esc' to exit\n Press 'R' to restart"); text.setPosition(170, 28); window.draw(text); } window.display(); } DestroyGame(game); }
int CALLBACK old( HINSTANCE Instance, HINSTANCE PrevInstance, LPSTR CommandLine, int ShowCode) { #if 1 Win32EnableConsole(); #endif sf::ContextSettings settings; settings.depthBits = 32; //24 settings.stencilBits = 0; //0 settings.antialiasingLevel = 0; //0 settings.majorVersion = 3; settings.minorVersion = 2; // Display the list of all the video modes available for fullscreen std::vector<sf::VideoMode> modes = sf::VideoMode::getFullscreenModes(); for (std::size_t i = 0; i < modes.size(); ++i) { sf::VideoMode mode = modes[i]; std::cout << "Mode #" << i << ": " << mode.width << "x" << mode.height << " - " << mode.bitsPerPixel << " bpp" << std::endl; } uint8 defaultStyle = (sf::Style::Titlebar | sf::Style::Close); auto mode = modes[17]; sf::RenderWindow renderWindow(sf::VideoMode(mode.width, mode.height, mode.bitsPerPixel), "OpenGL", defaultStyle , settings); renderWindow.setVerticalSyncEnabled(true); renderWindow.setFramerateLimit(60); renderWindow.resetGLStates(); settings = renderWindow.getSettings(); cout << "depth bits:" << settings.depthBits << endl; cout << "stencil bits:" << settings.stencilBits << endl; cout << "antialiasing level:" << settings.antialiasingLevel << endl; cout << "version:" << settings.majorVersion << "." << settings.minorVersion << endl; renderWindow.setActive(true); sfg::SFGUI sfgui; sfg::Desktop sfguiDesktop; CreateGui(sfguiDesktop); sf::Font retro_font; retro_font.loadFromFile( "../data/fonts/Retro Computer_DEMO.ttf" ); auto fent = std::make_shared<sf::Font>();// = sf::Font>(retro_font); fent->loadFromFile( "../data/fonts/Retro Computer_DEMO.ttf" ); //my_font.setGlobalBounds(text.getGlobalBounds.left, text.getGlobalBounds().top); sfguiDesktop.GetEngine().GetResourceManager().AddFont( "retro_font", fent ); //desktop.SetProperty( "*", "FontName", "custom_font" ); sfguiDesktop.SetProperties( "* {" " FontName: retro_font;" " FontSize: 18;" "}" ); sf::Text text; text.setFont(retro_font); text.setPosition(sf::Vector2f(2, 2)); text.setCharacterSize(18); text.setColor(sf::Color::White); KeyboardManager keyboardManager; //Game game(renderWindow, retro_font, &keyboardManager); char *GameDLLFullPath = "J:/build/terrific.dll"; char *TempDLLName = "J:/build/tmp.dll"; char *LockFileName = "J:/build/lock.tmp"; auto GameCodeDLL = Win32LoadGameCode(GameDLLFullPath, TempDLLName, LockFileName); Game *game = GameCodeDLL.CreateGame(renderWindow, retro_font, &keyboardManager); uint32 LoadCounter = 0; uint32 m_fps_counter = 0; float delta = 0; sf::Clock m_fps_clock; m_fps_clock.restart(); sf::Clock clock; sf::Clock frame_time_clock; sf::Int64 frame_times[5000]; std::size_t frame_times_index = 0; std::fill( std::begin( frame_times ), std::end( frame_times ), 0 ); int X(0), Y(0); while (globalRunning) { sf::Event event; while (renderWindow.pollEvent(event)) { if ((event.type == sf::Event::Closed)) { globalRunning = false; break; } else if ((event.type == sf::Event::MouseMoved)) { X = event.mouseMove.x; Y = event.mouseMove.y; } else if ((event.type == sf::Event::KeyPressed) | (event.type == sf::Event::KeyReleased)) { keyboardManager.ProcessEvent(event); } sfguiDesktop.HandleEvent(event); } FILETIME NewDLLWriteTime = Win32GetLastWriteTime(GameDLLFullPath); auto t = CompareFileTime(&NewDLLWriteTime, &GameCodeDLL.LastWriteTime); if(t != 0 && LoadCounter > 0) { //char buffer[256]; //sprintf(buffer, "J:/build/tmp%d.dll", LoadCounter); GameCodeDLL->DestroyGame(GameMemory); Win32UnloadGameCode(&GameCodeDLL); { sf::Clock clockT; while (clockT.getElapsedTime().asSeconds() < 0.5f) { system("cls"); cout << "Unloading Game Code . . . " << endl; } cout << "Game Code loaded!" << endl; clockT.restart(); } GameCodeDLL = Win32LoadGameCode(GameDLLFullPath, TempDLLName, LockFileName); if(GameCodeDLL.IsValid) { game = GameCodeDLL.CreateGame(renderWindow, retro_font, &keyboardManager); } LoadCounter++; } else { LoadCounter++; } auto microseconds = clock.getElapsedTime().asMicroseconds(); //delta = static_cast<float>( microseconds ) / 1000000.f; // Only update every 5ms delta = static_cast<float>(frame_time_clock.getElapsedTime().asSeconds()); if( microseconds > 5000 ) { game->update(delta); sfguiDesktop.Update(delta); keyboardManager.Update(); clock.restart(); renderWindow.setActive( true ); } renderWindow.clear(); delta = static_cast<float>(frame_time_clock.getElapsedTime().asSeconds()); game->draw(delta); sfgui.Display(renderWindow); renderWindow.draw(text); renderWindow.display(); auto frame_time = frame_time_clock.getElapsedTime().asMicroseconds(); frame_time_clock.restart(); frame_times[ frame_times_index ] = frame_time; frame_times_index = ( frame_times_index + 1 ) % 5000; if( m_fps_clock.getElapsedTime().asMicroseconds() >= 1000000 ) { m_fps_clock.restart(); sf::Int64 total_time = 0; for( std::size_t index = 0; index < 5000; ++index ) { total_time += frame_times[index]; } std::stringstream sstr; sstr << "SFGUI test -- FPS: " << m_fps_counter << " -- Frame Time (microsecs): min: " << *std::min_element( frame_times, frame_times + 5000 ) << " max: " << *std::max_element( frame_times, frame_times + 5000 ) << " avg: " << static_cast<float>( total_time ) / 5000.f; renderWindow.setTitle( sstr.str() ); m_fps_counter = 0; } ++m_fps_counter; } renderWindow.close(); Win32UnloadGameCode(&GameCodeDLL); { sf::Clock clockT; while (clockT.getElapsedTime().asSeconds() < 0.5f) { cout << "Unloading Game Code . . . " << endl; } clockT.restart(); } DeleteFile(TempDLLName); return 0; }
int CALLBACK WinMain( HINSTANCE Instance, HINSTANCE PrevInstance, LPSTR CommandLine, int ShowCode) { #if 1 Win32EnableConsole(); #endif #if TERRIFIC_INTERNAL LPVOID BaseAddress = 0;//(LPVOID)Terabytes(2); #else LPVOID BaseAddress = 0; #endif win32_state State = {}; game_memory GameMemory = {}; GameMemory.PermanentStorageSize = Megabytes(512); GameMemory.TransientStorageSize = Megabytes(512); State.TotalSize = GameMemory.PermanentStorageSize + GameMemory.TransientStorageSize; State.GameMemoryBlock = VirtualAlloc(BaseAddress, State.TotalSize, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); DWORD Error = GetLastError(); GameMemory.PermanentStorage = State.GameMemoryBlock; GameMemory.TransientStorage = ((uint8 *)GameMemory.PermanentStorage + GameMemory.PermanentStorageSize); char *GameDLLFullPath = "J:/build/terrific.dll"; char *TempDLLName = "J:/build/tmp.dll"; char *LockFileName = "J:/build/lock.tmp"; auto GameCodeDLL = Win32LoadGameCode(GameDLLFullPath, TempDLLName, LockFileName); //Game *game = GameCodeDLL.CreateGame(); uint32 m_fps_counter = 0; ex::TimeDelta delta = 0; sf::Clock m_fps_clock; m_fps_clock.restart(); sf::Clock clock; sf::Clock frame_time_clock; sf::Int64 frame_times[5000]; std::size_t frame_times_index = 0; std::fill( std::begin( frame_times ), std::end( frame_times ), 0 ); uint32 loadCounter = 0; bool32 running = true; if (GameMemory.PermanentStorage && GameMemory.TransientStorage) { game_state *GameState = (game_state *) GameMemory.PermanentStorage; while(running) { FILETIME NewDLLWriteTime = Win32GetLastWriteTime(GameDLLFullPath); auto t = CompareFileTime(&NewDLLWriteTime, &GameCodeDLL.LastWriteTime); if(t != 0) { GameCodeDLL.DestroyGame(&GameMemory); Win32DEBUGDelay(0.1f, "Exiting Game"); Win32UnloadGameCode(&GameCodeDLL); Win32DEBUGDelay(0.2f, "Unloading Game Code"); if(!DeleteFile(TempDLLName)) { return 666; } //Win32DEBUGDelay(0.1f, "Deleting tmp.dll"); GameCodeDLL = Win32LoadGameCode(GameDLLFullPath, TempDLLName, LockFileName); if(GameCodeDLL.IsValid) { //game = GameCodeDLL.CreateGame(); GameMemory.IsInitialized = false; GameState = (game_state *) GameMemory.PermanentStorage; GameState->RenderWindow.close(); while(GameState->RenderWindow.isOpen()) { } //VirtualFree(State.GameMemoryBlock, State.TotalSize, MEM_RELEASE ); VirtualFree(State.GameMemoryBlock, 0, MEM_RELEASE); Error = GetLastError(); State = {}; GameMemory = {}; GameState = NULL; GameMemory.PermanentStorageSize = Megabytes(256); GameMemory.TransientStorageSize = Megabytes(256); State.TotalSize = GameMemory.PermanentStorageSize + GameMemory.TransientStorageSize; State.GameMemoryBlock = VirtualAlloc(BaseAddress, State.TotalSize, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); Error = GetLastError(); GameMemory.PermanentStorage = State.GameMemoryBlock; GameMemory.TransientStorage = ((uint8 *)GameMemory.PermanentStorage + GameMemory.PermanentStorageSize); } } //running = !game->IsExiting(); GameState = (game_state *) GameMemory.PermanentStorage; if(GameCodeDLL.IsValid && GameMemory.PermanentStorage && GameMemory.TransientStorage) { //delta = static_cast<float>( microseconds ) / 1000000.f; //delta = frame_time_clock.getElapsedTime().asSeconds(); delta = 0.16f; //game->Run2(delta, &GameMemory); if(!GameCodeDLL.RunGame(delta, &GameMemory)) { GameState->RenderWindow.close(); GameCodeDLL.DestroyGame(&GameMemory); Win32DEBUGDelay(0.1f, "Exiting Game"); VirtualFree(State.GameMemoryBlock, State.TotalSize, MEM_RELEASE ); Win32DEBUGDelay(0.25f, "Closing Window"); Win32UnloadGameCode(&GameCodeDLL); Win32DEBUGDelay(0.25f, "Unloading Game Code"); return(DeleteFile(TempDLLName)); } } else { running = false; } auto frame_time = frame_time_clock.getElapsedTime().asMicroseconds(); frame_time_clock.restart(); frame_times[ frame_times_index ] = frame_time; frame_times_index = ( frame_times_index + 1 ) % 5000; if( m_fps_clock.getElapsedTime().asMicroseconds() >= 1000000 ) { m_fps_clock.restart(); sf::Int64 total_time = 0; for( std::size_t index = 0; index < 5000; ++index ) { total_time += frame_times[index]; } std::stringstream sstr; sstr << "SFGUI test -- FPS: " << m_fps_counter << " -- Frame Time (seconds): min: " << static_cast<float>(*std::min_element( frame_times, frame_times + 5000 ) / 1000000.f) << " max: " << static_cast<float>(*std::max_element( frame_times, frame_times + 5000 ) / 1000000.f) << " avg: " << static_cast<float>((( total_time ) / 5000.f) / 1000000.f); if(running) { //game->SetTitle(sstr.str()); } //renderWindow.setTitle( sstr.str() ); GameState->DEBUGString = sstr.str(); m_fps_counter = 0; } ++m_fps_counter; } } GameCodeDLL.DestroyGame(&GameMemory); Win32DEBUGDelay(0.1f, "Exiting Game"); Win32UnloadGameCode(&GameCodeDLL); Win32DEBUGDelay(1.5f, "Unloading Game Code"); return(DeleteFile(TempDLLName)); //return 0; }