Esempio n. 1
0
//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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
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;
}