TOS 开发周记 17:从角色创建走到读档

本文根据 2026-01-26 至 2026-02-01 的 Git 提交回补。

这一周终于把注意力从地图内转向“进入游戏之前”。角色选择、角色创建、地图选择、读档和设置保存陆续出现,原本直接进入主场景的流程开始有了完整的外壳。

先创建一个属于自己的角色

Godot 端加入角色选择与创建界面,能够选择角色外观,也能在创建时选择地图。相关提交引入了角色素材、精灵处理工具和多语言文案。后端则给用户模型与实时事件补上 CharacterName,让角色名称不只停留在客户端。

后端同一提交曾加入 money 字段,紧接着又移除,因此周记里不把它当作最终功能。保留下来的重点是角色名称和用户数据在接口、地图消息与客户端显示之间完成对接。

从欢迎页进入读档流程

客户端先加入已有用户选择对话框,随后做成独立的 load_game 页面。API client、全局状态、欢迎页与主场景都参与了这次调整:选择存档后,需要把用户、角色外观与地图信息带入游戏,而不是只切换一个场景。

游戏设置也开始持久化,并修复了用户名、玩家形象与读档过程中的问题。地图加载侧新增 found 字段来判断扫描区域内是否仍有空 tile;另一个提交统一把 API 中的浮点数字转成整数,减少 Godot 端处理服务端数值时的类型分支。

小结

这一周的成果不是某个孤立页面,而是一条新的进入路径:欢迎页、角色创建或读档、配置状态,最后进入地图。服务端只增加了少量用户字段与修正,大部分工作都在客户端,但它仍然依赖后端返回的用户与地图数据才能闭合。

提交记录

日期 仓库 提交 原始说明
2026-01-26 客户端 8ab353a feat: allow to choose player
2026-01-27 客户端 d08e5e3 feat: allow to select map in user createion scene
2026-01-28 后端 816dbb8 feat: add CharacterName, mony for user
2026-01-28 后端 fcdc614 tidy: remove money
2026-01-28 客户端 1097a15 fix: load game
2026-01-28 客户端 1eb6c2d feat: allow to load game
2026-01-28 客户端 41ac7e8 fix: player character
2026-01-28 客户端 4590827 fix: user name
2026-01-28 客户端 759f8d4 feat: persist game setting
2026-01-28 客户端 f023673 fix: new found field to judge if have empty tiles
2026-01-29 后端 5940534 fix
2026-01-29 客户端 31dd1fc feat: dedicated load_game page
2026-01-29 客户端 46d79ec tmp
2026-01-29 客户端 ad477d2 feat: auto parse float to int

TOS 开发周记 16:收拾分块订阅、怪物状态与客户端结构

本文根据 2026-01-19 至 2026-01-25 的 Git 提交回补。

这一周的提交全部落在周末,内容也很像一次集中清理:服务端修 worker 与怪物状态,客户端修分块订阅和重复实例,同时把 API、事件与欢迎页重新组织了一遍。

怪物状态不只存在于画面里

后端修正负方向移动逻辑、掉落物位置和 worker 停止流程,随后让怪物生命值能够持久化,并加入独立的怪物日志。堡垒相关代码也在同一轮修改中得到修正。

客户端对应处理了重复怪物和受击闪烁。前者涉及 WebSocket 消息到场景节点的唯一映射,后者则是纯表现层反馈;两者放在一起,刚好体现出服务端状态与客户端呈现需要分别维护。

分块与事件入口继续瘦身

客户端修正 chunk subscription,涉及 API、WebSocket、地图场景与坐标工具。地图不断移动时,订阅哪些 chunk、何时取消旧订阅,直接决定客户端会收到哪些世界对象。

另一笔较大的整理用 EventBus 取代场景间的直接耦合,并移除旧的 Colyseus 消息处理器;API client 也被重新拆分。欢迎页和游戏配置场景则为启动流程补了一个更明确的入口,同时加入中英文翻译资源。

此外还新增一个图片去边工具,用于处理素材边缘。这是开发辅助脚本,不属于运行时玩法。

小结

这周的关键词是“边界”:worker 何时停止、怪物状态保存在哪里、一个怪物只能对应一个节点、客户端只订阅需要的分块、场景之间通过什么传递事件。它们都不是新系统,却决定了已有系统能否继续扩展而不越来越难维护。

