feat: complete native client rendering parity updates
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
extends SceneTree
|
||||
|
||||
const PythonUISurface = preload("res://python_ui_surface.gd")
|
||||
const Python3DSurface = preload("res://python_3d_surface.gd")
|
||||
|
||||
var ui: Control
|
||||
var world: Node3D
|
||||
|
||||
func _initialize() -> void:
|
||||
call_deferred("run")
|
||||
|
||||
func _py(source: String) -> bool:
|
||||
return Metin2PythonHost.run_line(source) == ""
|
||||
|
||||
func _pump_until(seconds: float, condition: Callable) -> bool:
|
||||
var deadline := Time.get_ticks_msec() + int(seconds * 1000.0)
|
||||
while Time.get_ticks_msec() < deadline:
|
||||
if condition.call():
|
||||
return true
|
||||
await process_frame
|
||||
return condition.call()
|
||||
|
||||
func run() -> void:
|
||||
root.size = Vector2i(1024, 768)
|
||||
world = Python3DSurface.new()
|
||||
world.name = "Python3DSurface"
|
||||
ui = PythonUISurface.new()
|
||||
ui.name = "PythonUISurface"
|
||||
root.add_child(ui)
|
||||
root.add_child(world)
|
||||
|
||||
var err: String = ui.run_app()
|
||||
if err != "":
|
||||
print("ERROR: run_app: ", err)
|
||||
quit(1)
|
||||
return
|
||||
|
||||
await _pump_until(15, func(): return _py(
|
||||
"import __main__, os, networkModule, introLogin, introSelect, game, player, background, chr, chrmgr\n"
|
||||
+ "__main__._stream = [o for o in __import__('gc').get_objects() if isinstance(o, networkModule.MainStream)][0]"
|
||||
))
|
||||
|
||||
await _pump_until(20, func(): return _py(
|
||||
"assert isinstance(_stream.curPhaseWindow, introLogin.LoginWindow)"
|
||||
))
|
||||
|
||||
var host = OS.get_environment("MT_LIVE_HOST")
|
||||
var login = OS.get_environment("MT_LIVE_LOGIN")
|
||||
var pwd = OS.get_environment("MT_LIVE_PASSWORD")
|
||||
var auth_port = int(OS.get_environment("MT_LIVE_AUTH_PORT"))
|
||||
var game_port = int(OS.get_environment("MT_LIVE_GAME_PORT"))
|
||||
|
||||
_py("_stream.SetConnectInfo('%s', %d, '%s', %d)\n" % [host, game_port, host, auth_port]
|
||||
+ "_stream.curPhaseWindow.Connect('%s', '%s')" % [login, pwd])
|
||||
|
||||
await _pump_until(30, func(): return _py(
|
||||
"assert isinstance(_stream.curPhaseWindow, introSelect.SelectCharacterWindow)"
|
||||
))
|
||||
|
||||
print("=== IN INTRO SELECT PHASE ===")
|
||||
for i in 60:
|
||||
await process_frame
|
||||
|
||||
var cmds: Array = Metin2PythonHost.ui_render_commands()
|
||||
print("UI commands count: ", cmds.size())
|
||||
var file = FileAccess.open("/tmp/select_ui_cmds.json", FileAccess.WRITE)
|
||||
file.store_string(JSON.stringify(cmds, " "))
|
||||
file.close()
|
||||
print("Saved /tmp/select_ui_cmds.json")
|
||||
|
||||
quit(0)
|
||||
Reference in New Issue
Block a user