feat(foliage): add recovering grass trails and bush contact
This commit is contained in:
@@ -29,11 +29,28 @@ const BERRY_POSITIONS := [
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
add_to_group("interactive_foliage")
|
||||
_build_leaves()
|
||||
_build_berries()
|
||||
super()
|
||||
|
||||
|
||||
func set_contact_field(texture: Texture2D, world_rect: Vector4, enabled: bool) -> void:
|
||||
for child in [$Leaves, $Berries]:
|
||||
var material := (child as MultiMeshInstance3D).multimesh.mesh.material as ShaderMaterial
|
||||
material.set_shader_parameter("foliage_trail_map", texture)
|
||||
material.set_shader_parameter("foliage_trail_rect", world_rect)
|
||||
material.set_shader_parameter("foliage_trails_enabled", enabled)
|
||||
material.set_shader_parameter("contact_root", global_position)
|
||||
|
||||
|
||||
func set_contact_actors(positions: PackedVector3Array, count: int) -> void:
|
||||
for child in [$Leaves, $Berries]:
|
||||
var material := (child as MultiMeshInstance3D).multimesh.mesh.material as ShaderMaterial
|
||||
material.set_shader_parameter("interactor_count", count)
|
||||
material.set_shader_parameter("interactor_positions", positions)
|
||||
|
||||
|
||||
func get_presentation_instance_count() -> int:
|
||||
return LEAF_POSITIONS.size() + BERRY_POSITIONS.size()
|
||||
|
||||
@@ -75,6 +92,7 @@ func _build_leaves() -> void:
|
||||
material.set_shader_parameter("wind_strength", 0.045)
|
||||
material.set_shader_parameter("wind_speed", 0.48)
|
||||
material.set_shader_parameter("wind_phase", 1.7)
|
||||
material.set_shader_parameter("contact_strength", 0.55)
|
||||
mesh.material = material
|
||||
var transforms: Array[Transform3D] = []
|
||||
for index in LEAF_POSITIONS.size():
|
||||
@@ -90,9 +108,14 @@ func _build_berries() -> void:
|
||||
mesh.height = 0.21
|
||||
mesh.radial_segments = 8
|
||||
mesh.rings = 4
|
||||
var material := StandardMaterial3D.new()
|
||||
material.albedo_color = Color("#8f3148")
|
||||
material.roughness = 0.78
|
||||
var material := ShaderMaterial.new()
|
||||
material.shader = WIND_SHADER
|
||||
material.set_shader_parameter("albedo", Color("#8f3148"))
|
||||
material.set_shader_parameter("roughness", 0.78)
|
||||
material.set_shader_parameter("wind_strength", 0.012)
|
||||
material.set_shader_parameter("wind_speed", 0.48)
|
||||
material.set_shader_parameter("wind_phase", 1.7)
|
||||
material.set_shader_parameter("contact_strength", 0.55)
|
||||
mesh.material = material
|
||||
var transforms: Array[Transform3D] = []
|
||||
for position in BERRY_POSITIONS:
|
||||
|
||||
Reference in New Issue
Block a user