提交记录

日期 仓库 提交 原始说明
2026-01-24 后端 4561d7e fix: stopWorker
2026-01-24 后端 4e9ddb6 fix: drop items position
2026-01-24 后端 6366a1a feat: fix negative monster movement logic
2026-01-24 后端 9acddb8 feat: move types
2026-01-24 客户端 334b40a feat: add cli to remove edge
2026-01-24 客户端 672de38 fix: dup monsters
2026-01-24 客户端 6e1efdf chore: update img
2026-01-24 客户端 f165967 fix: chunk subs
2026-01-24 客户端 ff30c76 fix: monster flash
2026-01-25 后端 39dd112 fix: persist health
2026-01-25 后端 e6fe26e feat: add monster logs, fix forterss
2026-01-25 客户端 5cba376 tidy: refactor api_client
2026-01-25 客户端 cac02a0 feat: add welcome.tscn
2026-01-25 客户端 db4a909 tidy: use eventbus to clean codes

TOS 开发周记 15:WebSocket 事件收口,战斗细节补齐

本文根据 2026-01-12 至 2026-01-18 的 Git 提交回补。

换掉后端语言与联机层之后,这一周主要是在新链路上把旧功能重新对齐。提交主题集中在事件、战斗与日志,很多改动都成对出现在客户端和后端。

先让两端说同一种话

后端调整服务端事件,并把事件定义收拢到 internal/ws/events.go;客户端也统一 WebSocket 事件入口。地图消息处理、连接层和场景脚本随之简化,避免同一类消息在不同位置用不同名字或分支处理。

双方还分别加入文件日志,覆盖 WebSocket 消息与怪物 worker。它们至少为迁移期排查事件流提供了持久记录;至于实际定位了哪些问题,提交本身没有留下足够信息,我不做延伸判断。

战斗判定回到服务端

攻击距离判断在后端修正,客户端随即移除一部分本地判断,改为接受服务端结果。随后又处理怪物死亡、物品掉落和攻击效果:后端维护怪物状态,客户端根据事件移除或更新对象,并播放攻击反馈。

地图逻辑也进一步从 handler 移进 worker。与此同时,客户端修正 tile 渲染顺序,说明实时数据正确只是第一步,场景中的绘制层级仍需要单独整理。

小结

这周没有明显扩张玩法边界,而是在偿还迁移成本。统一事件、补日志、把攻击判定交还服务端,再修怪物死亡与掉落表现,这些工作让 Go 后端与原生 WebSocket 客户端重新形成一条可理解的数据链。

提交记录

日期 仓库 提交 原始说明
2026-01-12 后端 4bdefe3 fix
2026-01-12 后端 fe3f0fa fix: poort performance
2026-01-12 客户端 2429ae3 fix
2026-01-13 后端 22de140 fix: attack distance judge
2026-01-13 后端 6d3eee7 feat: align with server events
2026-01-13 后端 772c2f6 feat: record logs into files
2026-01-13 客户端 75a147d feat: log messages in files
2026-01-13 客户端 bbe749c fix: judge attch via server
2026-01-14 后端 41a3cdd fix: monster death
2026-01-14 后端 471534e feat: compleate remainging TODOs
2026-01-14 后端 df248af tidy: unify events
2026-01-14 客户端 2602dd6 tmp
2026-01-14 客户端 2db52e3 fix: render tiles order
2026-01-14 客户端 7ff55d2 feat: unify all the client events
2026-01-15 后端 77cff3a tidy: move map logic to worker
2026-01-15 后端 95e924d tmp
2026-01-16 后端 979f69b tmp
2026-01-16 客户端 2f10138 fix item drop
2026-01-16 客户端 f4861c1 feat: add effect for attack

TOS 开发周记 14:后端转向 Go,客户端改用原生 WebSocket

本文根据 2026-01-05 至 2026-01-11 的 Git 提交回补。

这一周几乎所有提交都集中在 1 月 11 日,却是项目结构变化最大的一周之一:后端开始用 Go 重建已有能力,客户端也从 Colyseus 接入改成直接使用 WebSocket。

