feat: expand progression and multiplayer systems
Add named save slots, progression import/export, and a unified play flow. Add live friend requests, presence, invitations, and relationship controls without durable discovery-server social storage. Advance the network protocol with isolated channels, movement reconciliation, late-join recovery, fishing replication, and animation synchronization. Preserve per-species catch totals, refine generated-world startup and water recovery, and complete the related input and interface improvements.
This commit is contained in:
parent
1db1a5b754
commit
3b84bfe3a0
97 changed files with 7869 additions and 982 deletions
|
|
@ -52,6 +52,7 @@ var _canvas_states: Dictionary[String, Dictionary] = {}
|
|||
var _canvas_nodes: Dictionary[String, SurfaceDrawingCanvas] = {}
|
||||
var _selected_canvas_id: String = ""
|
||||
var _hovered_canvas_id: String = ""
|
||||
var _last_hovered_canvas_id: String = ""
|
||||
var _brush_preview: MultiMeshInstance3D
|
||||
var _brush_preview_multimesh: MultiMesh
|
||||
var _brush_preview_material: ShaderMaterial
|
||||
|
|
@ -236,6 +237,7 @@ func activate(
|
|||
return
|
||||
_active = true
|
||||
_placing_grid = false
|
||||
_last_hovered_canvas_id = ""
|
||||
_clear_stamp_mode()
|
||||
_eraser_mode = false
|
||||
_clear_armed_guide_action(false)
|
||||
|
|
@ -267,6 +269,7 @@ func deactivate() -> void:
|
|||
_reset_stroke()
|
||||
_selected_canvas_id = ""
|
||||
_hovered_canvas_id = ""
|
||||
_last_hovered_canvas_id = ""
|
||||
_aim_hit.clear()
|
||||
_hide_previews()
|
||||
_refresh_stencil_visibility()
|
||||
|
|
@ -849,10 +852,22 @@ func select_saved_stamp(path: String) -> bool:
|
|||
|
||||
func export_aimed_canvas() -> String:
|
||||
_update_aim()
|
||||
if _hovered_canvas_id.is_empty():
|
||||
var canvas_id: String = (
|
||||
_hovered_canvas_id
|
||||
if not _hovered_canvas_id.is_empty()
|
||||
else _last_hovered_canvas_id
|
||||
)
|
||||
var canvas: SurfaceDrawingCanvas = _canvas_nodes.get(canvas_id)
|
||||
if (
|
||||
canvas_id.is_empty()
|
||||
or canvas == null
|
||||
or not is_instance_valid(canvas)
|
||||
or canvas.is_hidden_by_relationship()
|
||||
):
|
||||
_last_hovered_canvas_id = ""
|
||||
_emit_hud_state("aim at artwork before exporting")
|
||||
return ""
|
||||
return export_canvas_png(_hovered_canvas_id)
|
||||
return export_canvas_png(canvas_id)
|
||||
|
||||
|
||||
func export_canvas_png(canvas_id: String) -> String:
|
||||
|
|
@ -1070,6 +1085,8 @@ func _update_aim() -> void:
|
|||
selected_layer = layer
|
||||
_selected_canvas_id = found_canvas_id
|
||||
_hovered_canvas_id = found_hovered_canvas_id
|
||||
if not _hovered_canvas_id.is_empty():
|
||||
_last_hovered_canvas_id = _hovered_canvas_id
|
||||
if previous_canvas_id != _selected_canvas_id:
|
||||
_reset_stroke()
|
||||
_update_previews()
|
||||
|
|
@ -2865,6 +2882,7 @@ func _clear_session_artwork_state() -> void:
|
|||
_canvas_sequence = 0
|
||||
_selected_canvas_id = ""
|
||||
_hovered_canvas_id = ""
|
||||
_last_hovered_canvas_id = ""
|
||||
_stroke_history_by_peer.clear()
|
||||
_cell_last_stroke.clear()
|
||||
_last_local_stroke_id = ""
|
||||
|
|
@ -2900,6 +2918,8 @@ func _remove_canvas_state(canvas_id: String) -> void:
|
|||
_selected_canvas_id = ""
|
||||
if _hovered_canvas_id == canvas_id:
|
||||
_hovered_canvas_id = ""
|
||||
if _last_hovered_canvas_id == canvas_id:
|
||||
_last_hovered_canvas_id = ""
|
||||
|
||||
|
||||
func _emit_artwork_changed() -> void:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue