S3-01 + S3-02
This commit is contained in:
@@ -6,35 +6,75 @@ namespace GeometryTD.CustomUtility
|
||||
{
|
||||
public static class InventoryParticipantUtility
|
||||
{
|
||||
public static bool TryAddParticipantTower(BackpackInventoryData inventory, long towerInstanceId, int maxCount)
|
||||
public static ParticipantTowerAssignResult TryAddParticipantTower(
|
||||
BackpackInventoryData inventory,
|
||||
long towerInstanceId,
|
||||
int maxCount)
|
||||
{
|
||||
if (inventory == null || towerInstanceId <= 0)
|
||||
{
|
||||
return false;
|
||||
return new ParticipantTowerAssignResult
|
||||
{
|
||||
TowerInstanceId = towerInstanceId,
|
||||
FailureReason = ParticipantTowerAssignFailureReason.TowerMissing,
|
||||
ValidationFailureReason = CombatParticipantTowerValidationFailureReason.None
|
||||
};
|
||||
}
|
||||
|
||||
int resolvedMaxCount = Mathf.Max(1, maxCount);
|
||||
NormalizeParticipantState(inventory, resolvedMaxCount);
|
||||
if (!TryGetTowerById(inventory, towerInstanceId, out TowerItemData tower))
|
||||
CombatParticipantTowerValidationResult validationResult =
|
||||
CombatParticipantTowerValidationService.ValidateTower(inventory, towerInstanceId);
|
||||
if (!validationResult.IsValid)
|
||||
{
|
||||
return false;
|
||||
return new ParticipantTowerAssignResult
|
||||
{
|
||||
TowerInstanceId = towerInstanceId,
|
||||
FailureReason = validationResult.FailureReason == CombatParticipantTowerValidationFailureReason.TowerMissing
|
||||
? ParticipantTowerAssignFailureReason.TowerMissing
|
||||
: ParticipantTowerAssignFailureReason.InvalidTower,
|
||||
ValidationFailureReason = validationResult.FailureReason
|
||||
};
|
||||
}
|
||||
|
||||
inventory.ParticipantTowerInstanceIds ??= new List<long>();
|
||||
if (inventory.ParticipantTowerInstanceIds.Contains(towerInstanceId))
|
||||
{
|
||||
tower.IsParticipatingInCombat = true;
|
||||
return false;
|
||||
if (validationResult.Tower != null)
|
||||
{
|
||||
validationResult.Tower.IsParticipatingInCombat = true;
|
||||
}
|
||||
|
||||
return new ParticipantTowerAssignResult
|
||||
{
|
||||
TowerInstanceId = towerInstanceId,
|
||||
FailureReason = ParticipantTowerAssignFailureReason.AlreadyAssigned,
|
||||
ValidationFailureReason = CombatParticipantTowerValidationFailureReason.None
|
||||
};
|
||||
}
|
||||
|
||||
if (inventory.ParticipantTowerInstanceIds.Count >= resolvedMaxCount)
|
||||
{
|
||||
return false;
|
||||
return new ParticipantTowerAssignResult
|
||||
{
|
||||
TowerInstanceId = towerInstanceId,
|
||||
FailureReason = ParticipantTowerAssignFailureReason.ParticipantAreaFull,
|
||||
ValidationFailureReason = CombatParticipantTowerValidationFailureReason.None
|
||||
};
|
||||
}
|
||||
|
||||
inventory.ParticipantTowerInstanceIds.Add(towerInstanceId);
|
||||
tower.IsParticipatingInCombat = true;
|
||||
return true;
|
||||
if (validationResult.Tower != null)
|
||||
{
|
||||
validationResult.Tower.IsParticipatingInCombat = true;
|
||||
}
|
||||
|
||||
return new ParticipantTowerAssignResult
|
||||
{
|
||||
TowerInstanceId = towerInstanceId,
|
||||
FailureReason = ParticipantTowerAssignFailureReason.None,
|
||||
ValidationFailureReason = CombatParticipantTowerValidationFailureReason.None
|
||||
};
|
||||
}
|
||||
|
||||
public static bool TryRemoveParticipantTower(BackpackInventoryData inventory, long towerInstanceId, int maxCount)
|
||||
|
||||
Reference in New Issue
Block a user