Jypeli 10
The simple game programming library
Layout.cs
Siirry tämän tiedoston dokumentaatioon.
1namespace Jypeli
2{
3 public partial class GameObject
4 {
5 private ILayout _layout = null;
6
7 private Sizing _horizontalSizing = Sizing.FixedSize;
8 private Sizing _verticalSizing = Sizing.FixedSize;
9 private Vector _preferredSize = new Vector( 50, 50 );
10 private bool _sizeByLayout = true;
11 private bool _layoutNeedsRefreshing = false;
12
17 public virtual Sizing HorizontalSizing
18 {
19 get
20 {
21 if ( SizingByLayout && ( Layout != null ) )
23 return _horizontalSizing;
24 }
25 set
26 {
27 _horizontalSizing = value;
29 }
30 }
31
36 public virtual Sizing VerticalSizing
37 {
38 get
39 {
40 if ( SizingByLayout && ( Layout != null ) )
42 return _verticalSizing;
43 }
44 set
45 {
46 _verticalSizing = value;
48 }
49 }
50
55 public virtual Vector PreferredSize
56 {
57 get
58 {
59 if ( Layout != null )
60 return Layout.PreferredSize;
61 return _preferredSize;
62 }
63 set
64 {
65 _preferredSize = value;
67 }
68 }
69
73 public bool SizingByLayout
74 {
75 get { return _sizeByLayout; }
76 set { _sizeByLayout = value; }
77 }
78
84 {
85 if ( Parent == null )
86 {
88 }
89 else if ( Parent is GameObject )
90 {
91 ( (GameObject)Parent ).NotifyParentAboutChangedSizingAttributes();
92 }
93 }
94
99 {
100 get { return _layout; }
101 set
102 {
103 if ( _layout != null )
104 {
105 ILayout old = _layout;
106 _layout = null;
107 old.Parent = null;
108 }
109
110 InitChildren();
111 _layout = value;
112 _layout.Parent = this;
114 }
115 }
116
122 public void InitLayout( double width, double height )
123 {
125 this.PreferredSize = new Vector( width, height );
126 }
127
134 public void InitLayout( double width, double height, ILayout layout )
135 {
136 this.Layout = layout;
137 InitLayout( width, height );
138 }
139
149 public void RefreshLayout()
150 {
151 if ( Layout != null )
152 {
153 _childObjects.UpdateChanges();
154
155 // First, lets ask how big the child objects need to be.
157
158 // Then, lets set the size accordingly, if we are allowed to do so.
159 if ( SizingByLayout )
160 {
161 Vector newSize = Layout.PreferredSize;
162 Vector maxSize = this.GetMaximumSize();
163
164 if ( newSize.X > maxSize.X )
165 newSize.X = maxSize.X;
166 if ( newSize.Y > maxSize.Y )
167 newSize.Y = maxSize.Y;
168
169 _size = newSize;
170 }
171
172 // Finally, lets position the child objects into the space we have available
173 // for them.
175 }
176 }
177
182 private void UpdateSizeHints()
183 {
184 if ( _childObjects == null ) return;
185
186 foreach ( var child in _childObjects )
187 {
188 child.UpdateSizeHints();
189 }
190
191 if ( Layout != null )
193 }
194
202 private void UpdateLayout( Vector maximumSize )
203 {
204 if ( Layout != null )
205 Layout.Update( Objects.items, maximumSize );
206
207 if ( _childObjects != null )
208 {
209 foreach ( var child in _childObjects )
210 {
211 child.UpdateLayout( child.Size );
212 }
213 }
214 }
215
222 protected virtual Vector GetMaximumSize()
223 {
224 return new Vector( double.PositiveInfinity, double.PositiveInfinity );
225 }
226 }
227}
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
Definition: Appearance.cs:34
virtual Sizing HorizontalSizing
Koon asettaminen vaakasuunnassa, kun olio on asettelijan sisällä.
Definition: Layout.cs:18
void NotifyParentAboutChangedSizingAttributes()
Should be called whenever properties that might affect layouts are changed.
Definition: Layout.cs:83
ILayout _layout
Definition: Layout.cs:5
SynchronousList< GameObject > Objects
Olion lapsioliot. Saa muuttaa.
Definition: ChildObjects.cs:46
SynchronousList< GameObject > _childObjects
Definition: ChildObjects.cs:39
void InitLayout(double width, double height)
Alustaa asettelijan käyttöön
Definition: Layout.cs:122
Sizing _verticalSizing
Definition: Layout.cs:8
GameObject(double width, double height)
Alustaa uuden peliolion.
Definition: GameObject.cs:79
Vector _preferredSize
Definition: Layout.cs:9
virtual Vector GetMaximumSize()
Antaa widgetin maksimikoon siinä tapauksessa, että kokoa ei ole annettu rakentajassa (tai tarkemmin s...
Definition: Layout.cs:222
Sizing _horizontalSizing
Definition: Layout.cs:7
bool SizingByLayout
Onko olion koko asettelijan muokkaama
Definition: Layout.cs:74
void UpdateSizeHints()
Recursively updates the preferred sizes (and other parameters that affect the layout) of the object a...
Definition: Layout.cs:182
virtual Sizing VerticalSizing
Koon asettaminen pystysuunnassa, kun olio on asettelijan sisällä.
Definition: Layout.cs:37
void InitLayout(double width, double height, ILayout layout)
Alustaa asettelijan käyttöön
Definition: Layout.cs:134
virtual void InitChildren()
Alustaa lapsioliot
bool _sizeByLayout
Definition: Layout.cs:10
virtual Vector PreferredSize
Koko, jota oliolla tulisi olla asettelijan sisällä. Todellinen koko voi olla pienempi,...
Definition: Layout.cs:56
void RefreshLayout()
Päivittää lapsiolioiden paikat ja koot, jos widgetille on asetettu asettelija. Tätä metodia EI yleens...
Definition: Layout.cs:149
ILayout Layout
Asettelija lapsiolioille. Asettaa lapsiolioiden koon sekä paikan.
Definition: Layout.cs:99
bool _layoutNeedsRefreshing
Definition: Layout.cs:11
bool autoResizeChildObjects
Definition: ChildObjects.cs:40
void UpdateLayout(Vector maximumSize)
Recursively updates the layouts of the object and its child objects. UpdateSizeHints() must have been...
Definition: Layout.cs:202
IGameObject Parent
Olio, jonka lapsiolio tämä olio on. Jos null, olio ei ole minkään olion lapsiolio.
Rajapinta asettelijalle. Asettelija asettelee widgetin lapsioliot siten, että ne mahtuvat widgetin si...
Definition: ILayout.cs:95
GameObject Parent
Asettelijan omistaja
Definition: ILayout.cs:99
void UpdateSizeHints(IList< GameObject > objects)
Päivittää asettelijan koon
void Update(IList< GameObject > objects, Vector maximumSize)
Päivittää asettelijan olioiden sijainnit
Vector PreferredSize
Koko, jota oliolla tulisi olla asettelijan sisällä. Todellinen koko voi olla pienempi,...
Definition: ILayout.cs:115
Sizing HorizontalSizing
Kuinka tämän hallitsemat oliot asetellaan sivusuunnassa
Definition: ILayout.cs:104
Sizing VerticalSizing
Kuinka tämän hallitsemat oliot asetellaan pystysuunnassa
Definition: ILayout.cs:109
Sizing
Olion koon asettaminen asettelijan sisällä.
Definition: ILayout.cs:39
2D-vektori.
Definition: Vector.cs:67
double Y
Vektorin Y-komponentti
Definition: Vector.cs:339
double X
Vektorin X-komponentti.
Definition: Vector.cs:334