feat: implement PlayerMovementController and grenade projectile system

This commit is contained in:
DottsGit
2026-06-09 23:04:32 -04:00
parent e8e5391d9f
commit 887d9c1523
4 changed files with 194 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
extends BouncingProjectile
class_name GrenadeProjectile
func _ready() -> void:
super._ready()
fuse_time = 4.0
bounciness = 0.5
drop_gravity = 15.0
explosion_radius = 5.0
damage = 120.0
func _setup_effects() -> void:
# Audio
flight_sound = AudioStreamPlayer3D.new()
flight_sound.bus = "SFX"
flight_sound.stream = load("res://assets/sounds/rocket_flight.wav")
flight_sound.autoplay = true
if flight_sound.stream is AudioStreamWAV:
flight_sound.stream.loop_mode = AudioStreamWAV.LOOP_FORWARD
flight_sound.unit_size = 50.0
flight_sound.max_db = 6.0
flight_sound.volume_db = 0.0
add_child(flight_sound)
flight_sound.play()
# Grenade Body
var body_mesh = MeshInstance3D.new()
var sphere = SphereMesh.new()
sphere.radius = 0.1
sphere.height = 0.2
var b_mat = StandardMaterial3D.new()
b_mat.albedo_color = Color(0.2, 0.4, 0.2) # Dark green
b_mat.roughness = 0.6
b_mat.metallic = 0.5
sphere.material = b_mat
body_mesh.mesh = sphere
add_child(body_mesh)
# Smoke Trail (White translucent tail)
smoke_sys = GPUParticles3D.new()
var smoke_mat = ParticleProcessMaterial.new()
smoke_mat.direction = Vector3(0, 0, 1)
smoke_mat.spread = 5.0
smoke_mat.initial_velocity_min = 0.0
smoke_mat.initial_velocity_max = 0.5
smoke_mat.gravity = Vector3(0, 0.1, 0) # Less floaty
var grad = Gradient.new()
grad.add_point(0.0, Color(1.0, 1.0, 1.0, 0.5))
grad.add_point(1.0, Color(1.0, 1.0, 1.0, 0.0))
var grad_tex = GradientTexture1D.new()
grad_tex.gradient = grad
smoke_mat.color_ramp = grad_tex
var curve = Curve.new()
curve.add_point(Vector2(0.0, 0.5))
curve.add_point(Vector2(1.0, 1.5))
var curve_tex = CurveTexture.new()
curve_tex.curve = curve
smoke_mat.scale_curve = curve_tex
var smoke_mesh = QuadMesh.new()
smoke_mesh.size = Vector2(0.2, 0.2)
var s_mat = StandardMaterial3D.new()
s_mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
s_mat.vertex_color_use_as_albedo = true
s_mat.albedo_texture = get_smoke_texture()
s_mat.billboard_mode = BaseMaterial3D.BILLBOARD_PARTICLES
s_mat.billboard_keep_scale = true
smoke_mesh.material = s_mat
smoke_sys.draw_pass_1 = smoke_mesh
smoke_sys.process_material = smoke_mat
smoke_sys.amount = 32
smoke_sys.lifetime = 1.0
smoke_sys.position = Vector3(0, 0, 0.0)
add_child(smoke_sys)