Feat/2 weapons foundation #6
@@ -68,3 +68,25 @@ func _explode(pos: Vector3) -> void:
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
col.take_damage(final_damage, target_pos, owner_player)
|
col.take_damage(final_damage, target_pos, owner_player)
|
||||||
|
|
||||||
|
# Visual Effect
|
||||||
|
var visual = MeshInstance3D.new()
|
||||||
|
var s_mesh = SphereMesh.new()
|
||||||
|
s_mesh.radius = explosion_radius
|
||||||
|
s_mesh.height = explosion_radius * 2.0
|
||||||
|
visual.mesh = s_mesh
|
||||||
|
|
||||||
|
var mat = StandardMaterial3D.new()
|
||||||
|
mat.albedo_color = Color(1.0, 0.5, 0.0, 0.6) # Translucent orange
|
||||||
|
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||||
|
mat.emission_enabled = true
|
||||||
|
mat.emission = Color(1.0, 0.3, 0.0)
|
||||||
|
visual.material_override = mat
|
||||||
|
|
||||||
|
visual.position = pos
|
||||||
|
get_tree().current_scene.add_child(visual)
|
||||||
|
|
||||||
|
var tween = visual.create_tween()
|
||||||
|
tween.tween_property(mat, "albedo_color:a", 0.0, 0.3)
|
||||||
|
tween.parallel().tween_property(visual, "scale", Vector3(1.1, 1.1, 1.1), 0.3)
|
||||||
|
tween.tween_callback(visual.queue_free)
|
||||||
|
|||||||
@@ -6,20 +6,25 @@ var turn_speed: float = 5.0
|
|||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if is_instance_valid(weapon_source) and weapon_source.get("homing_target_pos") != null:
|
if is_instance_valid(weapon_source) and weapon_source.get("homing_target_pos") != null:
|
||||||
var target: Vector3 = weapon_source.homing_target_pos
|
var is_painting = weapon_source.get("is_targeting")
|
||||||
if target != Vector3.ZERO:
|
if is_painting != null and not is_painting:
|
||||||
# Steer towards target
|
# Not painting target, just fly straight
|
||||||
var speed = velocity.length()
|
pass
|
||||||
var desired_dir = (target - global_position).normalized()
|
else:
|
||||||
var current_dir = velocity.normalized()
|
var target: Vector3 = weapon_source.homing_target_pos
|
||||||
|
if target != Vector3.ZERO:
|
||||||
var new_dir = current_dir.lerp(desired_dir, turn_speed * delta).normalized()
|
# Steer towards target
|
||||||
velocity = new_dir * speed
|
var speed = velocity.length()
|
||||||
|
var desired_dir = (target - global_position).normalized()
|
||||||
# Also rotate visually to match new direction
|
var current_dir = velocity.normalized()
|
||||||
var up_vec = Vector3.UP
|
|
||||||
if abs(new_dir.dot(up_vec)) > 0.99:
|
var new_dir = current_dir.lerp(desired_dir, turn_speed * delta).normalized()
|
||||||
up_vec = Vector3.RIGHT
|
velocity = new_dir * speed
|
||||||
transform.basis = Basis.looking_at(new_dir, up_vec)
|
|
||||||
|
# Also rotate visually to match new direction
|
||||||
|
var up_vec = Vector3.UP
|
||||||
|
if abs(new_dir.dot(up_vec)) > 0.99:
|
||||||
|
up_vec = Vector3.RIGHT
|
||||||
|
transform.basis = Basis.looking_at(new_dir, up_vec)
|
||||||
|
|
||||||
super._physics_process(delta)
|
super._physics_process(delta)
|
||||||
|
|||||||
Reference in New Issue
Block a user