generated from krampus/template-godot4
Gunkable clear_total_updated signal also includes delta since last call
This commit is contained in:
parent
9bf5fa6f53
commit
7e4b3024d3
@ -2,22 +2,21 @@ class_name GrunkDust extends GPUParticles3D
|
||||
|
||||
@export var emit_scale := 0.1
|
||||
|
||||
var _last_clear_total := 0.0
|
||||
var _emitting_this_frame := false
|
||||
|
||||
|
||||
func _on_gunkable_clear_total_updated(clear_total: float) -> void:
|
||||
var delta := maxf(clear_total - _last_clear_total, 0)
|
||||
|
||||
func _on_gunkable_clear_total_updated(_clear_total: float, delta: float) -> void:
|
||||
amount_ratio = clampf(delta * emit_scale, 0, 1)
|
||||
if delta > 0:
|
||||
_emitting_this_frame = true
|
||||
|
||||
_last_clear_total = clear_total
|
||||
|
||||
|
||||
func _on_gunkable_painted_at_point(point: Vector3, normal: Vector3) -> void:
|
||||
look_at_from_position(point, point + normal, global_basis.y)
|
||||
# An arbitrary orthogonal vector
|
||||
# NOTE: will not be orthogonal 100% of the time, as a consequence of the Hairy Ball Theorem
|
||||
# ... No, seriously.
|
||||
var ortho := Vector3(normal.y + normal.z, normal.z - normal.x, -normal.x - normal.y)
|
||||
look_at_from_position(point, point + normal, ortho)
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
|
@ -18,5 +18,5 @@ func _deferred_init() -> void:
|
||||
gunkable.trigger_recompute()
|
||||
|
||||
|
||||
func _on_clear_total_updated(clear_total: float) -> void:
|
||||
func _on_clear_total_updated(clear_total: float, _delta: float) -> void:
|
||||
spot_light_3d.visible = clear_total > threshold
|
||||
|
@ -83,7 +83,7 @@ func _animation_finished(anim_name: StringName) -> void:
|
||||
interactive.enabled = enabled
|
||||
|
||||
|
||||
func _on_clear_total_updated(clear_total: float) -> void:
|
||||
func _on_clear_total_updated(clear_total: float, _delta: float) -> void:
|
||||
if not clean and clear_total >= CLEAN_THRESHOLD:
|
||||
_on_clean()
|
||||
|
||||
|
@ -2,7 +2,7 @@ class_name Gunkable extends Node
|
||||
## Component behavior for gunkable props & geometry.
|
||||
|
||||
## Emitted from the main thread after the clear total is asynchronously updated.
|
||||
signal clear_total_updated(clear_total: float)
|
||||
signal clear_total_updated(clear_total: float, delta: float)
|
||||
|
||||
## Emitted from the main thread any time a point is painted
|
||||
signal painted_at_point(point: Vector3, normal: Vector3)
|
||||
@ -263,7 +263,7 @@ func _process(_delta: float) -> void:
|
||||
_mutex.unlock()
|
||||
var delta := new_total - _prev_clear_total
|
||||
if abs(delta) > CLEAR_TOTAL_EPSILON:
|
||||
clear_total_updated.emit(new_total)
|
||||
clear_total_updated.emit(new_total, delta)
|
||||
# Do not fire signal on first compute after initialization
|
||||
# This prevents the player from collecting the grunk from the initial mask.
|
||||
if _prev_clear_total >= 0 and World.instance:
|
||||
|
@ -1,12 +1,7 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://cdi5sl60mw1po"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cdi5sl60mw1po"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://co0g2klfmor48" path="res://src/world/gunkable/gunkable.gd" id="1_47xoo"]
|
||||
[ext_resource type="Script" uid="uid://bom5qysgfvap1" path="res://src/world/gunkable/draw_controller.gd" id="2_srn13"]
|
||||
[ext_resource type="PackedScene" uid="uid://c3iv00vmdqxp0" path="res://src/effects/grunk_dust/grunk_dust.tscn" id="3_vad3y"]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_3mpo3"]
|
||||
radius = 0.1
|
||||
height = 1.0
|
||||
|
||||
[node name="Gunkable" type="Node" groups=["Persistent"]]
|
||||
script = ExtResource("1_47xoo")
|
||||
@ -47,19 +42,6 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("2_srn13")
|
||||
|
||||
[node name="GunkDust" parent="." instance=ExtResource("3_vad3y")]
|
||||
top_level = true
|
||||
emitting = false
|
||||
amount = 64
|
||||
lifetime = 1.2
|
||||
|
||||
[node name="DebugMesh" type="MeshInstance3D" parent="GunkDust"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
|
||||
visible = false
|
||||
mesh = SubResource("CapsuleMesh_3mpo3")
|
||||
|
||||
[connection signal="clear_total_updated" from="." to="GunkDust" method="_on_gunkable_clear_total_updated"]
|
||||
[connection signal="painted_at_point" from="." to="GunkDust" method="_on_gunkable_painted_at_point"]
|
||||
[connection signal="visibility_changed" from="MaskViewport/MaskClear" to="MaskViewport/MaskControl" method="_set_dirty"]
|
||||
[connection signal="visibility_changed" from="MaskViewport/MaskTexture" to="MaskViewport/MaskControl" method="_set_dirty"]
|
||||
[connection signal="draw" from="MaskViewport/MaskControl" to="." method="_on_mask_painted"]
|
||||
|
Loading…
x
Reference in New Issue
Block a user