// 年糕历险记 —— 客户端入口。 package main import ( "context" "flag" "os" "os/signal" "mc/internal/config" "mc/internal/engine" "mc/internal/logx" ) var devMode = flag.Bool("dev", devDefault, "开发模式:直接读取 assets/(默认随构建 tag)") // clientApp 客户端应用骨架(窗口/渲染在 Todo 4 接入)。 type clientApp struct { cfg *config.ClientConfig log *logx.Logger } // Tick 每 tick(20Hz)逻辑。 func (a *clientApp) Tick(dt float64) {} // Render 每帧渲染(占位)。 func (a *clientApp) Render() {} // ShouldClose 窗口关闭判定(占位)。 func (a *clientApp) ShouldClose() bool { return false } func main() { flag.Parse() log, err := logx.New("logs/client.log", logx.LevelInfo) if err != nil { panic(err) } cfg, err := config.Load("config/client.yaml", config.DefaultClient()) if err != nil { log.Warnf("配置加载失败,使用默认值:%v", err) } log.Infof("%s 客户端启动:%dx%d,语言 %s,视距 %d", cfg.Client.WindowTitle, cfg.Client.WindowWidth, cfg.Client.WindowHeight, cfg.Client.Language, cfg.Client.RenderDistance) ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() app := &clientApp{cfg: cfg, log: log} engine.Run(ctx, app, app) log.Infof("客户端已退出") }