后端开始迁移到 Go

Go 版本先搭起配置、数据库、鉴权、中间件、HTTP 路由和 WebSocket hub,随后补入背包、城市、堡垒、好友、怪物、队伍、tile 等 handler 与 service,也加入怪物 worker 和 worker pool。Swagger 文档则跟着接口一起建立。

这里更像一次迁移中的并行实现,而不是简单替换语言。旧 TypeScript 目录仍在历史提交中,新 Go 代码需要重新覆盖原有的地图生成、服务与实时消息能力。后面的几个提交集中修复重构问题与生成逻辑,也说明这套新结构仍处于快速对齐阶段。

客户端绕开 Colyseus

Godot 端新增 websocket_client.gd 和独立的消息处理器,并修改登录、主场景、地图、玩家管理等入口。客户端不再依赖 Colyseus 的房间封装,而是直接面对 WebSocket 连接与事件。

这和后端的 Go WebSocket hub 是同一件事的两面:服务端需要明确消息格式、连接与广播逻辑,客户端则要自己负责连接状态、发送请求和分发事件。紧随其后的 bug 修复主要落在 EventBus、API 客户端和地图场景,符合迁移后逐项接回旧功能的节奏。

小结

这一周没有把重点放在新玩法,而是在更换项目的地基。后端语言、服务组织和实时通信入口同时变化,范围很大,因此我更愿意把它看作迁移起点:结构已经搭起来,但从提交记录本身不能推断所有旧功能在当时都已达到同等行为。

提交记录

日期 仓库 提交 原始说明
2026-01-11 后端 01bebdf feat: add swagger
2026-01-11 后端 0b9dec3 temp
2026-01-11 后端 2cd4570 fix: gen logic
2026-01-11 后端 4987400 fix: too many refactoring bugs
2026-01-11 后端 cb19b0c feat: add golang
2026-01-11 后端 dbe965c feat: implement remaining services
2026-01-11 客户端 08c3d5b temp
2026-01-11 客户端 0b82323 feat: use ws istead of Colyseus
2026-01-11 客户端 573196e fix: bugs

TOS 开发周记 13:背包落地,堡垒回到实时通道

本文根据 2025-12-29 至 2026-01-04 的 Git 提交回补。

跨年这一周提交不多,主要是在承接上周的怪物掉落:既然物品已经会出现在世界里,就需要一个地方保存和展示它们。于是,客户端与后端同时补上了背包系统的第一版。

掉落有了去处

后端新增用户物品实体、物品服务与背包路由,并把相关消息接入地图房间和怪物 worker。客户端加入背包面板,连接 API、全局状态与实时消息处理,随后又调整了背包尺寸。

从涉及的文件可以看出,这不是单独画一个 UI:服务端保存用户物品,接口提供背包数据,地图事件负责连接拾取流程,Godot 再把结果呈现在面板里。和上周的掉落系统连起来后,“怪物产出物品”终于有了后续的数据归属。

地图同步继续收尾

地图侧修正了 chunk 计算和堡垒广播,客户端也改为通过 WebSocket 渲染堡垒。怪物移动则开始用 speed 推导 velocity,让 worker、怪物服务和六边形坐标工具共用这一组移动数据。

年底最后一个提交移除了 TypeScript import 中的 .js 后缀,影响生成脚本、路由、服务与 worker,属于一次横跨后端目录的工程整理,没有改变本周的玩法主线。

小结

这周像是给前一阶段补上“容器”:掉落不再只是地图上的瞬时事件,而是能进入用户背包的数据。与此同时,堡垒与地图分块继续向同一条实时通道收拢,为后面替换联机基础设施减少了分散入口。

提交记录

日期 仓库 提交 原始说明
2025-12-29 后端 63e11a0 feat: add inventory system
2025-12-29 后端 76bcd05 tmp
2025-12-29 客户端 4f8a9ce feat: add inventory system
2025-12-30 后端 3c4c958 fix: chunk calculation and fortress boradcast
2025-12-30 后端 678182b feat: use speed to determine velecity
2025-12-30 客户端 10919f1 fix: render fortress via ws
2025-12-30 客户端 dc6e230 feat: fix bag size
2025-12-31 后端 8ebee00 tidy: remove all js suffix

