From 7a6ef36e9b4895d5cc7e9f65d151c7bf114ee413 Mon Sep 17 00:00:00 2001
From: jnc-explosion <himajin8634@gmail.com>
Date: Mon, 15 Jan 2024 18:26:03 +0900
Subject: [PATCH] =?UTF-8?q?=E4=BF=BA=E3=81=AF=E3=81=8C=E3=82=93=E3=81=B0?=
 =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=82=88=E2=80=A6=E2=80=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/engine/GameObject.d                |  2 +
 src/engine/components/SpriteRenderer.d |  1 +
 src/engine/core/package.d              |  2 +-
 src/engine/extra/Timer.d               |  6 +--
 src/engine/extra/WindowParam.d         |  8 +++
 src/engine/extra/package.d             |  1 +
 src/game/effects/Fade.d                | 71 ++++++++++++++++++++++++++
 src/game/effects/package.d             |  3 ++
 src/game/entities/package.d            |  2 +-
 src/game/package.d                     |  1 +
 src/game/stages/title/TitleScene.d     |  4 ++
 11 files changed, 95 insertions(+), 6 deletions(-)
 create mode 100644 src/engine/extra/WindowParam.d
 create mode 100644 src/game/effects/Fade.d
 create mode 100644 src/game/effects/package.d

