31 using System.Collections.Generic;
37 public partial class GameObject : GameObjectContainer
39 internal SynchronousList<GameObject> _childObjects = null;
56 get {
return _childObjects == null ? 0 : _childObjects.Count; }
69 throw new ArgumentException(
"Non-GameObjects as child objects are not supported." );
72 throw new ArgumentException(
"Explosion as child object is not supported. Use Game.Add(explosion) instead.");
74 Objects.Add((GameObject)childObject);
88 throw new ArgumentException(
"Non-GameObjects as child objects are not supported." );
90 Objects.Remove((GameObject)childObject);
95 if ( _childObjects != null )
return;
98 _childObjects.ItemRemoved +=
Game.OnRemoveObject;
99 _childObjects.ItemAdded += this.OnChildAdded;
100 _childObjects.ItemRemoved += this.OnChildRemoved;
111 this.
Removed += child.OnRemoved;
114 private void OnChildRemoved(
GameObject child )
118 if ( child.Parent ==
this )
122 this.
Removed -= child.OnRemoved;
125 private void DestroyChildren()
127 if ( _childObjects == null )
return;
135 private void UpdateChildren(
Time time )
137 if ( _childObjects == null )
143 private void UpdateChildSizes(
Vector oldSize,
Vector newSize )
145 if ( _childObjects == null )
return;
147 double xFactor = newSize.
X / oldSize.
X;
148 double yFactor = newSize.
Y / oldSize.
Y;
150 foreach ( var o
in _childObjects )
152 Vector oldChildSize = o.Size;
153 o.Size =
new Vector( oldChildSize.
X * xFactor, oldChildSize.
Y * yFactor );
157 Vector oldChildPosition = o.Position;
158 o.Position =
new Vector( oldChildPosition.
X * xFactor, oldChildPosition.
Y * yFactor );
162 private bool IsInsideChildren(
Vector point )
164 if ( _childObjects == null )
return false;
166 for (
int i = 0; i < _childObjects.Count; i++ )
168 if ( _childObjects[i].
IsInside( point ) )
return true;
179 _childObjects.Clear();
Action Removed
Tapahtuu, kun olio poistetaan pelistä (tuhotaan tai ei).
virtual void Clear()
Poistaa kaikki lapsioliot.
bool IsInside(Vector point)
Onko piste p tämän olion sisäpuolella.
virtual void InitChildren()
void Remove(IGameObject childObject)
Poistaa lapsiolion. Jos haluat tuhota olion, kutsu mielummin olion Destroy-metodia.
IEnumerable< IGameObject > Objects
Olion lapsioliot. Ei voi muokata.
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true...
Peliluokka reaaliaikaisille peleille.
void NotifyParentAboutChangedSizingAttributes()
Should be called whenever properties that might affect layouts are changed.
Action< T > ItemAdded
Tapahtuu kun uusi elementti on lisätty listaan.
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
Yhteinen rajapinta kaikille peliolioille.
void Add(IGameObject childObject)
Lisää annetun peliolion tämän olion lapseksi. Lapsiolio liikkuu tämän olion mukana, ja sen paikka ja koko ...
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.
bool autoResizeChildObjects
int ObjectCount
Olion lapsiolioiden lukumäärä. Kuten Objects.Count, mutta optimoitu.
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.