TOS 开发周记 12:战斗、经验与掉落串成一条线

本文根据 2025-12-22 至 2025-12-28 的 Git 提交回补。

圣诞这一周的改动很密集。前几周搭好的地图、怪物与实时事件开始承载真正的玩法:攻击会改变生命值,怪物会死亡,玩家能获得经验,死亡后可以重生,怪物也开始产生掉落。

战斗闭环开始成形

后端先加入战斗计算,并在 MapRoom、怪物 worker 与战斗工具之间组织处理流程。客户端同步加入攻击交互与生命值显示。随后,后端补上经验计算与重生逻辑,客户端接入 monster_deadmonster_hp_reducedplayer_gained_exp 等事件,也修正了目标信息显示。

这条链路的分工逐渐清楚:后端负责判定生命值、死亡与经验变化,客户端根据事件更新怪物、目标面板和玩家反馈。事件名称在两端分别做了统一,正好是在为这种跨端协作减少歧义。

周末又加入怪物掉落。后端新增掉落实体、服务与生成脚本,客户端则先做了 hotbar。背包系统还没在本周出现,但战斗产出与快捷栏已经为下一步的物品流转留出了接口。

大重构与地图状态

玩法推进之外,后端还拆分了好友、怪物、tile 与用户服务,整理堡垒和 worker,并修复重构后的编译问题。提交里有一笔 worker 调整涉及 worker pool、怪物与 tile 服务;这里只能确认结构和实现被改动,不能仅凭提交说明断言具体提升幅度。

玩家坐标开始保存到用户数据,Godot 端也改为从服务端恢复 qr,并修正相邻 chunk 与原先的分块限制。这样重新进入地图时,玩家位置不再只依赖客户端临时状态。

小结

这周最重要的变化,是怪物不再只是会移动的地图元素。战斗、生命值、死亡、经验、重生和掉落被逐步串起来,同时实时事件承担起后端规则与客户端表现之间的桥梁。代码经历了较大范围重构,但从历史提交能确认的,是核心玩法的数据流已经明显完整起来。

提交记录

日期 仓库 提交 原始说明
2025-12-22 后端 0797b34 feat: combat system
2025-12-22 客户端 54622d2 feat: show hp
2025-12-22 客户端 597dca1 feat: combat system
2025-12-23 后端 b2cf3c3 feat: add rebirth
2025-12-23 客户端 1781ea9 feat: add rebirth
2025-12-24 后端 0623d65 feat: add expUtil
2025-12-24 后端 6b9ab7d feat: unify events
2025-12-24 客户端 12315f1 tidy: clean code
2025-12-24 客户端 f15cf5b feat: unify events
2025-12-24 客户端 f83581e fix: fortress display
2025-12-25 后端 03042ae fix: compile error
2025-12-25 后端 3eee505 tmp
2025-12-25 后端 4a8489f refactor: friend/monster/tile modules
2025-12-25 后端 6ef34b6 tidy: refactor fortress
2025-12-25 后端 7719353 tidy: a big refactoring
2025-12-25 后端 9a86ee8 feat: add rule for kilo
2025-12-25 后端 a6be837 tidy: split logic in auth router into userService
2025-12-25 后端 fa7df91 tidy: refactor worker
2025-12-25 客户端 0895da6 feat: support monster_dead and monster_hp_reduced
2025-12-25 客户端 4c41d1f feat: support player_gained_exp event
2025-12-25 客户端 735d7d7 fix: target info
2025-12-27 后端 4258c92 feat: impore worker performance
2025-12-27 客户端 91ce809 feat: add hotbar
2025-12-28 后端 1c1e802 feat: add monster drops
2025-12-28 后端 622c818 feat: save user q and r
2025-12-28 客户端 156ce93 fix: remove chunk limits
2025-12-28 客户端 aee35d5 feat: load user postion from server
2025-12-28 客户端 cfa6b3d fix: adjacent chunks

TOS 开发周记 11:把玩家移动事件理顺

本文根据 2025-12-15 至 2025-12-21 的 Git 提交回补。

上周刚把怪物移动接进分块地图,这周轮到玩家移动。提交不算多,却集中暴露了实时地图里很典型的问题:坐标由谁维护、事件发给谁、同一个玩家为什么会被创建两次。

