| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <?php
- namespace App\Module\Game\Models;
- use UCore\ModelCore;
- use Illuminate\Database\Eloquent\Relations\BelongsTo;
- /**
- * 用户皮肤模型
- *
- * field start
- * @property int $id 主键
- * @property int $user_id 用户ID
- * @property int $current_skin_id 当前使用皮肤ID(1-4)
- * @property string $owned_skins 拥有的皮肤,逗号分隔,如"1,2,3"
- * @property \Carbon\Carbon $created_at 创建时间
- * @property \Carbon\Carbon $updated_at 更新时间
- * field end
- */
- class GameUserSkin extends ModelCore
- {
- /**
- * 与模型关联的表名
- *
- * @var string
- */
- protected $table = 'game_user_skins';
- // attrlist start
- protected $fillable = [
- 'id',
- 'user_id',
- 'current_skin_id',
- 'owned_skins',
- ];
- // attrlist end
- /**
- * 应该被转换为原生类型的属性
- *
- * @var array
- */
- protected $casts = [
- 'user_id' => 'integer',
- 'current_skin_id' => 'integer',
- 'owned_skins' => 'string',
- ];
- /**
- * 获取用户信息
- *
- * @return BelongsTo
- */
- public function user(): BelongsTo
- {
- return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id', 'id');
- }
- /**
- * 获取拥有的皮肤数组
- *
- * @return array
- */
- public function getOwnedSkinsArrayAttribute(): array
- {
- if (empty($this->owned_skins)) {
- return [1]; // 默认拥有1号皮肤
- }
-
- return array_map('intval', explode(',', $this->owned_skins));
- }
- /**
- * 设置拥有的皮肤数组
- *
- * @param array $skins
- * @return void
- */
- public function setOwnedSkinsArray(array $skins): void
- {
- // 确保包含1号皮肤
- if (!in_array(1, $skins)) {
- $skins[] = 1;
- }
-
- // 去重并排序
- $skins = array_unique($skins);
- sort($skins);
-
- $this->owned_skins = implode(',', $skins);
- }
- /**
- * 检查是否拥有指定皮肤
- *
- * @param int $skinId
- * @return bool
- */
- public function hasSkin(int $skinId): bool
- {
- return in_array($skinId, $this->getOwnedSkinsArrayAttribute());
- }
- /**
- * 添加皮肤
- *
- * @param int $skinId
- * @return bool 是否成功添加(如果已拥有则返回false)
- */
- public function addSkin(int $skinId): bool
- {
- if ($this->hasSkin($skinId)) {
- return false; // 已经拥有
- }
-
- $skins = $this->getOwnedSkinsArrayAttribute();
- $skins[] = $skinId;
- $this->setOwnedSkinsArray($skins);
-
- return true;
- }
- /**
- * 切换当前皮肤
- *
- * @param int $skinId
- * @return bool 是否成功切换
- */
- public function changeSkin(int $skinId): bool
- {
- if (!$this->hasSkin($skinId)) {
- return false; // 不拥有该皮肤
- }
-
- $this->current_skin_id = $skinId;
- return true;
- }
- /**
- * 获取皮肤名称
- *
- * @param int $skinId
- * @return string
- */
- public static function getSkinName(int $skinId): string
- {
- $names = \App\Module\Game\Enums\SKIN::getValueDescription();
- return $names[$skinId] ?? '未知皮肤';
- }
- /**
- * 获取所有可用皮肤
- *
- * @return array
- */
- public static function getAllSkins(): array
- {
- return \App\Module\Game\Enums\SKIN::getValueDescription();
- }
- /**
- * 验证皮肤ID是否有效
- *
- * @param int $skinId
- * @return bool
- */
- public static function isValidSkinId(int $skinId): bool
- {
- return $skinId >= 1 && $skinId <= 4;
- }
- }
|