31 using System.Collections.Generic;
61 if ( x.gestureType != null && y.gestureType == null )
return -1;
62 if ( x.gestureType == null && y.gestureType != null )
return 1;
65 if ( x.GameObject != null && y.GameObject != null )
69 return yi.CompareTo( xi );
71 if ( x.GameObject != null )
return -1;
72 if ( y.GameObject != null )
return 1;
81 internal List<Listener> listeners =
new List<Listener>();
82 protected Queue<ListenerAction> listenerActions =
new Queue<ListenerAction>();
83 protected List<Listener> disabledListeners =
new List<Listener>();
84 protected Dictionary<Delegate, string> helpTextsForHandlers =
new Dictionary<Delegate, string>();
89 internal bool BufferPurging {
get;
set; }
94 public bool Enabled {
get;
set; }
119 helpTextsForHandlers.Add( controlHandler, text );
122 public void AddHelpText<T1>(
Handler<T1> controlHandler,
string text )
124 helpTextsForHandlers.Add( controlHandler, text );
129 helpTextsForHandlers.Add( controlHandler, text );
134 helpTextsForHandlers.Add( controlHandler, text );
139 helpTextsForHandlers.Add( controlHandler, text );
144 helpTextsForHandlers.Add( controlHandler, text );
149 helpTextsForHandlers.Add( controlHandler, text );
154 helpTextsForHandlers.Add( controlHandler, text );
159 helpTextsForHandlers.Add( controlHandler, text );
164 helpTextsForHandlers.Add( controlHandler, text );
171 internal abstract string GetControlText(
Listener listener );
174 internal void GetHelpTexts( List<string> texts )
176 var controlTextsForHandlerMethods =
new Dictionary<Delegate, StringBuilder>();
178 foreach ( var listener
in listeners )
179 GetHelpText( listener, controlTextsForHandlerMethods, texts );
180 foreach ( var action
in listenerActions )
184 GetHelpText( action.listener, controlTextsForHandlerMethods, texts );
187 foreach ( var item
in controlTextsForHandlerMethods )
189 texts.Add( item.Value +
" - " + helpTextsForHandlers[item.Key] );
193 private void GetHelpText(
195 Dictionary<Delegate, StringBuilder> controlTextsForHandlerMethods,
198 Delegate handlerMethod = listener.Handler;
199 string controlText = this.GetControlText( listener );
201 if ( helpTextsForHandlers.ContainsKey( handlerMethod ) )
205 if ( !controlTextsForHandlerMethods.ContainsKey( handlerMethod ) )
207 controlTextsForHandlerMethods[handlerMethod] =
new StringBuilder( controlText );
211 controlTextsForHandlerMethods[handlerMethod].Append(
", " + controlText );
214 else if ( listener.HelpText != null )
218 texts.Add( controlText +
" - " + listener.HelpText );
226 public void Disable( Predicate<Listener> predicate )
230 if ( predicate( l ) )
241 public void Enable( Predicate<Listener> predicate )
243 foreach (
Listener l
in disabledListeners )
245 if ( predicate( l ) )
265 Disable( x =>
true );
278 bool sortListeners =
false;
280 while ( listenerActions.Count > 0 )
288 sortListeners =
true;
291 listeners.Remove( action.
listener );
292 disabledListeners.Remove( action.
listener );
297 sortListeners =
true;
298 disabledListeners.Remove( action.
listener );
301 foreach (
Listener listener
in listeners )
302 listener.Disassociate();
303 listeners.Remove( action.
listener );
304 disabledListeners.Add( action.
listener );
308 disabledListeners.Clear();
309 helpTextsForHandlers.Clear();
315 listeners.Sort(
Controller.ListenerComparer );
318 internal virtual void Update()
320 ProcessListenerActions();
328 if ( !l1.HasDefaultContext ) v1 = 1;
329 if ( !l2.HasDefaultContext ) v2 = 1;
337 internal abstract bool IsBufferEmpty();
344 internal void PurgeBuffer()
347 BufferPurging =
true;
356 internal ControllerState oldState;
357 internal ControllerState newState;
359 internal abstract ControllerState GetCurrentState();
366 internal override void Update()
371 ProcessListenerActions();
374 newState = GetCurrentState();
379 if ( !IsBufferEmpty() )
382 newState = oldState = GetCurrentState();
387 BufferPurging =
false;
390 for (
int i = listeners.Count - 1; i >= 0; i-- )
396 listeners.RemoveAt( i );
402 int numChannels = thisPointing != null ? thisPointing.
ActiveChannels : 1;
404 for (
int ch = 0; ch < numChannels; ch++ )
406 List<Listener> mostPrecedent = null;
408 for (
int i = 0; i < listeners.Count; i++ )
419 if ( thisPointing != null )
424 if ( mostPrecedent == null )
426 mostPrecedent =
new List<Listener>();
427 mostPrecedent.Add( l );
431 int cmp = ListenerComparer.Compare( l, mostPrecedent[0] );
436 mostPrecedent.Add( l );
441 mostPrecedent.Clear();
442 mostPrecedent.Add( l );
447 else if ( IsTriggered( l ) )
454 if ( mostPrecedent != null )
457 foreach (
Listener l
in mostPrecedent )
void ProcessListenerActions()
ListenerActionType actionType
void EnableAll()
Ottaa takaisin käyttöön kaikki Disable-metodilla poistetut kontrollit.
virtual bool IsAnalogTriggered(Listener listener, out AnalogState state)
virtual void UpdateState()
void DisableAll()
Poistaa kaikki kontrollit käytöstä.
static int CompareByContext(Listener l1, Listener l2)
delegate void AnalogHandler< T1, T2 >(AnalogState analogState, T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
void Disable(Predicate< Listener > predicate)
Poistaa tietyt kuuntelutapahtumat käytöstä.
void AddHelpText(Handler controlHandler, string text)
Lisää ohjeteksti, joka on sama kaikille näppäimille tai muille ohjaimille, jotka käyttävät samaa alio...
void AddHelpText(AnalogHandler controlHandler, string text)
delegate void Handler< T1, T2, T3 >(T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
SynchronousList< Layer > Layers
Kerrokset, joilla pelioliot viihtyvät.
Peliluokka reaaliaikaisille peleille.
delegate void AnalogHandler(AnalogState analogState)
Ohjaintapahtumankäsittelijä ilman parametreja.
delegate void Handler< T1 >(T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
Parametrit analogisen ohjauksen (hiiren tai ohjaustikun) tapahtumalle.
bool IsTriggeredOnChannel(int ch, Listener l)
delegate void Handler()
Ohjaintapahtumankäsittelijä ilman parametreja.
ListenerAction(Listener l, ListenerActionType a)
virtual void Clear()
Poistaa tämän ohjaimen kaikki kuuntelijat.
delegate void Handler< T1, T2 >(T1 p1, T2 p2)
Ohjaintapahtumankäsittelijä kahdella parametrilla.
delegate void AnalogHandler< T1, T2, T3 >(AnalogState analogState, T1 p1, T2 p2, T3 p3)
Ohjaintapahtumankäsittelijä kolmella parametrilla.
bool IsDestroyed
Onko olio tuhottu.
virtual bool IsTriggered(Listener listener)
delegate void Handler< T1, T2, T3, T4 >(T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
delegate void AnalogHandler< T1 >(AnalogState analogState, T1 p1)
Ohjaintapahtumankäsittelijä yhdellä parametrilla.
int Compare(Listener x, Listener y)
delegate void AnalogHandler< T1, T2, T3, T4 >(AnalogState analogState, T1 p1, T2 p2, T3 p3, T4 p4)
Ohjaintapahtumankäsittelijä neljällä parametrilla.
void Enable(Predicate< Listener > predicate)
Ottaa käytöstä poistetun kontrollin takaisin käyttöön.
Yleinen peliohjainluokka.