|
@@ -0,0 +1,120 @@
|
|
|
+/*******************************************************************************************
|
|
|
+*
|
|
|
+* raylib [textures] example - sprite explosion
|
|
|
+*
|
|
|
+* This example has been created using raylib 2.5 (www.raylib.com)
|
|
|
+* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
|
|
+*
|
|
|
+* Copyright (c) 2019 Anata and Ramon Santamaria (@raysan5)
|
|
|
+*
|
|
|
+********************************************************************************************/
|
|
|
+
|
|
|
+#include "raylib.h"
|
|
|
+
|
|
|
+#define NUM_FRAMES 8
|
|
|
+#define NUM_LINES 6
|
|
|
+
|
|
|
+int main()
|
|
|
+{
|
|
|
+ // Initialization
|
|
|
+ //--------------------------------------------------------------------------------------
|
|
|
+ const int screenWidth = 800;
|
|
|
+ const int screenHeight = 450;
|
|
|
+
|
|
|
+ InitWindow(screenWidth, screenHeight, "raylib [textures] example - sprite explosion");
|
|
|
+
|
|
|
+ InitAudioDevice();
|
|
|
+
|
|
|
+ // Load explosion sound
|
|
|
+ Sound fxBoom = LoadSound("resources/boom.wav");
|
|
|
+
|
|
|
+ // Load explosion texture
|
|
|
+ Texture2D explosion = LoadTexture("resources/explosion2.png");
|
|
|
+
|
|
|
+ // Init variables for animation
|
|
|
+ int frameWidth = explosion.width/NUM_FRAMES; // Sprite one frame rectangle width
|
|
|
+ int frameHeight = explosion.height/NUM_LINES; // Sprite one frame rectangle height
|
|
|
+ int currentFrame = 0;
|
|
|
+ int currentLine = 0;
|
|
|
+
|
|
|
+ Rectangle frameRec = { 0, 0, frameWidth, frameHeight };
|
|
|
+ Vector2 position = { 0, 0 };
|
|
|
+
|
|
|
+ bool active = false;
|
|
|
+ int framesCounter = 0;
|
|
|
+
|
|
|
+ SetTargetFPS(120);
|
|
|
+ //--------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+ // Main game loop
|
|
|
+ while (!WindowShouldClose()) // Detect window close button or ESC key
|
|
|
+ {
|
|
|
+ // Update
|
|
|
+ //----------------------------------------------------------------------------------
|
|
|
+
|
|
|
+ // Check for mouse button pressed and activate explosion (if not active)
|
|
|
+ if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !active)
|
|
|
+ {
|
|
|
+ position = GetMousePosition();
|
|
|
+ active = true;
|
|
|
+
|
|
|
+ position.x -= frameWidth/2;
|
|
|
+ position.y -= frameHeight/2;
|
|
|
+
|
|
|
+ PlaySound(fxBoom);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Compute explosion animation frames
|
|
|
+ if (active)
|
|
|
+ {
|
|
|
+ framesCounter++;
|
|
|
+
|
|
|
+ if (framesCounter > 2)
|
|
|
+ {
|
|
|
+ currentFrame++;
|
|
|
+
|
|
|
+ if (currentFrame >= NUM_FRAMES)
|
|
|
+ {
|
|
|
+ currentFrame = 0;
|
|
|
+ currentLine++;
|
|
|
+
|
|
|
+ if (currentLine >= NUM_LINES)
|
|
|
+ {
|
|
|
+ currentLine = 0;
|
|
|
+ active = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ framesCounter = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ frameRec.x = frameWidth*currentFrame;
|
|
|
+ frameRec.y = frameHeight*currentLine;
|
|
|
+ //----------------------------------------------------------------------------------
|
|
|
+
|
|
|
+ // Draw
|
|
|
+ //----------------------------------------------------------------------------------
|
|
|
+ BeginDrawing();
|
|
|
+
|
|
|
+ ClearBackground(RAYWHITE);
|
|
|
+
|
|
|
+ // Draw explosion required frame rectangle
|
|
|
+ if (active) DrawTextureRec(explosion, frameRec, position, WHITE);
|
|
|
+
|
|
|
+ EndDrawing();
|
|
|
+ //----------------------------------------------------------------------------------
|
|
|
+ }
|
|
|
+
|
|
|
+ // De-Initialization
|
|
|
+ //--------------------------------------------------------------------------------------
|
|
|
+ UnloadTexture(explosion); // Unload texture
|
|
|
+ UnloadSound(fxBoom); // Unload sound
|
|
|
+
|
|
|
+ CloseAudioDevice();
|
|
|
+
|
|
|
+ CloseWindow(); // Close window and OpenGL context
|
|
|
+ //--------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|