2V3-b: click on the ground to walk; read the terrain attribute map
CScreen::SetCursorPosition and CPythonGraphic::SetCursorPosition are the 40250 bodies, so RenderGame builds the pick ray under the cursor each frame. CPythonBackground::GetPickingPoint* march that ray as CMapOutdoor::__PickTerrainHeight does, against the native CMapManager height (PR_FLOAT_TO_INT's x87 rounding becomes floor); object picking waits for CMapOutdoor. CMapManager::isAttrOn reads the packed <map>/<xxxyyy>/attr.atr as CMapOutdoor::isAttrOn + CTerrain::isAttrOn do, and CheckAdvancing with its collision checkers is verbatim (no map objects are registered yet). All of this stays in the pending/platform layer and is marked ADAPTED. port.login_flow clicks the ground below the actor after the key walk. The actor walks to the picked point (334 cm offline), and the fake server sees FUNC_MOVE, then FUNC_WAIT. It also checks that the actor's cell is free and that its terrain block has blocked cells. port.login_live against the real server passed (key 133 cm, click 296 cm), and python_game_render_test.sh passes offline. MT_TEST_MODE=python_ui now adds the 3D surface, so the port route can be played by hand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ff0983d3c8
commit
8b4700f008
@@ -36,12 +36,18 @@ func _ready() -> void:
|
||||
get_tree().quit(1 if fail else 0)
|
||||
return
|
||||
# MT_TEST_MODE=python_ui:40250 system.py 的界面直接画在 Godot Canvas 上(PORT-PLAN 2V0-f),
|
||||
# Logo → 登录阶段,可用鼠标键盘操作;app.Exit() 退出进程。
|
||||
# Logo → 登录 → 选人 → 进游戏,RenderGame 的 3D 绘制由 python_3d_surface.gd 画出(2V2-e),
|
||||
# 方向键/鼠标点地走动走 40250 原路径(2V3);app.Exit() 退出进程。
|
||||
if OS.get_environment("MT_TEST_MODE") == "python_ui":
|
||||
AssetPack.ensure()
|
||||
var surface: Control = preload("res://python_ui_surface.gd").new()
|
||||
surface.name = "PythonUISurface"
|
||||
add_child(surface)
|
||||
# The UI surface runs CPythonApplication::Process in its _process; the 3D surface reads that
|
||||
# frame's draws after it, so it comes second in the tree.
|
||||
var world: Node3D = preload("res://python_3d_surface.gd").new()
|
||||
world.name = "Python3DSurface"
|
||||
add_child(world)
|
||||
var err: String = surface.run_app()
|
||||
if err != "":
|
||||
printerr("python_ui: " + err)
|
||||
|
||||
Reference in New Issue
Block a user