50 lines
1.4 KiB
GDScript
50 lines
1.4 KiB
GDScript
extends CPUParticles3D
|
|
## One-shot blood spray. Add as a child of whatever bleeds, then call burst().
|
|
|
|
func _ready() -> void:
|
|
var mat := StandardMaterial3D.new()
|
|
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
|
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
|
mat.vertex_color_use_as_albedo = true
|
|
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
|
|
|
|
var sphere := SphereMesh.new()
|
|
sphere.radius = 0.07
|
|
sphere.height = 0.14
|
|
sphere.radial_segments = 4
|
|
sphere.rings = 2
|
|
sphere.material = mat
|
|
|
|
var ramp := Gradient.new()
|
|
ramp.set_color(0, Color(1.0, 0.02, 0.02, 1.0))
|
|
ramp.set_color(1, Color(0.25, 0.0, 0.0, 0.0))
|
|
|
|
var scale_curve := Curve.new()
|
|
scale_curve.add_point(Vector2(0.0, 1.0))
|
|
scale_curve.add_point(Vector2(0.6, 0.5))
|
|
scale_curve.add_point(Vector2(1.0, 0.0))
|
|
|
|
mesh = sphere
|
|
color_ramp = ramp
|
|
scale_amount_curve = scale_curve
|
|
one_shot = true
|
|
explosiveness = 0.9
|
|
amount = 25
|
|
lifetime = 1.1
|
|
randomness = 0.4
|
|
local_coords = false
|
|
spread = 80.0
|
|
gravity = Vector3(0.0, -7.0, 0.0)
|
|
initial_velocity_min = 4.0
|
|
initial_velocity_max = 11.0
|
|
scale_amount_min = 0.5
|
|
scale_amount_max = 1.6
|
|
emitting = false
|
|
|
|
|
|
# Fire a burst at a world position, sprayed along dir (biased upward).
|
|
func burst(at: Vector3, dir: Vector3) -> void:
|
|
global_position = at
|
|
direction = (dir * 0.6 + Vector3.UP * 0.4).normalized()
|
|
restart()
|