SkinHandler.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace App\Module\Game\Handler;
  3. use App\Module\Game\Services\SkinService;
  4. use App\Module\Game\Validation\SkinValidation;
  5. use UCore\Handler\HandlerCore;
  6. use UCore\Res;
  7. /**
  8. * 皮肤Handler
  9. *
  10. * 处理皮肤相关的客户端请求
  11. */
  12. class SkinHandler extends HandlerCore
  13. {
  14. /**
  15. * 获取用户皮肤信息
  16. *
  17. * @param array $args 参数
  18. * @return array
  19. */
  20. public function getUserSkinInfo(array $args): array
  21. {
  22. $userId = $this->getUserId();
  23. $skinInfo = SkinService::getUserSkinInfo($userId);
  24. if (!$skinInfo) {
  25. // 如果没有皮肤信息,尝试初始化
  26. $initResult = SkinService::initUserSkin($userId);
  27. if ($initResult->success) {
  28. $skinInfo = SkinService::getUserSkinInfo($userId);
  29. }
  30. }
  31. return [
  32. 'code' => self::RESPONSE_CODE,
  33. 'data' => $skinInfo ? $skinInfo->toArray() : [
  34. 'user_id' => $userId,
  35. 'current_skin_id' => 1,
  36. 'current_skin_name' => '默认皮肤',
  37. 'owned_skins' => [1],
  38. 'owned_skins_detail' => [
  39. [
  40. 'id' => 1,
  41. 'name' => '默认皮肤',
  42. 'is_current' => true,
  43. ]
  44. ]
  45. ]
  46. ];
  47. }
  48. /**
  49. * 切换皮肤
  50. *
  51. * @param array $args 参数 ['skin_id' => int]
  52. * @return array
  53. */
  54. public function changeSkin(array $args): array
  55. {
  56. // 验证参数
  57. $validation = new SkinValidation();
  58. $validation->skinId = $args['skin_id'] ?? 0;
  59. $validation->userId = $this->getUserId();
  60. $validationResult = $validation->changeSkin();
  61. if (!$validationResult->success) {
  62. return [
  63. 'code' => 1,
  64. 'message' => $validationResult->errorMessage
  65. ];
  66. }
  67. // 切换皮肤
  68. $result = SkinService::changeSkin($this->getUserId(), $args['skin_id']);
  69. if ($result->success) {
  70. return [
  71. 'code' => self::RESPONSE_CODE,
  72. 'message' => '皮肤切换成功',
  73. 'data' => [
  74. 'skin_id' => $args['skin_id'],
  75. 'skin_name' => SkinService::getSkinName($args['skin_id'])
  76. ]
  77. ];
  78. } else {
  79. return [
  80. 'code' => 1,
  81. 'message' => $result->errorMessage
  82. ];
  83. }
  84. }
  85. /**
  86. * 获取所有可用皮肤
  87. *
  88. * @param array $args 参数
  89. * @return array
  90. */
  91. public function getAllSkins(array $args): array
  92. {
  93. $allSkins = SkinService::getAllSkins();
  94. $userId = $this->getUserId();
  95. $ownedSkins = SkinService::getOwnedSkins($userId);
  96. $currentSkinId = SkinService::getCurrentSkinId($userId);
  97. $skinList = [];
  98. foreach ($allSkins as $skinId => $skinName) {
  99. $skinList[] = [
  100. 'id' => $skinId,
  101. 'name' => $skinName,
  102. 'is_owned' => in_array($skinId, $ownedSkins),
  103. 'is_current' => $skinId === $currentSkinId,
  104. ];
  105. }
  106. return [
  107. 'code' => self::RESPONSE_CODE,
  108. 'data' => [
  109. 'skins' => $skinList,
  110. 'current_skin_id' => $currentSkinId,
  111. 'owned_count' => count($ownedSkins),
  112. 'total_count' => count($allSkins)
  113. ]
  114. ];
  115. }
  116. }