服务端收拢移动规则

后端连续重构了 MapRoom 与移动 worker,并修正玩家移动流程。客户端则开始用六边形坐标 qr 上报位置,随后调整用户移动事件和 player container。两边必须使用同一种坐标语义,否则服务端保存的位置、房间广播的事件和画面里的玩家节点很容易彼此错位。

客户端还修了重复用户与错误事件。这个改动很小,却说明问题已经从“能收到消息”进入“收到后能否正确更新唯一对象”的阶段。与此同时,主场景中的旧逻辑与多余日志也被清掉,让玩家管理不再全部挤在入口脚本里。

世界生成与素材继续补齐

地图生成规则也有一轮调整,主要落在地形生成脚本与 tile 常量。Godot 端加入山地素材,并连续替换、补充 tile 纹理。这部分没有改变联机协议,但它让服务端生成出的地形类型在客户端有了更完整的视觉对应。

小结

这一周做的事情并不华丽,更多是在校准玩家移动这条数据链:客户端提交坐标,服务端按规则处理,再由事件驱动客户端更新玩家对象。重复实例、错误事件和容器职责都是实时同步早期很容易踩到的问题,把这些理顺比继续堆画面功能更重要。

提交记录

日期 仓库 提交 原始说明
2025-12-16 后端 cffa7b6 tmp
2025-12-16 后端 d0231eb tidy: refactor movement logic
2025-12-16 后端 efc8170 fix: player movement
2025-12-16 客户端 180f720 feat: push user location with q and r
2025-12-17 后端 2945b3f tmp
2025-12-17 客户端 3315d4c fix: user movement event
2025-12-17 客户端 4f5acc0 fix: player container
2025-12-17 客户端 e3a2631 tidy: clean code in main
2025-12-17 客户端 e95c28a fix: dup user, wrong event
2025-12-18 后端 a346a4c feat: update gen terrian logic
2025-12-18 客户端 99a668c feat: add montain
2025-12-18 客户端 9dba040 tidy: clean log
2025-12-18 客户端 b89aef5 ui: change texture
2025-12-18 客户端 d6329f2 ui: change more tiles

TOS 开发周记 10:地图分块接上怪物移动

本文根据 2025-12-08 至 2025-12-14 的 Git 提交回补。

这一周的主线很清楚:让地图不只是能够分块加载,还要让怪物真正活在这套分块世界里。客户端和后端都围绕 chunk、坐标与事件做了不少调整,一边推进,一边修正接口之间没对齐的地方。

从 chunk 坐标到异步绘制

后端先统一了 chunk 内 tile 的基础坐标,并把地图元素随房间数据一起推送。客户端随即把 tile 绘制改成异步流程,也修过一次 chunk id。这里看似只是渲染方式变化,实际上依赖服务端给出的分块与坐标能够稳定对应。

地图表现也继续补细节:水面改成动态 tile,部分地块素材更新,调试面板被挪到更方便观察的位置。临近格选择则让六边形地图上的交互范围更明确。

怪物移动进入 worker

后端新增怪物移动 worker,随后把更多地图工作移入 worker,并补上可达性检查、移动一致性和休息状态。提交记录里还能看到 /regions 卡顿与数据库连接超时的修正;我只把它们视为当时针对具体调用链的整理,不据此推断最终性能结果。

客户端这边先接入 WebSocket 中的怪物数据,再支持服务端移动事件,最后抽出 monster manager。也就是说,怪物的位置与状态由后端推进,Godot 端负责接收事件、维护实例并绘制出来。期间清理事件、替换错误的 chunk id,正是这条链路逐渐成形时必须处理的接缝。

小结

回头看,这周不是单独完成了“地图”或“怪物”某一个功能,而是第一次把分块数据、后台移动逻辑和客户端表现连成了比较完整的闭环。许多提交仍带着明显的迭代痕迹,但后续战斗系统需要的世界状态已经开始有了落脚点。

提交记录

