|  | /******************************************************************************************* | 
						
						
							|  | * | 
						
						
							|  | *   raylib [textures] example - sprite button | 
						
						
							|  | * | 
						
						
							|  | *   Example originally created with raylib 2.5, last time updated with raylib 2.5 | 
						
						
							|  | * | 
						
						
							|  | *   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) 2019-2024 Ramon Santamaria (@raysan5) | 
						
						
							|  | * | 
						
						
							|  | ********************************************************************************************/ | 
						
						
							|  | 
 | 
						
						
							|  | #include "raylib.h" | 
						
						
							|  |  | 
						
						
							|  | #define NUM_FRAMES  3       // Number of frames (rectangles) for the button sprite texture | 
						
						
							|  |  | 
						
						
							|  | //------------------------------------------------------------------------------------ | 
						
						
							|  | // Program main entry point | 
						
						
							|  | //------------------------------------------------------------------------------------ | 
						
						
							|  | int main(void) | 
						
						
							|  | { | 
						
						
							|  |     // Initialization | 
						
						
							|  |     //-------------------------------------------------------------------------------------- | 
						
						
							|  |     const int screenWidth = 800; | 
						
						
							|  |     const int screenHeight = 450; | 
						
						
							|  | 
 | 
						
						
							|  |     InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite button"); | 
						
						
							|  | 
 | 
						
						
							|  |     InitAudioDevice();      // Initialize audio device | 
						
						
							|  |  | 
						
						
							|  |     Sound fxButton = LoadSound("resources/buttonfx.wav");   // Load button sound | 
						
						
							|  |     Texture2D button = LoadTexture("resources/button.png"); // Load button texture | 
						
						
							|  |  | 
						
						
							|  |     // Define frame rectangle for drawing | 
						
						
							|  |     float frameHeight = (float)button.height/NUM_FRAMES; | 
						
						
							|  |     Rectangle sourceRec = { 0, 0, (float)button.width, frameHeight }; | 
						
						
							|  | 
 | 
						
						
							|  |     // Define button bounds on screen | 
						
						
							|  |     Rectangle btnBounds = { screenWidth/2.0f - button.width/2.0f, screenHeight/2.0f - button.height/NUM_FRAMES/2.0f, (float)button.width, frameHeight }; | 
						
						
							|  | 
 | 
						
						
							|  |     int btnState = 0;               // Button state: 0-NORMAL, 1-MOUSE_HOVER, 2-PRESSED | 
						
						
							|  |     bool btnAction = false;         // Button action should be activated | 
						
						
							|  |  | 
						
						
							|  |     Vector2 mousePoint = { 0.0f, 0.0f }; | 
						
						
							|  | 
 | 
						
						
							|  |     SetTargetFPS(60); | 
						
						
							|  |     //-------------------------------------------------------------------------------------- | 
						
						
							|  |  | 
						
						
							|  |     // Main game loop | 
						
						
							|  |     while (!WindowShouldClose())    // Detect window close button or ESC key | 
						
						
							|  |     { | 
						
						
							|  |         // Update | 
						
						
							|  |         //---------------------------------------------------------------------------------- | 
						
						
							|  |         mousePoint = GetMousePosition(); | 
						
						
							|  |         btnAction = false; | 
						
						
							|  | 
 | 
						
						
							|  |         // Check button state | 
						
						
							|  |         if (CheckCollisionPointRec(mousePoint, btnBounds)) | 
						
						
							|  |         { | 
						
						
							|  |             if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) btnState = 2; | 
						
						
							|  |             else btnState = 1; | 
						
						
							|  | 
 | 
						
						
							|  |             if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) btnAction = true; | 
						
						
							|  |         } | 
						
						
							|  |         else btnState = 0; | 
						
						
							|  | 
 | 
						
						
							|  |         if (btnAction) | 
						
						
							|  |         { | 
						
						
							|  |             PlaySound(fxButton); | 
						
						
							|  | 
 | 
						
						
							|  |             // TODO: Any desired action | 
						
						
							|  |         } | 
						
						
							|  | 
 | 
						
						
							|  |         // Calculate button frame rectangle to draw depending on button state | 
						
						
							|  |         sourceRec.y = btnState*frameHeight; | 
						
						
							|  |         //---------------------------------------------------------------------------------- | 
						
						
							|  |  | 
						
						
							|  |         // Draw | 
						
						
							|  |         //---------------------------------------------------------------------------------- | 
						
						
							|  |         BeginDrawing(); | 
						
						
							|  | 
 | 
						
						
							|  |             ClearBackground(RAYWHITE); | 
						
						
							|  | 
 | 
						
						
							|  |             DrawTextureRec(button, sourceRec, (Vector2){ btnBounds.x, btnBounds.y }, WHITE); // Draw button frame | 
						
						
							|  |  | 
						
						
							|  |         EndDrawing(); | 
						
						
							|  |         //---------------------------------------------------------------------------------- | 
						
						
							|  |     } | 
						
						
							|  | 
 | 
						
						
							|  |     // De-Initialization | 
						
						
							|  |     //-------------------------------------------------------------------------------------- | 
						
						
							|  |     UnloadTexture(button);  // Unload button texture | 
						
						
							|  |     UnloadSound(fxButton);  // Unload sound | 
						
						
							|  |  | 
						
						
							|  |     CloseAudioDevice();     // Close audio device | 
						
						
							|  |  | 
						
						
							|  |     CloseWindow();          // Close window and OpenGL context | 
						
						
							|  |     //-------------------------------------------------------------------------------------- | 
						
						
							|  |  | 
						
						
							|  |     return 0; | 
						
						
							|  | } |