| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- namespace App\Module\Game\Dto;
- use App\Module\Game\Models\GameUserSkin;
- use UCore\Dto\BaseDto;
- /**
- * 用户皮肤DTO
- */
- class UserSkinDto extends BaseDto
- {
- /**
- * 用户ID
- *
- * @var int
- */
- public int $userId;
- /**
- * 当前使用的皮肤ID
- *
- * @var int
- */
- public int $currentSkinId;
- /**
- * 拥有的皮肤ID数组
- *
- * @var array
- */
- public array $ownedSkins;
- /**
- * 当前皮肤名称
- *
- * @var string
- */
- public string $currentSkinName;
- /**
- * 拥有的皮肤详情(包含ID和名称)
- *
- * @var array
- */
- public array $ownedSkinsDetail;
- /**
- * 从模型创建DTO
- *
- * @param GameUserSkin $model
- * @return static
- */
- public static function fromModel(GameUserSkin $model): static
- {
- $dto = new static();
- $dto->userId = $model->user_id;
- $dto->currentSkinId = $model->current_skin_id;
- $dto->ownedSkins = $model->getOwnedSkinsArrayAttribute();
- $dto->currentSkinName = GameUserSkin::getSkinName($model->current_skin_id);
-
- // 构建拥有的皮肤详情
- $dto->ownedSkinsDetail = [];
- foreach ($dto->ownedSkins as $skinId) {
- $dto->ownedSkinsDetail[] = [
- 'id' => $skinId,
- 'name' => GameUserSkin::getSkinName($skinId),
- 'is_current' => $skinId === $dto->currentSkinId,
- ];
- }
-
- return $dto;
- }
- /**
- * 转换为数组
- *
- * @return array
- */
- public function toArray(): array
- {
- return [
- 'user_id' => $this->userId,
- 'current_skin_id' => $this->currentSkinId,
- 'current_skin_name' => $this->currentSkinName,
- 'owned_skins' => $this->ownedSkins,
- 'owned_skins_detail' => $this->ownedSkinsDetail,
- ];
- }
- /**
- * 检查是否拥有指定皮肤
- *
- * @param int $skinId
- * @return bool
- */
- public function hasSkin(int $skinId): bool
- {
- return in_array($skinId, $this->ownedSkins);
- }
- /**
- * 获取拥有的皮肤数量
- *
- * @return int
- */
- public function getOwnedSkinsCount(): int
- {
- return count($this->ownedSkins);
- }
- }
|