日期 仓库 提交 原始说明
2025-12-08 后端 a76f0c0 feat: chunk tiles base tile coordinate
2025-12-08 后端 d767674 feat: push elements in chunk room
2025-12-08 客户端 e328620 feat: async render tiles
2025-12-09 客户端 0c8228f feat: draw monsters in ws
2025-12-10 后端 9f1cfcc feat: monster movement workerr
2025-12-11 后端 a2e36bf feat: handle monster movement in worker thread
2025-12-11 后端 e6df04a fix: db connection timeout
2025-12-11 后端 e8a01ab fix: laggy in /regions
2025-12-11 客户端 4d8fd39 tidy
2025-12-11 客户端 8b34075 feat: support monster movement with server event
2025-12-12 后端 82f8778 feat: use worker to do more things
2025-12-13 后端 01a7a52 fix: consistent movement
2025-12-13 客户端 32d6707 fix: chunk id
2025-12-13 客户端 38d1ecc feat: dynamic water tile
2025-12-13 客户端 5c3afae feat: move debug panel
2025-12-13 客户端 9fb30b9 tidy: clean eveents
2025-12-13 客户端 e88666f feat: monster manager
2025-12-13 客户端 f3c603a feat: closer-square selection
2025-12-14 后端 62c0288 feat: check reachability
2025-12-14 后端 b9503bd feat: support rest for monsters
2025-12-14 客户端 8e627de ui: change some tiles

TOS 开发周记 09:堡垒升级、地图分层与动态加载

本文根据 2025-12-01 至 2025-12-07 的 Git 提交整理,是一篇待审核的历史开发周记。

堡垒从地图标记变成可操作对象

后端本周先增加堡垒列表接口,客户端随后把堡垒显示到地图上。第二天,两端又分别修正升级接口并接入堡垒升级操作。客户端为此加入 Fortress Manager 和命名对话框,把查询、显示与操作从主场景中抽离出来。

这条链路比此前单纯显示城市更完整:服务端维护堡垒数据和等级变化,客户端负责列出、绘制并发起升级。提交只能证明相关接口与界面逻辑已经接通,不能据此推断数值平衡或实际游玩效果。

地块从单层走向多层

后端扩展 Tile 的 layer 结构,并继续整理基础环境和城市清理逻辑;客户端紧接着加入多层地块素材与绘制支持。花、森林、沙坑、荒漠树等元素由此可以与基础地形分层表达,而不是每个地块只能选择一张最终贴图。

客户端还增加 map loaded 事件。聊天和好友面板可以等地图准备完成后再处理自身状态,模块之间不必都直接盯住主场景的加载细节。这一周建立的 EventBus、Global State 和 autoload 目录,也是同一方向:把跨场景共享的事件、状态、API 与 Colyseus 连接集中管理。

动态地图与房间边界

后端尝试按 chunk 组织 MapRoom,并留下相应设计文档;随后删除旧的 MatchMakerRoom 与匹配路由。客户端则更新房间处理与动态加载,最终改为从服务端数据绘制地块,并移除原先的半径限制。

这里仍是明显的演进阶段:room by chunkdynamic load 都以临时提交出现,不能写成已经稳定完成的架构。不过可以确认,地图加载和多人房间正在从“整张地图、单一房间”的早期实现,转向按空间范围组织的方案。

战斗仍在试验中

后端新增 BattleRoom,并两次调整怪物与战斗相关代码;客户端也更新了怪物 API。由于两笔后端提交都明确标记为 tmp,而本周没有足够证据证明完整战斗流程闭环,因此更准确的说法是:战斗房间与怪物接口进入了原型阶段。

这一周同时推进了堡垒、分层地块、全局状态和房间加载,最后又回到“由服务端地图数据驱动客户端绘制”这条主线上。早期世界原型正在逐步拆成可以独立演进的系统。

提交记录

