2 using System.Collections.Generic;
38 this.newItem = itemToAdd;
43 if (
list.Contains( newItem ) )
47 list.items.Add( newItem );
48 list.OnItemAdded( newItem );
54 internal T removeItem;
59 this.removeItem = itemToRemove;
64 if (
list.items.Remove( removeItem ) )
65 list.OnItemRemoved( removeItem );
78 foreach ( var item
in list )
80 list.OnItemRemoved( item );
89 internal List<T> items =
new List<T>();
90 Queue<ListAction> actions =
new Queue<ListAction>();
97 public T this[
int index]
122 get {
return items.Count; }
157 private void OnItemAdded(
T item )
159 if ( ItemAdded != null )
163 private void OnItemRemoved(
T item )
165 if ( ItemRemoved != null )
169 #region INotifyList<T> Members 176 private void OnChanged()
178 if ( Changed != null )
184 #region IEnumerable Members 188 return items.GetEnumerator();
191 IEnumerator IEnumerable.GetEnumerator()
193 return items.GetEnumerator();
200 actions.Enqueue(
new AddItemAction(
this, item ) );
205 actions.Enqueue(
new RemoveItemAction(
this, item ) );
210 actions.Enqueue(
new ClearAction(
this ) );
215 return items.Contains( item );
223 for (
int i = 0; i < actionArray.Length; i++)
225 if (actionArray[i] is AddItemAction && ((AddItemAction)actionArray[i]).newItem.Equals( item ))
228 else if (actionArray[i] is RemoveItemAction && ((RemoveItemAction)actionArray[i]).removeItem.Equals( item ))
231 else if (actionArray[i] is ClearAction)
245 return items.Find( pred );
250 return items.FindAll( pred );
260 if ( actions.Count == 0 )
return false;
262 while ( actions.Count > 0 )
263 actions.Dequeue().Execute();
277 foreach ( var item
in items )
282 if ( DestroyableItem != null && DestroyableItem.IsDestroyed )
284 else if ( UpdatableItem != null && UpdatableItem.IsUpdated )
285 UpdatableItem.Update( time );
289 if ( changed ) OnChanged();
301 foreach ( var item
in items )
306 if ( DestroyableItem != null && DestroyableItem.IsDestroyed )
308 else if ( UpdatableItem != null && UpdatableItem.IsUpdated && isUpdated(item) )
309 UpdatableItem.Update( time );
313 if ( changed ) OnChanged();
322 for (
int i = 0; i < items.Count; i++ )
336 for (
int i = 0; i < items.Count; i++ )
338 action( items[i], p1 );
342 internal IEnumerable<T> GetObjectsAboutToBeAdded()
344 return from a in actions
345 where a is AddItemAction
346 select (a as AddItemAction).newItem;
int LastIndex
Viimeisen elementin indeksi.
void Update(Time time)
Lisää ja poistaa jonossa olevat elementit sekä kutsuu niiden Update-metodia.
void ForEach(Action< T > action)
Suorittaa annetun toimenpiteen kaikille (nykyisille) listan alkioille.
Rajapinta päivittyville olioille.
IEnumerator< T > GetEnumerator()
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
SynchronousList< T > list
void ForEach< T1 >(Action< T, T1 > action, T1 p1)
Suorittaa annetun toimenpiteen kaikille (nykyisille) listan alkioille.
T Find(Predicate< T > pred)
ListAction(SynchronousList< T > list)
RemoveItemAction(SynchronousList< T > items, T itemToRemove)
Action Changed
Tapahtuu kun lista on muuttunut.
Action< T > ItemAdded
Tapahtuu kun uusi elementti on lisätty listaan.
int Count
Kuinka monta elementtiä listassa nyt on. Ei laske mukaan samalla päivityskierroksella tehtyjä muutoks...
Synkroninen lista, eli lista joka päivittyy vasta kun sen Update-metodia kutsutaan. Jos listalle lisätään IUpdatable-rajapinnan toteuttavia olioita, kutsutaan myös niiden Update-metodeja samalla.
List< T > FindAll(Predicate< T > pred)
ClearAction(SynchronousList< T > items)
void Update(Time time, Predicate< T > isUpdated)
Lisää ja poistaa jonossa olevat elementit sekä kutsuu niiden Update-metodia tietyllä ehdolla...
Action< T > ItemRemoved
Tapahtuu kun elementti on poistettu listasta.
SynchronousList()
Luo uuden synkronisen listan.
AddItemAction(SynchronousList< T > list, T itemToAdd)
int FirstIndex
Ensimmäisen elementin indeksi. Muutettavissa.
bool UpdateChanges()
Lisää ja poistaa jonossa olevat elementit, mutta ei kutsu elementtien Update-metodia.
SynchronousList(int firstIndex)
Luo uuden synkronisen listan.
Rajapinta olioille, jotka ovat tuhottavissa.