diff --git a/src/engine/GameObject.d b/src/engine/GameObject.d
index a11d2a3..a8ccc8e 100644
--- a/src/engine/GameObject.d
+++ b/src/engine/GameObject.d
@@ -50,6 +50,7 @@ class GameObject: Loggable {
 
   package void realSetup(Context* ctx) {
     this._ctx = ctx;
+    SDL_SetRenderDrawBlendMode(ctx.r, SDL_BLENDMODE_BLEND);
     debug {
       layer++;
       debugSetupPre;
@@ -118,6 +119,7 @@ class GameObject: Loggable {
   }
 
   void color(ubyte r, ubyte g, ubyte b, ubyte a = 255) {
+    //dbg("僕は皇帝Hikakin: ", r, ", ", g, ", ", b, ", ", a);
     ctx.layers[layer] ~= {
       SDL_SetRenderDrawColor(ctx.r, r, g, b, a);
     };
diff --git a/src/engine/components/SpriteRenderer.d b/src/engine/components/SpriteRenderer.d
index 8693815..5be31ee 100644
--- a/src/engine/components/SpriteRenderer.d
+++ b/src/engine/components/SpriteRenderer.d
@@ -28,6 +28,7 @@ class SpriteRenderer: Component {
     this.colorArr = colorArr;
     this.invisdraw = invisdraw;
   }
+  
   // Vec3
   this(Vec2 psize, ubyte[3] colorArr = [255, 255, 255], bool invisdraw = false){
     this.psize = psize;
diff --git a/src/engine/core/package.d b/src/engine/core/package.d
index e755d70..3f6ecd3 100644
--- a/src/engine/core/package.d
+++ b/src/engine/core/package.d
@@ -1,7 +1,7 @@
 module engine.core;
 
 public import engine.core.media;
-public import engine.core.physics;
+//public import engine.core.physics;
 
 public import engine.core.Nullpo;
 public import engine.core.Vec2;
diff --git a/src/engine/extra/Timer.d b/src/engine/extra/Timer.d
index 80a5f5c..1f4f7c5 100644
--- a/src/engine/extra/Timer.d
+++ b/src/engine/extra/Timer.d
@@ -5,10 +5,8 @@ import sdl;
 class Timer {
   ulong started = 0;
 
-  this(bool autostart = true) {
-    if(autostart) start;
-  }
+  this() { reset; }
 
-  auto start() => started = SDL_GetTicks64;
+  auto reset() => started = SDL_GetTicks64;
   auto cur() => SDL_GetTicks64 - started;
 }
diff --git a/src/engine/extra/WindowParam.d b/src/engine/extra/WindowParam.d
new file mode 100644
index 0000000..ae6f1ac
--- /dev/null
+++ b/src/engine/extra/WindowParam.d
@@ -0,0 +1,8 @@
+module engine.extra.WindowParam;
+
+import std;
+import engine;
+
+class WindowParam: GameObject {
+  Vec2 size() => ctx.windowSize;
+}
\ No newline at end of file
diff --git a/src/engine/extra/package.d b/src/engine/extra/package.d
index 334156f..385a54b 100644
--- a/src/engine/extra/package.d
+++ b/src/engine/extra/package.d
@@ -5,3 +5,4 @@ public import engine.extra.ui;
 public import engine.extra.DebugView;
 public import engine.extra.Router;
 public import engine.extra.Timer;
+public import engine.extra.WindowParam;
diff --git a/src/game/effects/Fade.d b/src/game/effects/Fade.d
new file mode 100644
index 0000000..361f0c4
--- /dev/null
+++ b/src/game/effects/Fade.d
@@ -0,0 +1,71 @@
+module game.effects.Fade;
+
+import std;
+import game;
+import engine;
+
+class Fade: GameObject {
+  Transform tform;
+  SpriteRenderer sr;
+
+  WindowParam win;
+  Timer tmr;
+
+  bool isDisplay = false, isChanging = false;
+  uint fadetime;
+  ubyte[3] color;
+  private ubyte tp = 255, changeTo = 0;
+
+  bool display(bool d){
+    changeTo = d ? 0 : 255;
+    isChanging = true;
+    return (changeTo == 255);
+  }
+
+  bool swap(){
+    changeTo = (changeTo == 255) ? 0 : 255;
+    isChanging = true;
+    return (changeTo == 255);
+  }
+
+  void show(){
+    changeTo = 0;
+    isChanging = true;
+  }
+
+  void hide(){
+    changeTo = 255;
+    isChanging = true;
+  }
+
+  this(ubyte[3] color = [0, 0, 0], uint fadetime = 1) {
+    this.color = color;
+    this.fadetime = fadetime;
+    tmr = new Timer;
+  }
+
+  override void setup() {
+    tform = register(new Transform);
+    win = register(new WindowParam);
+    ubyte[4] ubyuf = color ~ 255;
+    dbg(ubyuf, ", ", ubyuf.length);
+    sr = register(new SpriteRenderer(win.size, ubyuf));
+  
+    //win = register(new WindowParam);
+    //tmr = register(new Timer);
+  }
+
+  override void loop() {
+    if(tmr.cur >= fadetime){
+      if(!isChanging) goto afterfade; // 表示と変化先が等しい(変化済み)
+      (changeTo == 0) ? tp-=4 : tp+=4;
+      if(changeTo == tp){
+        isChanging = false;
+      }
+      tmr.reset;
+    }
+    sr.colorArr = color ~ tp;
+    dbg(sr.colorArr);
+    afterfade:
+  }
+}
\ No newline at end of file
diff --git a/src/game/effects/package.d b/src/game/effects/package.d
new file mode 100644
index 0000000..2f7f6ff
--- /dev/null
+++ b/src/game/effects/package.d
@@ -0,0 +1,3 @@
+module game.effects;
+
+public import game.effects.Fade;
diff --git a/src/game/entities/package.d b/src/game/entities/package.d
index 33e788b..280317c 100644
--- a/src/game/entities/package.d
+++ b/src/game/entities/package.d
@@ -11,4 +11,4 @@ public import game.entities.Missile;
 public import game.entities.Point;
 public import game.entities.TimeLimitClock;
 public import game.entities.UI;
-public import game.entities.Title;
\ No newline at end of file
+public import game.entities.Title;
diff --git a/src/game/package.d b/src/game/package.d
index 0833332..8f65eb0 100644
--- a/src/game/package.d
+++ b/src/game/package.d
@@ -3,5 +3,6 @@ module game;
 public import game.entities;
 public import game.stages;
 public import game.ui;
+public import game.effects;
 
 public import game.Game;
diff --git a/src/game/stages/title/TitleScene.d b/src/game/stages/title/TitleScene.d
index 430209f..fcd73c6 100644
--- a/src/game/stages/title/TitleScene.d
+++ b/src/game/stages/title/TitleScene.d
@@ -9,6 +9,7 @@ class TitleScene: RouteObject {
   AudioSource audio;
   Transform tform;
   Timer hoge; // gomi
+  Fade fd;
 
   this() {
     hoge = new Timer;
@@ -24,9 +25,12 @@ class TitleScene: RouteObject {
     audio.play(-1);
     audio.volume(15);
     auto title = register(new TextBox("Hello"));
+    fd = register(new Fade([255, 0, 0]));
   }
 
   override void loop() {
     if(hoge.cur > 5_000) router.go(Routes.Home);
+    if(!fd.isChanging) {dbg("ゲッHikamaniya…"); fd.swap;}
+    dbg("生きてるね。");
   }
 }