Complete M11 Creator Studio and M12 Trust & Safety for PC5
checkpoint / checkpoint (push) Failing after 3h14m9s

- Creator Studio: Visual behavior & property inspector, GLB model importer, binary persistence
- Trust & Safety: 18+ TOS confirmation (DOB removed), creator guidelines & briefing card on join, in-game reporting HUD
- Test Harness: Add --filter, --skip-backend, --skip-godot to run_checkpoint_tests.py
This commit is contained in:
2026-09-17 23:13:57 +00:00
parent 920354705a
commit 7ecf0d53bd
30 changed files with 2099 additions and 157 deletions
+57 -2
View File
@@ -35,9 +35,12 @@ var _status_label: Label = null
## enters 'build mode'... so the runtime footprint is negligible during
## normal play"). Editing is in-memory only here; the save path to the
## backend is a sibling task (world_persistence_impl.md).
const ReportModal = preload("res://scripts/report_modal.gd")
var _build_editor: InGameEditor = null
var _chat_overlay: Control = null
var _friends_overlay: Control = null
var _report_modal: Control = null
var _hud_layer: CanvasLayer = null
var _overlay_layer: CanvasLayer = null
@@ -194,7 +197,9 @@ func _unhandled_input(event: InputEvent) -> void:
# ESC leaves the world back to the browser (or closes an open overlay/editor).
if event.is_action_pressed("ui_cancel"):
get_viewport().set_input_as_handled()
if _chat_overlay != null and is_instance_valid(_chat_overlay):
if _report_modal != null and is_instance_valid(_report_modal):
_close_report_modal()
elif _chat_overlay != null and is_instance_valid(_chat_overlay):
_close_chat_overlay()
elif _friends_overlay != null and is_instance_valid(_friends_overlay):
_close_friends_overlay()
@@ -255,10 +260,17 @@ func _setup_in_game_hud() -> void:
build_btn.pressed.connect(_toggle_build_mode)
bar.add_child(build_btn)
var report_btn := Button.new()
report_btn.text = "🚩 Report"
report_btn.pressed.connect(_toggle_report_modal)
bar.add_child(report_btn)
var exit_btn := Button.new()
exit_btn.text = "🚪 Menu [ESC]"
exit_btn.pressed.connect(func():
if _chat_overlay != null and is_instance_valid(_chat_overlay):
if _report_modal != null and is_instance_valid(_report_modal):
_close_report_modal()
elif _chat_overlay != null and is_instance_valid(_chat_overlay):
_close_chat_overlay()
elif _friends_overlay != null and is_instance_valid(_friends_overlay):
_close_friends_overlay()
@@ -270,6 +282,49 @@ func _setup_in_game_hud() -> void:
bar.add_child(exit_btn)
func _toggle_report_modal() -> void:
if _report_modal != null and is_instance_valid(_report_modal):
_close_report_modal()
else:
_open_report_modal()
func _open_report_modal() -> void:
if _chat_overlay != null and is_instance_valid(_chat_overlay):
_close_chat_overlay()
if _friends_overlay != null and is_instance_valid(_friends_overlay):
_close_friends_overlay()
if _build_editor != null and is_instance_valid(_build_editor):
_close_build_mode()
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
_player.set_physics_process(false)
_player.set_process_unhandled_input(false)
_report_modal = ReportModal.new()
var wid: int = int(Session.world_id) if Session.world_id != null else 0
_report_modal.setup_report("world", wid, "Current World" if wid > 0 else "Play Session")
_report_modal.closed.connect(_close_report_modal)
_report_modal.report_submitted.connect(func(_type, _id):
pass
)
_report_modal.tree_exited.connect(func():
if _report_modal != null:
_close_report_modal()
)
add_child(_report_modal)
func _close_report_modal() -> void:
if _report_modal != null and is_instance_valid(_report_modal):
var m := _report_modal
_report_modal = null
m.queue_free()
_player.set_physics_process(true)
_player.set_process_unhandled_input(true)
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
func _toggle_chat_overlay() -> void:
if _chat_overlay != null and is_instance_valid(_chat_overlay):
_close_chat_overlay()