ModernUO/Server/Attributes.cs

179 lines
4.1 KiB
C#

/***************************************************************************
* Attributes.cs
* -------------------
* begin : May 1, 2002
* copyright : (C) The RunUO Software Team
* email : info@runuo.com
*
* $Id$
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Reflection;
namespace Server
{
[AttributeUsage( AttributeTargets.Property )]
public class HueAttribute : Attribute
{
public HueAttribute()
{
}
}
[AttributeUsage( AttributeTargets.Property )]
public class BodyAttribute : Attribute
{
public BodyAttribute()
{
}
}
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )]
public class PropertyObjectAttribute : Attribute
{
public PropertyObjectAttribute()
{
}
}
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )]
public class NoSortAttribute : Attribute
{
public NoSortAttribute()
{
}
}
[AttributeUsage( AttributeTargets.Method )]
public class CallPriorityAttribute : Attribute
{
public int Priority { get; set; }
public CallPriorityAttribute( int priority )
{
Priority = priority;
}
}
public class CallPriorityComparer : IComparer<MethodInfo>
{
public int Compare( MethodInfo x, MethodInfo y )
{
if ( x == null && y == null )
return 0;
if ( x == null )
return 1;
if ( y == null )
return -1;
var xPriority = GetPriority( x );
var yPriority = GetPriority( y );
if ( xPriority > yPriority )
return 1;
if ( xPriority < yPriority )
return -1;
return 0;
}
private int GetPriority( MethodInfo mi )
{
object[] objs = mi.GetCustomAttributes( typeof( CallPriorityAttribute ), true );
if ( objs.Length == 0 )
return 0;
if ( !(objs[0] is CallPriorityAttribute attr) )
return 0;
return attr.Priority;
}
}
[AttributeUsage( AttributeTargets.Class )]
public class TypeAliasAttribute : Attribute
{
public string[] Aliases { get; }
public TypeAliasAttribute( params string[] aliases )
{
Aliases = aliases;
}
}
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct )]
public class ParsableAttribute : Attribute
{
public ParsableAttribute()
{
}
}
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum )]
public class CustomEnumAttribute : Attribute
{
public string[] Names { get; }
public CustomEnumAttribute( string[] names )
{
Names = names;
}
}
[AttributeUsage( AttributeTargets.Constructor )]
public class ConstructibleAttribute : Attribute
{
public AccessLevel AccessLevel { get; set; }
public ConstructibleAttribute() : this( AccessLevel.Player ) //Lowest accesslevel for current functionality (Level determined by access to [add)
{
}
public ConstructibleAttribute( AccessLevel accessLevel )
{
AccessLevel = accessLevel;
}
}
[AttributeUsage( AttributeTargets.Property )]
public class CommandPropertyAttribute : Attribute
{
public AccessLevel ReadLevel { get; }
public AccessLevel WriteLevel { get; }
public bool ReadOnly { get; }
public CommandPropertyAttribute( AccessLevel level, bool readOnly )
{
ReadLevel = level;
ReadOnly = readOnly;
}
public CommandPropertyAttribute( AccessLevel level ) : this( level, level )
{
}
public CommandPropertyAttribute( AccessLevel readLevel, AccessLevel writeLevel )
{
ReadLevel = readLevel;
WriteLevel = writeLevel;
}
}
}