namespace GeometryTD.Definition { public class AddRandomCompsEffect : EventEffectBase { public override EventEffectType EffectType => EventEffectType.AddRandomComps; public override EventEffectParam Param => _param; private AddRandomCompsParam _param; public AddRandomCompsEffect(AddRandomCompsParam param, float? probability = null) { _param = param; Probability = probability; } } public class AddRandomCompsParam : EventEffectParam { public int Count; public RarityType Rarity; public RarityType MinRarity; public RarityType MaxRarity; public AddRandomCompsParam(int count, RarityType rarity) { Count = count; RarityType normalizedRarity = InventoryRarityRuleService.NormalizeComponentRarity(rarity); Rarity = normalizedRarity; MinRarity = normalizedRarity; MaxRarity = normalizedRarity; } public AddRandomCompsParam(int count, RarityType minRarity, RarityType maxRarity) { Count = count; MinRarity = InventoryRarityRuleService.NormalizeComponentRarity(minRarity); MaxRarity = InventoryRarityRuleService.NormalizeComponentRarity(maxRarity); if (MinRarity > MaxRarity) { throw new System.ArgumentOutOfRangeException( nameof(minRarity), $"AddRandomComps rarity range is invalid: {MinRarity} > {MaxRarity}."); } Rarity = MinRarity == MaxRarity ? MinRarity : RarityType.None; } } }