]> git.seodisparate.com - RockPaperScissorsDuel/commitdiff
Fix screenshake, add rotation to screenshake
authorStephen Seo <seo.disparate@gmail.com>
Sun, 26 Feb 2023 09:53:18 +0000 (18:53 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Sun, 26 Feb 2023 09:53:18 +0000 (18:53 +0900)
src/3d_renderer.cc
src/3d_renderer.h
src/constants.h

index 730f2663a07e6b01d5709ed3906bd366553373a6..d7ec4cc06c5dd064255a1a75cd9f4a9d2a26f4b5 100644 (file)
@@ -29,6 +29,7 @@ Renderer3D::Renderer3D()
       overview_timer(OVERVIEW_TIMER_MAX),
       button_color_timer(BUTTON_COLOR_TIME),
       screen_shake_factor(SCREEN_SHAKE_DEFAULT_FACTOR),
+      screen_shake_rot_factor(SCREEN_SHAKE_DEFAULT_ROT_FACTOR),
       screen_shake_timer(0.0F),
       waiting_spinner_timer(0.0F),
       received_pos(0),
@@ -430,6 +431,8 @@ void Renderer3D::update_impl() {
     } else {
       screen_shake_factor =
           screen_shake_timer / SCREEN_SHAKE_TIME * SCREEN_SHAKE_DEFAULT_FACTOR;
+      screen_shake_rot_factor = screen_shake_timer / SCREEN_SHAKE_TIME *
+                                SCREEN_SHAKE_DEFAULT_ROT_FACTOR;
     }
   }
 
@@ -590,20 +593,29 @@ void Renderer3D::draw_impl() {
 
     float offset_x = 0;
     float offset_y = 0;
+    float rotation = 0;
 
     if (flags.test(21)) {
       offset_x = screen_shake_factor * 2.0F * call_js_get_random() -
                  screen_shake_factor;
       offset_y = screen_shake_factor * 2.0F * call_js_get_random() -
                  screen_shake_factor;
+      rotation = screen_shake_rot_factor * 2.0F * call_js_get_random() -
+                 screen_shake_rot_factor;
     }
 
     BeginDrawing();
-    DrawTextureRec(renderTexture.value().texture,
-                   Rectangle{offset_x, offset_y,
-                             (float)renderTexture.value().texture.width,
-                             (float)-renderTexture.value().texture.height},
-                   Vector2{0, 0}, WHITE);
+    DrawTexturePro(
+        renderTexture.value().texture,
+        Rectangle{0, 0, (float)renderTexture.value().texture.width,
+                  (float)-renderTexture.value().texture.height},
+        Rectangle{offset_x + (float)(renderTexture.value().texture.width / 2),
+                  offset_y + (float)(renderTexture.value().texture.height / 2),
+                  (float)renderTexture.value().texture.width,
+                  (float)renderTexture.value().texture.height},
+        Vector2{(float)(renderTexture.value().texture.width / 2),
+                (float)(renderTexture.value().texture.height / 2)},
+        rotation, WHITE);
     EndDrawing();
   } else {
     EndDrawing();
index 274d20c46b46a63ea597947dd4cab246c5890c8e..c47dc1f345bd3587fd2b63513f700f4750923f40 100644 (file)
@@ -129,6 +129,7 @@ class Renderer3D : public GameRenderer {
   float overview_timer;
   float button_color_timer;
   float screen_shake_factor;
+  float screen_shake_rot_factor;
   float screen_shake_timer;
   float waiting_spinner_timer;
 
index 9079878f59277cfa3c758314e9f0c69bf849798d..4f890b95846c783088a95976694281aa5425bff4 100644 (file)
@@ -72,6 +72,7 @@ constexpr float BUTTON_COLOR_MAX = 180.0F;
 
 constexpr float SCREEN_SHAKE_DEFAULT_FACTOR = 7.0F;
 constexpr float SCREEN_SHAKE_TIME = 0.5F;
+constexpr float SCREEN_SHAKE_DEFAULT_ROT_FACTOR = 2.0F;
 
 constexpr int ANIM_FALLING_AMT = 7;
 constexpr int ANIM_FALLING_OPP_THRESHOLD = 5;