完善客户端功能并同步差距文档
This commit is contained in:
@@ -12,6 +12,7 @@ class FakeClient extends Node:
|
||||
signal npc_marks_changed()
|
||||
signal land_areas_changed()
|
||||
signal observer_event(kind: int, vid: int, pos: Vector2)
|
||||
signal world_reset()
|
||||
signal world_markers_changed()
|
||||
signal warp(pos: Vector3, same_server: bool)
|
||||
var _time := 0
|
||||
@@ -82,10 +83,48 @@ func _run() -> void:
|
||||
fc.markers = [{"id": 1, "name": "Quest", "pos": Vector3(-4, 0, -4)}]
|
||||
fc.observers = [{"vid": 9001, "pos": Vector3(2, 0, -2)}]
|
||||
fc.land_areas = [{"id": 42, "guild_id": 77, "x": -200, "y": -200, "width": 400, "height": 400}]
|
||||
# ClientVS22's CPythonMiniMap interpolates observer moves for 1 second.
|
||||
fc.observer_event.emit(mm.OBSERVER_ADD, 9001, Vector2(0, 0))
|
||||
var observer_start: Vector3 = mm._observer_position(9001, Vector3.ZERO)
|
||||
_ck(observer_start.distance_to(Vector3.ZERO) < 0.01, "minimap: observer add seeds current position")
|
||||
fc.observer_event.emit(mm.OBSERVER_MOVE, 9001, Vector2(10, 4))
|
||||
var observer_immediate: Vector3 = mm._observer_position(9001, Vector3.ZERO)
|
||||
_ck(observer_immediate.distance_to(Vector3.ZERO) < 0.1, "minimap: observer move starts at current position")
|
||||
await create_timer(1.05).timeout
|
||||
var observer_final: Vector3 = mm._observer_position(9001, Vector3.ZERO)
|
||||
_ck(observer_final.distance_to(Vector3(10, 0, 4)) < 0.1, "minimap: observer move reaches destination")
|
||||
fc.observer_event.emit(mm.OBSERVER_REMOVE, 9001, Vector2.ZERO)
|
||||
_ck(not mm._observer_tracks.has(9001), "minimap: observer remove clears track")
|
||||
fc.observer_event.emit(mm.OBSERVER_ADD, 9001, Vector2(2, -2))
|
||||
fc.world_reset.emit()
|
||||
_ck(mm._observer_tracks.is_empty(), "minimap: world reset clears observer tracks")
|
||||
mm._view.queue_redraw()
|
||||
await process_frame
|
||||
_ck(mm._view.is_visible_in_tree(), "minimap: redraw scheduled, view live")
|
||||
|
||||
# --- 任务信标:圆内画星,越出半径贴圆周画方向箭头(§5.2 世界箭头 / 屏幕边缘指示)---
|
||||
var rim: float = mm.RADIUS - mm.SIGNAL_RIM_INSET
|
||||
var near_geo: Dictionary = mm.signal_marker_geometry(Vector2(10, 0), rim)
|
||||
_ck(not near_geo["clamped"] and near_geo["offset"] == Vector2(10, 0),
|
||||
"minimap signal: inside rim keeps true offset")
|
||||
var far_geo: Dictionary = mm.signal_marker_geometry(Vector2(400, 0), rim)
|
||||
_ck(far_geo["clamped"] and abs(far_geo["offset"].length() - rim) < 0.01,
|
||||
"minimap signal: outside rim clamps to circle")
|
||||
_ck(abs(far_geo["angle"]) < 0.001 and abs(far_geo["offset"].x - rim) < 0.01,
|
||||
"minimap signal: clamp keeps bearing to target (east)")
|
||||
var diag_geo: Dictionary = mm.signal_marker_geometry(Vector2(-300, -300), rim)
|
||||
_ck(diag_geo["clamped"] and abs(diag_geo["angle"] - atan2(-300.0, -300.0)) < 0.001
|
||||
and abs(diag_geo["offset"].length() - rim) < 0.01,
|
||||
"minimap signal: diagonal clamp preserves atan2 bearing")
|
||||
var edge_geo: Dictionary = mm.signal_marker_geometry(Vector2(rim, 0), rim)
|
||||
_ck(edge_geo["clamped"], "minimap signal: exactly on rim counts as clamped (>=)")
|
||||
mm.add_signal_point(120000.0, 90000.0)
|
||||
_ck(mm.signal_point_count() == 1, "minimap signal: add_signal_point stores waypoint")
|
||||
mm._view.queue_redraw()
|
||||
await process_frame
|
||||
mm.clear_signal_points()
|
||||
_ck(mm.signal_point_count() == 0, "minimap signal: clear_signal_points empties waypoints")
|
||||
|
||||
# --- 昼夜 ---
|
||||
var sun := DirectionalLight3D.new()
|
||||
get_root().add_child(sun)
|
||||
|
||||
Reference in New Issue
Block a user