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("生きてるね。"); } }