日期 仓库 提交 原始说明
2025-12-01 后端 3d7d7e4 feat: add fotress list
2025-12-01 客户端 753babf feat: show fortresses
2025-12-02 后端 962adc5 fix: level up
2025-12-02 客户端 0ec23e3 tidy: remove tile info in debug panel
2025-12-02 客户端 c0ff0e0 feat: update monster api
2025-12-02 客户端 cd231f4 tidy: clean code, move camera logic into each moda
2025-12-02 客户端 d3ae464 tidy: clean useless code
2025-12-02 客户端 dfbb6f3 feat: level up fortress
2025-12-03 后端 0f6583e tmp: battle
2025-12-03 后端 9024e79 tmp: battle 2
2025-12-03 客户端 2ee95e4 feat: auto load, singeton
2025-12-03 客户端 3b6c2b1 feat: add global state
2025-12-03 客户端 c085d6f tidy
2025-12-04 后端 110a240 tidy: clean code
2025-12-04 后端 26353fb feat: add layers for Tile
2025-12-04 后端 ffa1b59 tmp: room by chunk
2025-12-05 后端 89ee620 tidy: clean code
2025-12-05 后端 d36e8ea feat: update city cleanup
2025-12-05 客户端 1225dad feat: add map loaded event
2025-12-05 客户端 36c26ea feat: support multi layers
2025-12-05 客户端 b84afe2 autoload colyseus
2025-12-05 客户端 e1d9f30 feat: add autoload folder
2025-12-05 客户端 f47b8f2 tmp: dynamic load
2025-12-05 客户端 f7e25f2 feat: update room
2025-12-07 客户端 068898d feat: drawing tiles from server, remove radius limit

TOS 开发周记 08:重整地图生成,也重整客户端场景

本文根据 2025-11-24 至 2025-11-30 的 Git 提交整理,是一篇待审核的历史开发周记。

先处理地图生成的压力

本周后端先修正地块生成脚本的内存问题,随后把地块宽度固定为 50,并把生成入口整理成 CLI。客户端同步移除可调宽度的旧入口,同样采用 50。这个看似简单的数字需要两端一致,否则服务端坐标与 Godot 中的六边形尺寸会产生偏差。

道路生成也经历了一轮较大的改写,并增加独立的道路调试页面。到周末,原本集中的 genTiles.ts 又被拆成基础环境、城市、道路、清理和工具等模块。提交名写的是 add level-up,实际差异除了堡垒升级接口,也包含这次生成器拆分;正文按代码内容分别记录,不把它们混成一个功能。

三种地图模式各自管理相机

客户端把省份逻辑继续从主脚本和主场景中拆出,并为细节、全国、省份模式配置各自的相机。地图高亮和城市名称显示也在这一轮加入。不同尺度不再只是一组绘制函数,而逐渐成为独立场景与脚本。

与此同时,Player Manager 被建立,场景文件统一移动到 scenes/。这些调整没有直接增加玩法,却减少了主场景同时管理地图模式、相机、玩家和面板的负担。

面板开始围绕玩家操作组织

周末重构了操作面板、用户详情面板和地块信息弹窗,并重新加入独立登录场景。海面碰撞、动态查找地块和输入焦点也分别得到修正。从提交顺序看,这些是界面结构变化之后紧跟的边界处理,而不是可以省略的小修饰。

后端同一周为 Fortress 增加等级字段和升级路由。客户端的主要改动尚未在本周形成完整堡垒升级界面,因此这里能确认的是服务端能力已经出现;客户端对应流程要到下一周才接上。

提交记录

日期 仓库 提交 原始说明
2025-11-25 客户端 bca46c4 feat: split off the province logic from main
2025-11-26 后端 9b9c17a fix: oom
2025-11-26 客户端 405dcc0 tidy: move files
2025-11-26 客户端 4e7e9c3 feat: mulit cameras
2025-11-26 客户端 9d11a3e tidy
2025-11-26 客户端 9dc33c6 feat: highlight
2025-11-26 客户端 e9df5ba feat: show city names
2025-11-27 后端 a6b935b feat: set tile to 50
2025-11-27 客户端 7175200 feat: set width to 50
2025-11-28 后端 1050b54 feat: add cli
2025-11-28 后端 847c0f1 feat: update road logic
2025-11-29 后端 6be938f feat: debug road
2025-11-30 后端 3b559cc add level-up
2025-11-30 客户端 6553a1d fix: collision with sea tile
2025-11-30 客户端 7308d35 feat: refactor operation panel, user detail panel
2025-11-30 客户端 8adbd81 tidy
2025-11-30 客户端 d704d75 feat: Add login
2025-11-30 客户端 de6166d fix: dynamic search tiles
2025-11-30 客户端 e066bb7 fix: optimize focus