Add host-authoritative multiplayer fishing
This commit is contained in:
parent
b0e2e84ba4
commit
d3e3bf4053
17 changed files with 1672 additions and 23 deletions
91
fishing/remote_fishing_presentation.gd
Normal file
91
fishing/remote_fishing_presentation.gd
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
class_name RemoteFishingPresentation
|
||||
extends Node3D
|
||||
|
||||
var _owner: Player
|
||||
var _bobber: MeshInstance3D
|
||||
var _line: MeshInstance3D
|
||||
var _line_mesh := ImmediateMesh.new()
|
||||
var _target: Vector3
|
||||
var _active: bool = false
|
||||
|
||||
|
||||
func setup(owner: Player) -> void:
|
||||
_owner = owner
|
||||
_bobber = MeshInstance3D.new()
|
||||
var bobber_mesh := SphereMesh.new()
|
||||
bobber_mesh.radius = 0.12
|
||||
bobber_mesh.height = 0.24
|
||||
_bobber.mesh = bobber_mesh
|
||||
var bobber_material := StandardMaterial3D.new()
|
||||
bobber_material.albedo_color = Color(0.92, 0.12, 0.08, 1.0)
|
||||
bobber_material.roughness = 0.45
|
||||
_bobber.material_override = bobber_material
|
||||
add_child(_bobber)
|
||||
_line = MeshInstance3D.new()
|
||||
_line.mesh = _line_mesh
|
||||
var line_material := StandardMaterial3D.new()
|
||||
line_material.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
line_material.albedo_color = Color(0.9, 0.9, 0.82, 1.0)
|
||||
_line.material_override = line_material
|
||||
add_child(_line)
|
||||
cleanup()
|
||||
|
||||
|
||||
func show_cast(target: Vector3) -> void:
|
||||
if _owner == null or not target.is_finite():
|
||||
return
|
||||
_active = true
|
||||
_target = target
|
||||
_bobber.global_position = target
|
||||
_bobber.visible = true
|
||||
_line.visible = true
|
||||
_owner.set_active_item_is_rod(true)
|
||||
_redraw_line()
|
||||
|
||||
|
||||
func update_bobber(position: Vector3) -> void:
|
||||
if not _active or not position.is_finite():
|
||||
return
|
||||
_target = position
|
||||
_bobber.global_position = position
|
||||
_redraw_line()
|
||||
|
||||
|
||||
func show_bite() -> void:
|
||||
if not _active:
|
||||
return
|
||||
var tween: Tween = create_tween()
|
||||
tween.tween_property(_bobber, "scale", Vector3.ONE * 0.7, 0.08)
|
||||
tween.tween_property(_bobber, "scale", Vector3.ONE, 0.12)
|
||||
|
||||
|
||||
func cleanup() -> void:
|
||||
_active = false
|
||||
if _bobber != null:
|
||||
_bobber.visible = false
|
||||
_bobber.scale = Vector3.ONE
|
||||
if _line != null:
|
||||
_line.visible = false
|
||||
_line_mesh.clear_surfaces()
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if _active:
|
||||
_redraw_line()
|
||||
|
||||
|
||||
func _redraw_line() -> void:
|
||||
if _owner == null or not is_instance_valid(_owner):
|
||||
cleanup()
|
||||
return
|
||||
var tip: Marker3D = _owner.get_fishing_rod_tip()
|
||||
if tip == null:
|
||||
return
|
||||
_line_mesh.clear_surfaces()
|
||||
_line_mesh.surface_begin(Mesh.PRIMITIVE_LINE_STRIP)
|
||||
_line_mesh.surface_add_vertex(to_local(tip.global_position))
|
||||
var midpoint: Vector3 = tip.global_position.lerp(_target, 0.5)
|
||||
midpoint.y -= 0.12
|
||||
_line_mesh.surface_add_vertex(to_local(midpoint))
|
||||
_line_mesh.surface_add_vertex(to_local(_target))
|
||||
_line_mesh.surface_end()
|
||||
Loading…
Add table
Add a link
Reference in a new issue