LastDataHelper.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Module\AppGame\Proto;
  3. use App\Module\Farm\Dtos\FarmInfoDto;
  4. use App\Module\Farm\Dtos\GodBuffDto;
  5. use App\Module\Farm\Dtos\LandInfoDto;
  6. use App\Module\GameItems\Dtos\ItemDto;
  7. use App\Module\Pet\Dtos\PetDataDto;
  8. use Uraus\Kku\Common\DataCoin;
  9. use Uraus\Kku\Common\DataGod;
  10. use Uraus\Kku\Common\DataHourse;
  11. use Uraus\Kku\Common\DataItem;
  12. use Uraus\Kku\Common\DataLand;
  13. use Uraus\Kku\Common\DataPet;
  14. use Uraus\Kku\Common\LastData;
  15. /**
  16. * LastData辅助类,用于将多个DTO转换为Protobuf的LastData对象
  17. */
  18. class LastDataHelper
  19. {
  20. /**
  21. * 将Farm模块的LandInfoDto列表转换为Protobuf的DataLand列表并添加到LastData中
  22. *
  23. * @param LastData $lastData
  24. * @param LandInfoDto[] $landInfoDtos
  25. * @return LastData
  26. */
  27. public static function addLands(LastData $lastData, array $landInfoDtos): LastData
  28. {
  29. $dataLands = [];
  30. foreach ($landInfoDtos as $landInfoDto) {
  31. $dataLands[] = LandInfoDto::toDataLand($landInfoDto);
  32. }
  33. $lastData->setLands($dataLands);
  34. return $lastData;
  35. }
  36. /**
  37. * 将Farm模块的FarmInfoDto转换为Protobuf的DataHourse并添加到LastData中
  38. *
  39. * @param LastData $lastData
  40. * @param FarmInfoDto $farmInfoDto
  41. * @return LastData
  42. */
  43. public static function addHourse(LastData $lastData, FarmInfoDto $farmInfoDto): LastData
  44. {
  45. $dataHourse = FarmInfoDto::toDataHourse($farmInfoDto);
  46. $lastData->setHourse($dataHourse);
  47. return $lastData;
  48. }
  49. /**
  50. * 将Farm模块的GodBuffDto列表转换为Protobuf的DataGod列表并添加到LastData中
  51. *
  52. * @param LastData $lastData
  53. * @param GodBuffDto[] $godBuffDtos
  54. * @return LastData
  55. */
  56. public static function addGods(LastData $lastData, array $godBuffDtos): LastData
  57. {
  58. $dataGods = [];
  59. foreach ($godBuffDtos as $godBuffDto) {
  60. $dataGods[] = GodBuffDto::toDataGod($godBuffDto);
  61. }
  62. $lastData->setGods($dataGods);
  63. return $lastData;
  64. }
  65. /**
  66. * 将GameItems模块的ItemDto列表转换为Protobuf的DataItem列表并添加到LastData中
  67. *
  68. * @param LastData $lastData
  69. * @param array $items 物品数据数组
  70. * @return LastData
  71. */
  72. public static function addItems(LastData $lastData, array $items): LastData
  73. {
  74. $dataItems = [];
  75. foreach ($items as $item) {
  76. $dataItem = new DataItem();
  77. $dataItem->setItemId($item['item_id'] ?? 0);
  78. if (isset($item['instance_id'])) {
  79. $dataItem->setInstanceId($item['instance_id']);
  80. }
  81. $dataItem->setQuantity($item['quantity'] ?? 0);
  82. if (isset($item['expire_time'])) {
  83. $dataItem->setExpireTime(is_numeric($item['expire_time']) ? $item['expire_time'] : strtotime($item['expire_time']));
  84. }
  85. // 设置堆id(item_user表的id)
  86. if (isset($item['id'])) {
  87. $dataItem->setIuId($item['id']);
  88. }
  89. // 设置冻结状态
  90. $dataItem->setIsFrozen($item['is_frozen'] ?? false);
  91. $dataItems[] = $dataItem;
  92. }
  93. $lastData->setItems($dataItems);
  94. return $lastData;
  95. }
  96. /**
  97. * 将货币数据添加到LastData中
  98. *
  99. * @param LastData $lastData
  100. * @param array $coins 货币数据数组
  101. * @return LastData
  102. */
  103. public static function addCoins(LastData $lastData, array $coins): LastData
  104. {
  105. $dataCoins = [];
  106. foreach ($coins as $coin) {
  107. $dataCoin = new DataCoin();
  108. $dataCoin->setType($coin['fund_id'] ?? $coin['type'] ?? 0);
  109. $dataCoin->setQuantity($coin['balance'] ?? $coin['quantity'] ?? 0);
  110. $dataCoins[] = $dataCoin;
  111. }
  112. $lastData->setCoins($dataCoins);
  113. return $lastData;
  114. }
  115. /**
  116. * 将Pet模块的PetDataDto列表转换为Protobuf的DataPet列表并添加到LastData中
  117. *
  118. * @param LastData $lastData
  119. * @param PetDataDto[] $petDataDtos
  120. * @return LastData
  121. */
  122. public static function addPets(LastData $lastData, array $petDataDtos): LastData
  123. {
  124. // 这里需要实现PetDataDto到DataPet的转换
  125. // 由于没有提供PetDataDto的完整结构,这里只是一个示例
  126. $dataPets = [];
  127. foreach ($petDataDtos as $petDataDto) {
  128. $dataPet = new DataPet();
  129. $dataPet->setId($petDataDto->id ?? 0);
  130. $dataPet->setTypeId($petDataDto->typeId ?? 0);
  131. $dataPet->setName($petDataDto->name ?? '');
  132. $dataPet->setLevel($petDataDto->level ?? 0);
  133. $dataPet->setExp($petDataDto->exp ?? 0);
  134. $dataPet->setPower($petDataDto->power ?? 0);
  135. $dataPet->setMaxpower($petDataDto->maxpower ?? 0);
  136. $dataPet->setScore($petDataDto->score ?? 0);
  137. $dataPet->setFightingCapacity($petDataDto->fightingCapacity ?? 0);
  138. $dataPet->setGrade($petDataDto->grade ?? 0);
  139. $dataPet->setStatus($petDataDto->status ?? 0);
  140. $dataPets[] = $dataPet;
  141. }
  142. $lastData->setPets($dataPets);
  143. return $lastData;
  144. }
  145. }