| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- namespace App\Module\Game\Logics;
- /**
- * 扣除数据收集逻辑
- *
- * 使用静态变量收集本次请求中的所有扣除数据
- * 区别于LastData(变化但未同步的),这里收集的是本次请求的扣除
- */
- class DeductCollectorLogic
- {
- /**
- * 物品扣除数据
- * 格式:[item_id => ['item_id' => int, 'instance_id' => int, 'quantity' => int]]
- *
- * @var array
- */
- private static array $itemDeducts = [];
- /**
- * 代币扣除数据
- * 格式:[coin_type => ['type' => int, 'quantity' => int]]
- *
- * @var array
- */
- private static array $coinDeducts = [];
- /**
- * 添加物品扣除
- *
- * @param int $itemId 物品ID
- * @param int $instanceId 物品实例ID
- * @param int $quantity 扣除数量
- * @return void
- */
- public static function addItemDeduct(int $itemId, int $instanceId, int $quantity): void
- {
- $key = $itemId . '_' . $instanceId;
-
- if (isset(self::$itemDeducts[$key])) {
- // 如果已存在,累加数量
- self::$itemDeducts[$key]['quantity'] += $quantity;
- } else {
- // 新增扣除记录
- self::$itemDeducts[$key] = [
- 'item_id' => $itemId,
- 'instance_id' => $instanceId,
- 'quantity' => $quantity,
- ];
- }
- }
- /**
- * 添加代币扣除
- *
- * @param int $coinType 代币类型
- * @param int $quantity 扣除数量
- * @return void
- */
- public static function addCoinDeduct(int $coinType, int $quantity): void
- {
- if (isset(self::$coinDeducts[$coinType])) {
- // 如果已存在,累加数量
- self::$coinDeducts[$coinType]['quantity'] += $quantity;
- } else {
- // 新增扣除记录
- self::$coinDeducts[$coinType] = [
- 'type' => $coinType,
- 'quantity' => $quantity,
- ];
- }
- }
- /**
- * 获取本次请求的所有扣除数据
- *
- * @return array 扣除数据数组,包含items和coins
- */
- public static function getDeducts(): array
- {
- return [
- 'items' => array_values(self::$itemDeducts),
- 'coins' => array_values(self::$coinDeducts),
- ];
- }
- /**
- * 清空本次请求的扣除数据
- *
- * @return void
- */
- public static function clearDeducts(): void
- {
- self::$itemDeducts = [];
- self::$coinDeducts = [];
- }
- /**
- * 检查是否有扣除数据
- *
- * @return bool
- */
- public static function hasDeducts(): bool
- {
- return !empty(self::$itemDeducts) || !empty(self::$coinDeducts);
- }
- /**
- * 获取物品扣除数据
- *
- * @return array
- */
- public static function getItemDeducts(): array
- {
- return array_values(self::$itemDeducts);
- }
- /**
- * 获取代币扣除数据
- *
- * @return array
- */
- public static function getCoinDeducts(): array
- {
- return array_values(self::$coinDeducts);
- }
- }
|