__init__.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. """apilot.stubs: 全量装配入口 install_all。"""
  2. from __future__ import annotations
  3. from typing import Any
  4. from apilot.stubs.env import EnvData, install_env
  5. from apilot.stubs.netclient import NetClientStub
  6. from apilot.stubs.networkctl import NetworkCtlStub
  7. from apilot.stubs.noop import install_noop_globals
  8. from apilot.stubs.scheduler import Scheduler, install_scheduler
  9. def install_all(lua: Any, nc: NetClientStub, ctl: NetworkCtlStub,
  10. sched: Scheduler, env: EnvData, state_dir: str) -> None:
  11. """全量装配到 lua runtime: noop → scheduler → env → networkctl → global.* 引用。
  12. 顺序说明:
  13. 1) install_noop_globals 装 cc/ccui/ccs/ccexp 骨架
  14. 2) install_scheduler 装 PerformWithDelayGlobal/Schedule/UnSchedule/SL_getScheduler
  15. 3) install_env 装 L_GameEnvManager/LuaBridgeCtl/cc.FileUtils/gameEnviroment + 杂项全局
  16. 4) ctl.install_to_lua 装 networkCtl/LuaNetworkController(最后, 真实实现覆盖 no-op)
  17. 5) 把 C++ 静态单例引用挂到 global.* (游戏原版 Lua 大量通过 global.X 访问)
  18. 6) gameEnviroment.GetNetClient 指向真实 nc (Task 6 之后 game code 会用)
  19. """
  20. install_noop_globals(lua)
  21. install_scheduler(lua, sched)
  22. install_env(lua, env, state_dir)
  23. ctl.install_to_lua(lua)
  24. lua.globals()["AP_netclient_ref"] = nc
  25. lua.execute("gameEnviroment:SetNetClient(AP_netclient_ref)")
  26. lua.execute("global = global or {}")
  27. lua.execute("global.networkCtl = networkCtl; global.LuaBridgeCtl = LuaBridgeCtl")
  28. lua.execute("global.L_GameEnvManager = L_GameEnvManager")
  29. lua.execute("global.gameEnviroment = gameEnviroment")
  30. lua.execute("global.gameEnvironment = gameEnviroment")
  31. __all__ = [
  32. "EnvData",
  33. "NetClientStub",
  34. "NetworkCtlStub",
  35. "Scheduler",
  36. "install_all",
  37. "install_env",
  38. "install_noop_globals",
  39. "install_scheduler",
  40. ]