diff --git a/src/Models/Flames.zig b/src/Models/Flames.zig new file mode 100644 index 0000000..b62faf5 --- /dev/null +++ b/src/Models/Flames.zig @@ -0,0 +1,39 @@ +const std = @import("std"); +const raylib = @import("raylib"); +const Shared = @import("../Shared.zig").Shared; + +pub const Flames = struct { + var frame: f32 = 0; + + pub inline fn Draw( + position: raylib.Rectangle, + rotation: f32, + ) void { + if (frame == std.math.floatMax(f32)) { + frame = 0; + } + frame += raylib.getFrameTime(); + + const fireTexture = Shared.Texture.Get(.Fire); + + const waveShader = Shared.Shader.Get(.Wave); + const waveShaderLoc = raylib.getShaderLocation(waveShader, "seconds"); + raylib.setShaderValue(waveShader, waveShaderLoc, &frame, @intFromEnum(raylib.ShaderUniformDataType.shader_uniform_float)); + waveShader.activate(); + defer waveShader.deactivate(); + + raylib.drawTexturePro( + fireTexture, + raylib.Rectangle.init( + 0, + 0, + @as(f32, @floatFromInt(fireTexture.width)), + @as(f32, @floatFromInt(fireTexture.height)), + ), + position, + raylib.Vector2.init(position.width / 2, position.height), + rotation, + Shared.Color.White.alpha(0.75), + ); + } +}; diff --git a/src/Models/Player.zig b/src/Models/Player.zig index c5ad4fa..214a3bc 100644 --- a/src/Models/Player.zig +++ b/src/Models/Player.zig @@ -4,6 +4,7 @@ const raylib_math = @import("raylib-math"); const Shared = @import("../Shared.zig").Shared; const Shoot = @import("./Shoot.zig").Shoot; const Alien = @import("./Alien.zig").Alien; +const Flames = @import("./Flames.zig").Flames; pub const Player = struct { position: raylib.Vector2, @@ -208,6 +209,16 @@ pub const Player = struct { const shipTexture = Shared.Texture.Get(.Ship); const shipWidthF = @as(f32, @floatFromInt(shipTexture.width)); const shipHeightF = @as(f32, @floatFromInt(shipTexture.height)); + + if (Shared.Input.Up_Held()) { + Flames.Draw(raylib.Rectangle.init( + self.position.x, + self.position.y, + base_size, + (base_size * 2) * self.acceleration, + ), self.rotation - 180); + } + raylib.drawTexturePro( shipTexture, raylib.Rectangle.init(0, 0, shipWidthF, shipHeightF), diff --git a/src/Shaders/Wave.fs b/src/Shaders/Wave.fs index c800892..ab7ed48 100644 --- a/src/Shaders/Wave.fs +++ b/src/Shaders/Wave.fs @@ -16,10 +16,10 @@ uniform vec2 size; float freqX = 25.0; float freqY = 25.0; -float ampX = 20.0; -float ampY = 20.0; -float speedX = 4.0; -float speedY = 4.0; +float ampX = 40.0; +float ampY = 40.0; +float speedX = 8.0; +float speedY = 8.0; void main() { float pixelWidth = 1.0 / size.x; diff --git a/src/Textures/Fire.png b/src/Textures/Fire.png new file mode 100644 index 0000000..3e631fc Binary files /dev/null and b/src/Textures/Fire.png differ