Files

96 lines
3.0 KiB
C#

namespace ALttPRandomizer.Settings {
using ALttPRandomizer.Model;
using System;
using System.Linq;
internal class RandomizerNameAttribute : Attribute {
public RandomizerNameAttribute(string name) {
this.Name = name;
}
public string Name { get; }
}
internal abstract class RandomizerSpecificAttribute : Attribute {
public RandomizerSpecificAttribute(RandomizerInstance[]? randomizers) {
this.Randomizers = randomizers;
}
protected RandomizerInstance[]? Randomizers { get; }
public bool HasRandomizer(RandomizerInstance name) {
if (this.Randomizers == null) {
return true;
}
return this.Randomizers.Contains(name);
}
}
internal class SettingNameAttribute : RandomizerSpecificAttribute {
public SettingNameAttribute(string name) : base(null) {
this.Name = name;
}
public SettingNameAttribute(RandomizerInstance[] randomizers, string name) : base(randomizers) {
this.Name = name;
}
public string Name { get; }
}
internal class NoSettingNameAttribute : RandomizerSpecificAttribute {
public NoSettingNameAttribute() : base(null) { }
public NoSettingNameAttribute(RandomizerInstance[] randomizers) : base(randomizers) { }
}
internal class AdditionalSettingAttribute : RandomizerSpecificAttribute {
public AdditionalSettingAttribute(string setting) : base(null) {
this.Setting = setting;
}
public AdditionalSettingAttribute(RandomizerInstance[] randomizers, string setting) : base(randomizers) {
this.Setting = setting;
}
public string Setting { get; }
}
internal class AddStartingItemsAttribute : RandomizerSpecificAttribute {
public AddStartingItemsAttribute(params string[] items) : base(null) {
this.Items = items;
}
public AddStartingItemsAttribute(RandomizerInstance[] randomizers, params string[] items) : base(randomizers) {
this.Items = items;
}
public string[] Items { get; }
}
internal class RequiredSettingAttribute : RandomizerSpecificAttribute {
public RequiredSettingAttribute(params object[] values) : base(null) {
this.Values = values;
}
public RequiredSettingAttribute(RandomizerInstance[] randomizers, params object[] values) : base(randomizers) {
this.Values = values;
}
public object[] Values { get; }
}
internal class ForbiddenSettingAttribute : RandomizerSpecificAttribute {
public ForbiddenSettingAttribute(params object[] values) : base(null) {
this.Values = values;
}
public ForbiddenSettingAttribute(RandomizerInstance[] randomizers, params object[] values) : base(randomizers) {
this.Values = values;
}
public object[] Values { get; }
}
}