Generics for Mobile.BeginPrompt<T> and Mobile.BeginTarget<T>
This commit is contained in:
parent
0ef1458db7
commit
2971234c1c
1 changed files with 90 additions and 0 deletions
|
|
@ -42,9 +42,11 @@ namespace Server
|
|||
#region Callbacks
|
||||
public delegate void TargetCallback( Mobile from, object targeted );
|
||||
public delegate void TargetStateCallback( Mobile from, object targeted, object state );
|
||||
public delegate void TargetStateCallback<T>( Mobile from, object targeted, T state );
|
||||
|
||||
public delegate void PromptCallback( Mobile from, string text );
|
||||
public delegate void PromptStateCallback( Mobile from, string text, object state );
|
||||
public delegate void PromptStateCallback<T>( Mobile from, string text, T state );
|
||||
#endregion
|
||||
|
||||
#region [...]Mods
|
||||
|
|
@ -2708,6 +2710,33 @@ namespace Server
|
|||
return t;
|
||||
}
|
||||
|
||||
private class SimpleStateTarget<T> : Target
|
||||
{
|
||||
private TargetStateCallback<T> m_Callback;
|
||||
private T m_State;
|
||||
|
||||
public SimpleStateTarget(int range, TargetFlags flags, bool allowGround, TargetStateCallback<T> callback, T state)
|
||||
: base(range, allowGround, flags)
|
||||
{
|
||||
m_Callback = callback;
|
||||
m_State = state;
|
||||
}
|
||||
|
||||
protected override void OnTarget(Mobile from, object targeted)
|
||||
{
|
||||
if (m_Callback != null)
|
||||
m_Callback(from, targeted, m_State);
|
||||
}
|
||||
}
|
||||
public Target BeginTarget<T>(int range, bool allowGround, TargetFlags flags, TargetStateCallback<T> callback, T state)
|
||||
{
|
||||
Target t = new SimpleStateTarget<T>(range, flags, allowGround, callback, state);
|
||||
|
||||
this.Target = t;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
public Target Target
|
||||
{
|
||||
get
|
||||
|
|
@ -2763,6 +2792,7 @@ namespace Server
|
|||
return true;
|
||||
}
|
||||
|
||||
#region Prompts
|
||||
private class SimplePrompt : Prompt
|
||||
{
|
||||
private PromptCallback m_Callback;
|
||||
|
|
@ -2878,6 +2908,65 @@ namespace Server
|
|||
return BeginPrompt( callback, false, state );
|
||||
}
|
||||
|
||||
private class SimpleStatePrompt<T> : Prompt
|
||||
{
|
||||
private PromptStateCallback<T> m_Callback;
|
||||
private PromptStateCallback<T> m_CancelCallback;
|
||||
|
||||
private bool m_CallbackHandlesCancel;
|
||||
|
||||
private T m_State;
|
||||
|
||||
public SimpleStatePrompt(PromptStateCallback<T> callback, PromptStateCallback<T> cancelCallback, T state)
|
||||
{
|
||||
m_Callback = callback;
|
||||
m_CancelCallback = cancelCallback;
|
||||
m_State = state;
|
||||
}
|
||||
public SimpleStatePrompt(PromptStateCallback<T> callback, bool callbackHandlesCancel, T state)
|
||||
{
|
||||
m_Callback = callback;
|
||||
m_State = state;
|
||||
m_CallbackHandlesCancel = callbackHandlesCancel;
|
||||
}
|
||||
public SimpleStatePrompt(PromptStateCallback<T> callback, T state)
|
||||
: this(callback, false, state)
|
||||
{
|
||||
}
|
||||
|
||||
public override void OnResponse(Mobile from, string text)
|
||||
{
|
||||
if (m_Callback != null)
|
||||
m_Callback(from, text, m_State);
|
||||
}
|
||||
|
||||
public override void OnCancel(Mobile from)
|
||||
{
|
||||
if (m_CallbackHandlesCancel && m_Callback != null)
|
||||
m_Callback(from, "", m_State);
|
||||
else if (m_CancelCallback != null)
|
||||
m_CancelCallback(from, "", m_State);
|
||||
}
|
||||
}
|
||||
public Prompt BeginPrompt<T>(PromptStateCallback<T> callback, PromptStateCallback<T> cancelCallback, T state)
|
||||
{
|
||||
Prompt p = new SimpleStatePrompt<T>(callback, cancelCallback, state);
|
||||
|
||||
this.Prompt = p;
|
||||
return p;
|
||||
}
|
||||
public Prompt BeginPrompt<T>(PromptStateCallback<T> callback, bool callbackHandlesCancel, T state)
|
||||
{
|
||||
Prompt p = new SimpleStatePrompt<T>(callback, callbackHandlesCancel, state);
|
||||
|
||||
this.Prompt = p;
|
||||
return p;
|
||||
}
|
||||
public Prompt BeginPrompt<T>(PromptStateCallback<T> callback, T state)
|
||||
{
|
||||
return BeginPrompt(callback, false, state);
|
||||
}
|
||||
|
||||
public Prompt Prompt
|
||||
{
|
||||
get
|
||||
|
|
@ -2903,6 +2992,7 @@ namespace Server
|
|||
Send( new UnicodePrompt( newPrompt ) );
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
private bool InternalOnMove( Direction d )
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue