本次更新完成了对 DataLand 中新增的 disasters 灾害属性的处理,实现了从数据库中的灾害信息到 Protobuf 对象的完整转换流程。
文件: app/Module/AppGame/Proto/DisasterConverter.php
LandDisaster 对象数组disasters 属性和旧的布尔值标志主要方法:
convertToLandDisasters(): 转换灾害数组为 LandDisaster 对象数组setCompatibilityFlags(): 设置向后兼容的布尔值标志processDisasters(): 统一处理灾害信息的设置文件: app/Module/AppGame/Proto/LandInfoDto.php
toDataLand() 方法,使用新的 DisasterConverter 处理灾害信息文件: app/Module/AppGame/Proto/CropInfoDto.php
toDataLand() 方法,使用新的 DisasterConverter 处理灾害信息文件: app/Module/Game/AdminControllers/FarmUserSummaryController.php
formatDisasterInfo() 方法,改进灾害信息的显示DisasterService 获取默认减产比例文件: app/Module/Farm/AdminControllers/FarmLandController.php
DISASTER_TYPE::getName() 获取灾害名称文件: tests/Unit/DisasterConverterTest.php
根据 DISASTER_TYPE 枚举:
1: 干旱 (DROUGHT) -> 对应 need_watering2: 虫害 (PEST) -> 对应 need_pest_control3: 杂草 (WEED) -> 对应 need_weed为了保持向后兼容性,系统同时设置:
disasters - LandDisaster 对象数组need_weed, need_pest_control, need_watering - 布尔值标志active: 活跃的灾害,会影响作物产量inactive/其他: 已处理的灾害,不再影响作物FarmCrop.disasters (JSON数组)
↓
DisasterConverter::processDisasters()
↓
DataLand.disasters (LandDisaster对象数组) + 向后兼容标志
↓
客户端接收完整的灾害信息
// 处理灾害信息
DisasterConverter::processDisasters($dataLand, $cropInfoDto->disasters ?? []);
// 格式化灾害信息显示
$disasterInfo = $this->formatDisasterInfo($crop->disasters);
创建了完整的单元测试来验证:
type 和 status 字段status,默认为 activetype 字段的灾害记录