zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Server/Model/Game/Entity/Skill/OdinAttr.cs

594 lines
21 KiB
C#
Executable File

using System;
using System.Collections.Generic;
using System.Text;
namespace Sirenix.OdinInspector
{
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class LabelTextAttribute : System.Attribute
{
public LabelTextAttribute(string value)
{
}
} [AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class SerializeFieldAttribute : System.Attribute
{
public SerializeFieldAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class SuffixLabelAttribute : System.Attribute
{
public SuffixLabelAttribute(string value)
{
}
public SuffixLabelAttribute(string value,bool overly)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class HideInInspectorAttribute : System.Attribute
{
public HideInInspectorAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class ButtonAttribute : System.Attribute
{
public ButtonAttribute(string value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class ButtonGroupAttribute : System.Attribute
{
public ButtonGroupAttribute(string value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class FoldoutGroupAttribute : System.Attribute
{
public FoldoutGroupAttribute(string value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class PropertyRangeAttribute : System.Attribute
{
public PropertyRangeAttribute(double min, double max)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class HideLabelAttribute : System.Attribute
{
public HideLabelAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class PropertySpaceAttribute : System.Attribute
{
public PropertySpaceAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class PropertyOrderAttribute : System.Attribute
{
public PropertyOrderAttribute(int order)
{
}
}
public enum TitleAlignments
{
/// <summary>Title and subtitle left aligned.</summary>
Left,
/// <summary>Title and subtitle centered aligned.</summary>
Centered,
/// <summary>Title and subtitle right aligned.</summary>
Right,
/// <summary>Title on the left, subtitle on the right.</summary>
Split,
}
public class TitleAttribute : Attribute
{
/// <summary>
/// The title displayed above the property in the inspector.
/// </summary>
public string Title;
/// <summary>Optional subtitle.</summary>
public string Subtitle;
/// <summary>
/// If <c>true</c> the title will be displayed with a bold font.
/// </summary>
public bool Bold;
/// <summary>
/// Gets a value indicating whether or not to draw a horizontal line below the title.
/// </summary>
public bool HorizontalLine;
/// <summary>Title alignment.</summary>
public TitleAlignments TitleAlignment;
/// <summary>Creates a title above any property in the inspector.</summary>
/// <param name="title">The title displayed above the property in the inspector.</param>
/// <param name="subtitle">Optional subtitle</param>
/// <param name="titleAlignment">Title alignment</param>
/// <param name="horizontalLine">Horizontal line</param>
/// <param name="bold">If <c>true</c> the title will be drawn with a bold font.</param>
public TitleAttribute(
string title,
string subtitle = null,
TitleAlignments titleAlignment = TitleAlignments.Left,
bool horizontalLine = true,
bool bold = true)
{
this.Title = title ?? "null";
this.Subtitle = subtitle;
this.Bold = bold;
this.TitleAlignment = titleAlignment;
this.HorizontalLine = horizontalLine;
}
}
public enum DictionaryDisplayOptions
{
ExpandedFoldout, OneLine,
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class DictionaryDrawerSettings : System.Attribute
{
public string KeyLabel;
public string ValueLabel;
public DictionaryDisplayOptions DisplayMode;
public DictionaryDrawerSettings()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class TitleGroup : System.Attribute
{
public TitleGroup(string value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class LabelWidthAttribute : System.Attribute
{
public LabelWidthAttribute(int value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class ShowIfAttribute : System.Attribute
{
public ShowIfAttribute(string value)
{
}
public ShowIfAttribute(string name, object value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class InfoBoxAttribute : System.Attribute
{
public InfoBoxAttribute(string value)
{
}
public InfoBoxAttribute(string value, InfoMessageType infoMessageType)
{
}
}
public enum InfoMessageType
{
Error
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class TabGroupAttribute : System.Attribute
{
public TabGroupAttribute(string value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class HideInEditorModeAttribute : System.Attribute
{
public HideInEditorModeAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class ShowInInspectorAttribute : System.Attribute
{
public ShowInInspectorAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class ListDrawerSettingsAttribute : System.Attribute
{
public bool ShowItemCount;
public bool ShowIndexLabels;
public ListDrawerSettingsAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class GUIColorAttribute : System.Attribute
{
public GUIColorAttribute(float r, float g, float b, float a = 0)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class ReadOnlyAttribute : System.Attribute
{
public ReadOnlyAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class MultiLinePropertyAttribute : System.Attribute
{
public MultiLinePropertyAttribute(int value)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class HorizontalGroupAttribute : System.Attribute
{
public HorizontalGroupAttribute()
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class HideIfAttribute : System.Attribute
{
public HideIfAttribute(string value, object m)
{
}
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class DisableInEditorModeAttribute : System.Attribute
{
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class EnumToggleButtonsAttribute : System.Attribute
{
}
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class MinValueAttribute : System.Attribute
{
public MinValueAttribute(int i)
{
}
}
public class BoxGroupAttribute : PropertyGroupAttribute
{
/// <summary>
/// If <c>true</c> a label for the group will be drawn on top.
/// </summary>
public bool ShowLabel;
/// <summary>
/// If <c>true</c> the header label will be places in the center of the group header. Otherwise it will be in left side.
/// </summary>
public bool CenterLabel;
/// <summary>Adds the property to the specified box group.</summary>
/// <param name="group">The box group.</param>
/// <param name="showLabel">If <c>true</c> a label will be drawn for the group.</param>
/// <param name="centerLabel">If set to <c>true</c> the header label will be centered.</param>
/// <param name="order">The order of the group in the inspector.</param>
public BoxGroupAttribute(string group, bool showLabel = true, bool centerLabel = false, int order = 0)
: base(group, order)
{
this.ShowLabel = showLabel;
this.CenterLabel = centerLabel;
}
/// <summary>
/// Initializes a new instance of the <see cref="T:Sirenix.OdinInspector.BoxGroupAttribute" /> class. Use the other constructor overloads in order to show a header-label on the box group.
/// </summary>
public BoxGroupAttribute()
: this("_DefaultBoxGroup", false, false, 0)
{
}
/// <summary>Combines the box group with another group.</summary>
/// <param name="other">The other group.</param>
protected override void CombineValuesWith(PropertyGroupAttribute other)
{
BoxGroupAttribute boxGroupAttribute = other as BoxGroupAttribute;
if (!this.ShowLabel || !boxGroupAttribute.ShowLabel)
{
this.ShowLabel = false;
boxGroupAttribute.ShowLabel = false;
}
this.CenterLabel |= boxGroupAttribute.CenterLabel;
}
}
public class ValueDropdownAttribute : Attribute
{
/// <summary>
/// Name of any field, property or method member that implements IList. E.g. arrays or Lists.
/// </summary>
public string MemberName;
/// <summary>
/// The number of items before enabling search. Default is 10.
/// </summary>
public int NumberOfItemsBeforeEnablingSearch;
/// <summary>False by default.</summary>
public bool IsUniqueList;
/// <summary>
/// True by default. If the ValueDropdown attribute is applied to a list, then disabling this,
/// will render all child elements normally without using the ValueDropdown. The ValueDropdown will
/// still show up when you click the add button on the list drawer, unless <see cref="F:Sirenix.OdinInspector.ValueDropdownAttribute.DisableListAddButtonBehaviour" /> is true.
/// </summary>
public bool DrawDropdownForListElements;
/// <summary>False by default.</summary>
public bool DisableListAddButtonBehaviour;
/// <summary>
/// If the ValueDropdown attribute is applied to a list, and <see cref="F:Sirenix.OdinInspector.ValueDropdownAttribute.IsUniqueList" /> is set to true, then enabling this,
/// will exclude existing values, instead of rendering a checkbox indicating whether the item is already included or not.
/// </summary>
public bool ExcludeExistingValuesInList;
/// <summary>
/// If the dropdown renders a tree-view, then setting this to true will ensure everything is expanded by default.
/// </summary>
public bool ExpandAllMenuItems;
/// <summary>
/// If true, instead of replacing the drawer with a wide dropdown-field, the dropdown button will be a little button, drawn next to the other drawer.
/// </summary>
public bool AppendNextDrawer;
/// <summary>
/// Disables the the GUI for the appended drawer. False by default.
/// </summary>
public bool DisableGUIInAppendedDrawer;
/// <summary>
/// By default, a single click selects and confirms the selection.
/// </summary>
public bool DoubleClickToConfirm;
/// <summary>By default, the dropdown will create a tree view.</summary>
public bool FlattenTreeView;
/// <summary>
/// Gets or sets the width of the dropdown. Default is zero.
/// </summary>
public int DropdownWidth;
/// <summary>
/// Gets or sets the height of the dropdown. Default is zero.
/// </summary>
public int DropdownHeight;
/// <summary>
/// Gets or sets the title for the dropdown. Null by default.
/// </summary>
public string DropdownTitle;
/// <summary>False by default.</summary>
public bool SortDropdownItems;
/// <summary>Whether to draw all child properties in a foldout.</summary>
public bool HideChildProperties;
/// <summary>Creates a dropdown menu for a property.</summary>
/// <param name="memberName">Name of any field, property or method member that implements IList. E.g. arrays or Lists.</param>
public ValueDropdownAttribute(string memberName)
{
this.NumberOfItemsBeforeEnablingSearch = 10;
this.MemberName = memberName;
this.DrawDropdownForListElements = true;
}
}
public sealed class OnValueChangedAttribute : Attribute
{
/// <summary>Name of callback member function.</summary>
public string MethodName;
/// <summary>
/// Whether to invoke the method when a child value of the property is changed.
/// </summary>
public bool IncludeChildren;
/// <summary>
/// Adds a callback for when the property's value is changed.
/// </summary>
/// <param name="methodName">Name of the method.</param>
/// <param name="includeChildren">Whether to invoke the method when a child value of the property is changed.</param>
public OnValueChangedAttribute(string methodName, bool includeChildren = false)
{
this.MethodName = methodName;
this.IncludeChildren = includeChildren;
}
}
public class HideReferenceObjectPickerAttribute : Attribute
{
}
public abstract class PropertyGroupAttribute : Attribute
{
/// <summary>The ID used to grouping properties together.</summary>
public string GroupID;
/// <summary>
/// The name of the group. This is the last part of the group ID if there is a path, otherwise it is just the group ID.
/// </summary>
public string GroupName;
/// <summary>The order of the group.</summary>
public int Order;
/// <summary>
/// Initializes a new instance of the <see cref="T:Sirenix.OdinInspector.PropertyGroupAttribute" /> class.
/// </summary>
/// <param name="groupId">The group identifier.</param>
/// <param name="order">The group order.</param>
public PropertyGroupAttribute(string groupId, int order)
{
this.GroupID = groupId;
this.Order = order;
int num = groupId.LastIndexOf('/');
this.GroupName = num < 0 || num >= groupId.Length ? groupId : groupId.Substring(num + 1);
}
/// <summary>
/// Initializes a new instance of the <see cref="T:Sirenix.OdinInspector.PropertyGroupAttribute" /> class.
/// </summary>
/// <param name="groupId">The group identifier.</param>
public PropertyGroupAttribute(string groupId)
: this(groupId, 0)
{
}
/// <summary>
/// <para>Combines this attribute with another attribute of the same type.
/// This method invokes the virtual <see cref="M:Sirenix.OdinInspector.PropertyGroupAttribute.CombineValuesWith(Sirenix.OdinInspector.PropertyGroupAttribute)" /> method to invoke custom combine logic.</para>
/// <para>All group attributes are combined to one attribute used by a single OdinGroupDrawer.</para>
/// <para>Example: <code>protected override void CombineValuesWith(PropertyGroupAttribute other) { this.Title = this.Title ?? (other as MyGroupAttribute).Title; }</code></para>
/// </summary>
/// <param name="other">The attribute to combine with.</param>
/// <returns>The instance that the method was invoked on.</returns>
/// <exception cref="T:System.ArgumentNullException">The argument 'other' was null.</exception>
/// <exception cref="T:System.ArgumentException">
/// Attributes to combine are not of the same type.
/// or
/// PropertyGroupAttributes to combine must have the same group id.
/// </exception>
public PropertyGroupAttribute Combine(PropertyGroupAttribute other)
{
if (other == null)
throw new ArgumentNullException(nameof(other));
if (other.GetType() != this.GetType())
throw new ArgumentException("Attributes to combine are not of the same type.");
if (other.GroupID != this.GroupID)
throw new ArgumentException("PropertyGroupAttributes to combine must have the same group id.");
if (this.Order == 0)
this.Order = other.Order;
else if (other.Order != 0)
this.Order = Math.Min(this.Order, other.Order);
this.CombineValuesWith(other);
return this;
}
/// <summary>
/// <para>Override this method to add custom combine logic to your group attribute. This method determines how your group's parameters combine when spread across multiple attribute declarations in the same class.</para>
/// <para>Remember, in .NET, member order is not guaranteed, so you never know which order your attributes will be combined in.</para>
/// </summary>
/// <param name="other">The attribute to combine with. This parameter is guaranteed to be of the correct attribute type.</param>
/// <example>
/// <para>This example shows how <see cref="T:Sirenix.OdinInspector.BoxGroupAttribute" /> attributes are combined.</para>
/// <code>
/// protected override void CombineValuesWith(PropertyGroupAttribute other)
/// {
/// // The given attribute parameter is *guaranteed* to be of type BoxGroupAttribute.
/// var attr = other as BoxGroupAttribute;
///
/// // If this attribute has no label, we the other group's label, thus preserving the label across combines.
/// if (this.Label == null)
/// {
/// this.Label = attr.Label;
/// }
///
/// // Combine ShowLabel and CenterLabel parameters.
/// this.ShowLabel |= attr.ShowLabel;
/// this.CenterLabel |= attr.CenterLabel;
/// }
/// </code>
/// </example>
protected virtual void CombineValuesWith(PropertyGroupAttribute other)
{
}
}
public sealed class TextAreaAttribute : PropertyAttribute
{
/// <summary>
/// <para>The minimum amount of lines the text area will use.</para>
/// </summary>
public readonly int minLines;
/// <summary>
/// <para>The maximum amount of lines the text area can show before it starts using a scrollbar.</para>
/// </summary>
public readonly int maxLines;
/// <summary>
/// <para>Attribute to make a string be edited with a height-flexible and scrollable text area.</para>
/// </summary>
/// <param name="minLines">The minimum amount of lines the text area will use.</param>
/// <param name="maxLines">The maximum amount of lines the text area can show before it starts using a scrollbar.</param>
public TextAreaAttribute()
{
this.minLines = 3;
this.maxLines = 3;
}
/// <summary>
/// <para>Attribute to make a string be edited with a height-flexible and scrollable text area.</para>
/// </summary>
/// <param name="minLines">The minimum amount of lines the text area will use.</param>
/// <param name="maxLines">The maximum amount of lines the text area can show before it starts using a scrollbar.</param>
public TextAreaAttribute(int minLines, int maxLines)
{
this.minLines = minLines;
this.maxLines = maxLines;
}
}
public abstract class PropertyAttribute : Attribute
{
/// <summary>
/// <para>Optional field to specify the order that multiple DecorationDrawers should be drawn in.</para>
/// </summary>
public int order { get; set; }
}
}