LandInfoDto.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Module\AppGame\Proto;
  3. use Uraus\Kku\Common\DataLand;
  4. class LandInfoDto
  5. {
  6. /**
  7. * 转成 DataLand
  8. *
  9. * @param \App\Module\Farm\Dtos\LandInfoDto $landInfoDto
  10. * @return DataLand
  11. */
  12. public static function toDataLand(\App\Module\Farm\Dtos\LandInfoDto $landInfoDto):DataLand
  13. {
  14. $dataLand = new DataLand();
  15. // 设置基本土地信息
  16. $dataLand->setId($landInfoDto->id);
  17. $dataLand->setIndex($landInfoDto->position); // 使用position作为index
  18. $dataLand->setLevel($landInfoDto->landType); // 使用landType作为level
  19. $dataLand->setStatus($landInfoDto->status);
  20. // 默认设置灾害和施肥状态
  21. $dataLand->setNeedWeed(false);
  22. $dataLand->setNeedPestControl(false);
  23. $dataLand->setNeedWatering(false);
  24. $dataLand->setCanFertilization(false);
  25. // 如果有作物信息,设置作物相关字段
  26. if ($landInfoDto->crop) {
  27. // 设置种子配置ID(这是种子表的主键ID)
  28. $dataLand->setSeedId($landInfoDto->crop->seedId);
  29. $dataLand->setPlantId($landInfoDto->crop->id);
  30. // 设置最终产出果实ID(发芽期确定的主果实)
  31. if ($landInfoDto->crop->finalOutputItemId) {
  32. $dataLand->setFruitId($landInfoDto->crop->finalOutputItemId);
  33. }
  34. // 设置种植时间
  35. if (!empty($landInfoDto->crop->plantTime)) {
  36. // 如果plantTime是字符串格式的日期时间,转换为时间戳
  37. if (is_string($landInfoDto->crop->plantTime)) {
  38. $plantTime = strtotime($landInfoDto->crop->plantTime);
  39. $dataLand->setSeedPlantingTimes($plantTime);
  40. }
  41. // 如果已经是时间戳,直接使用
  42. else if (is_numeric($landInfoDto->crop->plantTime)) {
  43. $dataLand->setSeedPlantingTimes($landInfoDto->crop->plantTime);
  44. }
  45. }
  46. // 阶段开始时间
  47. if (!empty($landInfoDto->crop->stageStartTime)) {
  48. $dataLand->setStageStartTimes($landInfoDto->crop->stageStartTime->timestamp);
  49. }
  50. // 下一阶段的时间
  51. if (!empty($landInfoDto->crop->stageEndTime)) {
  52. $dataLand->setStageNextTimes($landInfoDto->crop->stageEndTime->timestamp);
  53. }
  54. // 设置种子状态,这里需要将Farm模块的生长阶段映射到Proto的种子状态
  55. // 假设我们有一个映射关系,这里简单地直接使用生长阶段值
  56. $dataLand->setSeedStatus((int)$landInfoDto->crop->growthStage);
  57. // 处理灾害信息
  58. DisasterConverter::processDisasters($dataLand, $landInfoDto->crop->disasters ?? []);
  59. // 检查是否可以施肥
  60. $dataLand->setCanFertilization(!$landInfoDto->crop->fertilized);
  61. }
  62. return $dataLand;
  63. }
  64. }