namespace Sandbox;
///
/// Marks a method as being an RPC. This means that it can be called over the network.
///
[AttributeUsage( AttributeTargets.Method )]
[CodeGenerator( CodeGeneratorFlags.Instance | CodeGeneratorFlags.WrapMethod, "__rpc_Wrapper" )]
[CodeGenerator( CodeGeneratorFlags.Static | CodeGeneratorFlags.WrapMethod, "Sandbox.Rpc.OnCallRpc" )]
public abstract class RpcAttribute : Attribute
{
internal RpcMode Mode { get; set; } = RpcMode.Broadcast;
public NetFlags Flags { get; set; } = NetFlags.Reliable;
internal RpcAttribute( RpcMode mode, NetFlags flags = NetFlags.Reliable )
{
Mode = mode;
Flags = flags;
}
}
public static partial class Rpc
{
///
/// Marks a method as being an RPC. It will be called for everyone.
///
[AttributeUsage( AttributeTargets.Method )]
[CodeGenerator( CodeGeneratorFlags.Instance | CodeGeneratorFlags.WrapMethod, "__rpc_Wrapper" )]
[CodeGenerator( CodeGeneratorFlags.Static | CodeGeneratorFlags.WrapMethod, "Sandbox.Rpc.OnCallRpc" )]
public class BroadcastAttribute : RpcAttribute
{
public BroadcastAttribute( NetFlags flags = NetFlags.Reliable ) : base( RpcMode.Broadcast, flags )
{
}
}
///
/// Marks a method as being an RPC. It will only be called on the host.
///
[AttributeUsage( AttributeTargets.Method )]
[CodeGenerator( CodeGeneratorFlags.Instance | CodeGeneratorFlags.WrapMethod, "__rpc_Wrapper" )]
[CodeGenerator( CodeGeneratorFlags.Static | CodeGeneratorFlags.WrapMethod, "Sandbox.Rpc.OnCallRpc" )]
public class HostAttribute : RpcAttribute
{
public HostAttribute( NetFlags flags = NetFlags.Reliable ) : base( RpcMode.Host, flags )
{
}
}
///
/// Marks a method as being an RPC. It will only be called on owner of this object.
///
[AttributeUsage( AttributeTargets.Method )]
[CodeGenerator( CodeGeneratorFlags.Instance | CodeGeneratorFlags.WrapMethod, "__rpc_Wrapper" )]
[CodeGenerator( CodeGeneratorFlags.Static | CodeGeneratorFlags.WrapMethod, "Sandbox.Rpc.OnCallRpc" )]
public class OwnerAttribute : RpcAttribute
{
public OwnerAttribute( NetFlags flags = NetFlags.Reliable ) : base( RpcMode.Owner, flags )
{
}
}
}