126 lines
4.2 KiB
C#
126 lines
4.2 KiB
C#
/*******************************************************************************************
|
|
*
|
|
* raylib [core] example - window should close
|
|
*
|
|
* Example complexity rating: [★☆☆☆] 1/4
|
|
*
|
|
* Example originally created with raylib 4.2, last time updated with raylib 4.2
|
|
*
|
|
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
|
* BSD-like license that allows static linking with closed source software
|
|
*
|
|
* Copyright (c) 2013-2025 Ramon Santamaria (@raysan5)
|
|
*
|
|
********************************************************************************************/
|
|
|
|
namespace Examples.Core;
|
|
|
|
public partial class WindowShouldClose : IExample
|
|
{
|
|
private const int screenWidth = 800;
|
|
private const int screenHeight = 450;
|
|
|
|
public string Name => "Core / Window Should Close";
|
|
|
|
public string Title => "raylib [core] example - window should close";
|
|
|
|
// The runner drives its loop off this instead of WindowShouldClose(), so the exit
|
|
// confirmation (polled in Update) can intercept both the X-button and KEY_ESCAPE.
|
|
public bool ShouldClose => exitWindow;
|
|
|
|
private bool exitWindowRequested; // Flag to request window to exit
|
|
private bool exitWindow; // Flag to set window to exit
|
|
|
|
public void Init()
|
|
{
|
|
SetExitKey(KeyboardKey.Null); // Disable KEY_ESCAPE to close window, X-button still works
|
|
|
|
exitWindowRequested = false;
|
|
exitWindow = false;
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
// Update
|
|
//----------------------------------------------------------------------------------
|
|
// Detect if X-button or KEY_ESCAPE have been pressed to close window
|
|
bool closeRequested = IsKeyPressed(KeyboardKey.Escape);
|
|
#if !BROWSER
|
|
// WindowShouldClose() polls the OS window close button, but on the wasm target it calls
|
|
// emscripten_sleep (ASYNCIFY is not enabled) and the canvas has no window chrome anyway,
|
|
// so on web the confirmation is triggered by KEY_ESCAPE only.
|
|
closeRequested |= Raylib.WindowShouldClose();
|
|
#endif
|
|
if (closeRequested)
|
|
{
|
|
exitWindowRequested = true;
|
|
}
|
|
|
|
if (exitWindowRequested)
|
|
{
|
|
// A request for close window has been issued, we can save data before closing
|
|
// or just show a message asking for confirmation
|
|
|
|
if (IsKeyPressed(KeyboardKey.Y))
|
|
{
|
|
exitWindow = true;
|
|
}
|
|
else if (IsKeyPressed(KeyboardKey.N))
|
|
{
|
|
exitWindowRequested = false;
|
|
}
|
|
}
|
|
//----------------------------------------------------------------------------------
|
|
|
|
// Draw
|
|
//----------------------------------------------------------------------------------
|
|
BeginDrawing();
|
|
|
|
ClearBackground(Color.RayWhite);
|
|
|
|
if (exitWindowRequested)
|
|
{
|
|
DrawRectangle(0, 100, screenWidth, 200, Color.Black);
|
|
DrawText("Are you sure you want to exit program? [Y/N]", 40, 180, 30, Color.White);
|
|
}
|
|
else
|
|
{
|
|
DrawText("Try to close the window to get confirmation message!", 120, 200, 20, Color.LightGray);
|
|
}
|
|
|
|
EndDrawing();
|
|
//----------------------------------------------------------------------------------
|
|
}
|
|
|
|
public void Unload()
|
|
{
|
|
}
|
|
|
|
public static int Main()
|
|
{
|
|
// Initialization
|
|
//--------------------------------------------------------------------------------------
|
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - window should close");
|
|
|
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
var game = new WindowShouldClose();
|
|
game.Init();
|
|
|
|
// Main game loop
|
|
while (!game.exitWindow)
|
|
{
|
|
game.Update();
|
|
}
|
|
|
|
game.Unload();
|
|
|
|
// De-Initialization
|
|
//--------------------------------------------------------------------------------------
|
|
CloseWindow(); // Close window and OpenGL context
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
return 0;
|
|
}
|
|
}
|