Jypeli  5
The simple game programming library
Level.cs
Siirry tämän tiedoston dokumentaatioon.
1 #region MIT License
2 /*
3  * Copyright (c) 2009 University of Jyväskylä, Department of Mathematical
4  * Information Technology.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #endregion
25 
26 /*
27  * Authors: Tero Jäntti, Tomi Karppinen, Janne Nikkanen.
28  */
29 
30 using System;
31 using System.Linq;
32 using System.Collections.Generic;
33 using Physics2DDotNet.Ignorers;
34 using Physics2DDotNet.Shapes;
35 using Jypeli.LevelEditor;
36 using Jypeli.Widgets;
37 using AdvanceMath;
38 
39 namespace Jypeli
40 {
41  public class ObjectLoadMethods
42  {
43  internal static readonly ObjectLoadMethods Empty = new ObjectLoadMethods();
44 
45  internal Dictionary<string, Func<GameObject, GameObject>> MethodsByTag = new Dictionary<string, Func<GameObject, GameObject>>();
46  internal Dictionary<string, Func<GameObject, GameObject>> MethodsByTemplate = new Dictionary<string, Func<GameObject, GameObject>>();
47 
55  public void AddByTag( string tag, Func<GameObject, GameObject> method )
56  {
57  MethodsByTag.Add( tag, method );
58  }
59 
67  public void AddByTemplate( string template, Func<GameObject, GameObject> method )
68  {
69  MethodsByTemplate.Add( template, method );
70  }
71  }
72 
73 
77  [Save]
78  public class Level : Dimensional
79  {
80  [Save] double _width = 1000;
81  [Save] double _height = 800;
82 
83  private Game game;
84  private ObjectIgnorer ignorerForBorders = new ObjectIgnorer();
85 #if WINDOWS
86  private WindowsFileManager fileManager = new WindowsFileManager();
87 #endif
88 
89  public double AmbientLight { get; set; }
90 
91  Surface ground = null;
92 
96  public readonly Vector Center = Vector.Zero;
97 
101  [Obsolete("Use Level.Background.Color")]
102  public Color BackgroundColor
103  {
104  get { return Background.Color; }
105  set { Background.Color = value; }
106  }
107 
111  public Background Background { get; set; }
112 
116  public double Width
117  {
118  get { return _width; }
119  set { _width = value; }
120  }
121 
125  public double Height
126  {
127  get { return _height; }
128  set { _height = value; }
129  }
130 
134  public Vector Size
135  {
136  get { return new Vector( _width, _height ); }
137  set { _width = value.X; _height = value.Y; }
138  }
139 
143  public double Left
144  {
145  get { return -Width / 2; }
146  }
147 
151  public double Right
152  {
153  get { return Width / 2; }
154  }
155 
159  public double Top
160  {
161  get { return Height / 2; }
162  }
163 
167  public double Bottom
168  {
169  get { return -Height / 2; }
170  }
171 
172 
176  public BoundingRectangle BoundingRect
177  {
178  get { return new BoundingRectangle(Center.X, Center.Y, Width, Height); }
179  }
180 
181 
182  internal Level( Game game )
183  {
184  this.game = game;
185  Clear();
186  }
187 
191  public void Clear()
192  {
193  AmbientLight = 1.0;
194 
195  // creates a null background
197  }
198 
203  {
204  var objectsAboutToBeAdded = Game.GetObjectsAboutToBeAdded();
205 
206  if ( ( Game.Instance.ObjectCount + objectsAboutToBeAdded.Count ) == 0 )
207  {
208  throw new InvalidOperationException( "There must be at least one object" );
209  }
210 
211  double left = double.PositiveInfinity;
212  double right = double.NegativeInfinity;
213  double top = double.NegativeInfinity;
214  double bottom = double.PositiveInfinity;
215 
216  foreach ( var layer in Game.Instance.Layers )
217  {
218  if (layer.IgnoresZoom)
219  continue;
220 
221  foreach ( var o in layer.Objects )
222  {
223  if ( o.Left < left )
224  left = o.Left * layer.RelativeTransition.X;
225  if ( o.Right > right )
226  right = o.Right * layer.RelativeTransition.X;
227  if ( o.Top > top )
228  top = o.Top * layer.RelativeTransition.Y;
229  if ( o.Bottom < bottom )
230  bottom = o.Bottom * layer.RelativeTransition.Y;
231  }
232  }
233 
234  foreach ( var o in objectsAboutToBeAdded )
235  {
236  if ( o.Left < left )
237  left = o.Left;
238  if ( o.Right > right )
239  right = o.Right;
240  if ( o.Top > top )
241  top = o.Top;
242  if ( o.Bottom < bottom )
243  bottom = o.Bottom;
244  }
245 
246  return new BoundingRectangle( new Vector( left, top ), new Vector( right, bottom ) );
247  }
248 
249  #region Borders
250 
251  private Surface CreateBorder( Direction direction, double restitution, bool isVisible, Image borderImage, Color borderColor )
252  {
253  Surface s = Surface.Create( this, direction );
254  s.Restitution = restitution;
255  s.IsVisible = isVisible;
256  s.Image = borderImage;
257  s.Color = borderColor;
258  game.Add( s );
259  return s;
260  }
261 
262  private Surface CreateBorder( Direction direction, double min, double max, int points, double restitution, bool isVisible, Image borderImage, Color borderColor )
263  {
264  Surface s = Surface.Create( this, direction, min, max, points );
265  s.Restitution = restitution;
266  s.IsVisible = isVisible;
267  s.Image = borderImage;
268  s.Color = borderColor;
269  game.Add( s );
270  return s;
271  }
272 
277  {
278  return CreateBorders( PhysicsObject.DefaultCoefficients.Restitution, true );
279  }
280 
285  public Surfaces CreateBorders( bool isVisible )
286  {
287  return CreateBorders( PhysicsObject.DefaultCoefficients.Restitution, isVisible );
288  }
289 
295  public Surfaces CreateBorders( double restitution, bool isVisible )
296  {
297  return CreateBorders( restitution, isVisible, Color.Gray );
298  }
299 
306  public Surfaces CreateBorders( double restitution, bool isVisible, Color borderColor )
307  {
308  Surfaces borders = new Surfaces();
309  borders.l = CreateBorder( Direction.Left, restitution, isVisible, null, borderColor );
310  borders.r = CreateBorder( Direction.Right, restitution, isVisible, null, borderColor );
311  borders.t = CreateBorder( Direction.Up, restitution, isVisible, null, borderColor );
312  borders.b = CreateBorder( Direction.Down, restitution, isVisible, null, borderColor );
313  return borders;
314  }
315 
322  public Surfaces CreateBorders( double restitution, bool isVisible, Image borderImage )
323  {
324  Surfaces borders = new Surfaces();
325  borders.l = CreateBorder( Direction.Left, restitution, isVisible, borderImage, Color.Gray );
326  borders.r = CreateBorder( Direction.Right, restitution, isVisible, borderImage, Color.Gray );
327  borders.t = CreateBorder( Direction.Up, restitution, isVisible, borderImage, Color.Gray );
328  borders.b = CreateBorder( Direction.Down, restitution, isVisible, borderImage, Color.Gray );
329  return borders;
330  }
331 
338  public Surfaces CreateHorizontalBorders( double restitution, bool isVisible, Color borderColor )
339  {
340  Surfaces borders = new Surfaces();
341  borders.l = CreateBorder( Direction.Left, restitution, isVisible, null, borderColor );
342  borders.r = CreateBorder( Direction.Right, restitution, isVisible, null, borderColor );
343  return borders;
344  }
345 
352  public Surfaces CreateVerticalBorders( double restitution, bool isVisible, Color borderColor )
353  {
354  Surfaces borders = new Surfaces();
355  borders.t = CreateBorder( Direction.Up, restitution, isVisible, null, borderColor );
356  borders.b = CreateBorder( Direction.Down, restitution, isVisible, null, borderColor );
357  return borders;
358  }
359 
366  public Surfaces CreateHorizontalBorders( double restitution, bool isVisible, Image borderImage )
367  {
368  Surfaces borders = new Surfaces();
369  borders.l = CreateBorder( Direction.Left, restitution, isVisible, borderImage, Color.Gray );
370  borders.r = CreateBorder( Direction.Right, restitution, isVisible, borderImage, Color.Gray );
371  return borders;
372  }
373 
380  public Surfaces CreateVerticalBorders( double restitution, bool isVisible, Image borderImage )
381  {
382  Surfaces borders = new Surfaces();
383  borders.t = CreateBorder( Direction.Up, restitution, isVisible, borderImage, Color.Gray );
384  borders.b = CreateBorder( Direction.Down, restitution, isVisible, borderImage, Color.Gray );
385  return borders;
386  }
387 
396  public Surfaces CreateBorders( double min, double max, int points, double restitution, Color borderColor )
397  {
398  Surfaces s = new Surfaces();
399  s.l = CreateBorder( Direction.Left, min, max, points, restitution, true, null, borderColor );
400  s.r = CreateBorder( Direction.Right, min, max, points, restitution, true, null, borderColor );
401  s.t = CreateBorder( Direction.Up, min, max, points, restitution, true, null, borderColor );
402  s.b = CreateBorder( Direction.Down, min, max, points, restitution, true, null, borderColor );
403  return s;
404  }
405 
414  public Surfaces CreateBorders( double min, double max, int points, double restitution, Image borderImage )
415  {
416  Surfaces s = new Surfaces();
417  s.l = CreateBorder( Direction.Left, min, max, points, restitution, true, borderImage, Color.Gray );
418  s.r = CreateBorder( Direction.Right, min, max, points, restitution, true, borderImage, Color.Gray );
419  s.t = CreateBorder( Direction.Up, min, max, points, restitution, true, borderImage, Color.Gray );
420  s.b = CreateBorder( Direction.Down, min, max, points, restitution, true, borderImage, Color.Gray );
421  return s;
422  }
423 
431  public Surfaces CreateBorders( double min, double max, int points, double restitution )
432  {
433  return CreateBorders( min, max, points, restitution, Color.Gray );
434  }
435 
442  public Surfaces CreateBorders( double min, double max, int points )
443  {
444  return CreateBorders( min, max, points, PhysicsObject.DefaultCoefficients.Restitution, Color.Gray );
445  }
446 
454  public Surfaces CreateHorizontalBorders( double min, double max, int points, double restitution )
455  {
456  return CreateHorizontalBorders( min, max, points, restitution, Color.Gray );
457  }
458 
467  public Surfaces CreateHorizontalBorders( double min, double max, int points, double restitution, Image borderImage )
468  {
469  Surfaces s = new Surfaces();
470  s.l = CreateBorder( Direction.Left, min, max, points, restitution, true, borderImage, Color.Gray );
471  s.r = CreateBorder( Direction.Right, min, max, points, restitution, true, borderImage, Color.Gray );
472  return s;
473  }
474 
483  public Surfaces CreateHorizontalBorders( double min, double max, int points, double restitution, Color borderColor )
484  {
485  Surfaces s = new Surfaces();
486  s.l = CreateBorder( Direction.Left, min, max, points, restitution, true, null, borderColor );
487  s.r = CreateBorder( Direction.Right, min, max, points, restitution, true, null, borderColor );
488  return s;
489  }
490 
497  public Surfaces CreateHorizontalBorders( double min, double max, int points )
498  {
499  return CreateHorizontalBorders( min, max, points, PhysicsObject.DefaultCoefficients.Restitution );
500  }
501 
509  public Surfaces CreateVerticalBorders( double min, double max, int points, double restitution )
510  {
511  return CreateVerticalBorders( min, max, points, restitution, Color.Gray );
512  }
513 
522  public Surfaces CreateVerticalBorders( double min, double max, int points, double restitution, Image borderImage )
523  {
524  Surfaces s = new Surfaces();
525  s.t = CreateBorder( Direction.Up, min, max, points, restitution, true, borderImage, Color.Gray );
526  s.b = CreateBorder( Direction.Down, min, max, points, restitution, true, borderImage, Color.Gray );
527  return s;
528  }
529 
538  public Surfaces CreateVerticalBorders( double min, double max, int points, double restitution, Color borderColor )
539  {
540  Surfaces s = new Surfaces();
541  s.t = CreateBorder( Direction.Up, min, max, points, restitution, true, null, borderColor );
542  s.b = CreateBorder( Direction.Down, min, max, points, restitution, true, null, borderColor );
543  return s;
544  }
545 
552  public Surfaces CreateVerticalBorders( double min, double max, int points )
553  {
554  return CreateVerticalBorders( min, max, points, PhysicsObject.DefaultCoefficients.Restitution );
555  }
556 
557  private PhysicsObject CreateBorder( double width, double height )
558  {
559  PhysicsObject b = PhysicsObject.CreateStaticObject( width, height );
560  b.Color = Color.Gray;
561  b.Body.CollisionIgnorer = ignorerForBorders;
562  game.Add( b );
563  return b;
564  }
565 
572  public PhysicsObject CreateLeftBorder( double restitution, bool isVisible )
573  {
574  double thickness = this.GetBorderThickness();
575  PhysicsObject b = CreateBorder( this.Height, thickness );
576  b.Angle = Angle.FromRadians( -Math.PI / 2 );
577  b.Position = new Vector( Left - ( thickness / 2 ), Center.Y );
578  b.Restitution = restitution;
579  b.IsVisible = isVisible;
580  return b;
581  }
582 
589  public PhysicsObject CreateRightBorder( double restitution, bool isVisible )
590  {
591  double thickness = this.GetBorderThickness();
592  PhysicsObject b = CreateBorder( this.Height, thickness );
593  b.Angle = Angle.FromRadians( Math.PI / 2 );
594  b.Position = new Vector( Right + ( thickness / 2 ), Center.Y );
595  b.Restitution = restitution;
596  b.IsVisible = isVisible;
597  return b;
598  }
599 
606  public PhysicsObject CreateTopBorder( double restitution, bool isVisible )
607  {
608  double thickness = this.GetBorderThickness();
609  PhysicsObject b = CreateBorder( this.Width + ( 2 * thickness ), thickness );
610  b.Angle = Angle.FromRadians( Math.PI );
611  b.Position = new Vector( Center.X, Top + ( thickness / 2 ) );
612  b.Restitution = restitution;
613  b.IsVisible = isVisible;
614  return b;
615  }
616 
623  public PhysicsObject CreateBottomBorder( double restitution, bool isVisible )
624  {
625  double thickness = GetBorderThickness();
626  PhysicsObject b = CreateBorder( Width + ( 2 * thickness ), thickness );
627  b.Angle = Angle.Zero;
628  b.Position = new Vector( Center.X, Bottom - ( thickness / 2 ) );
629  b.Restitution = restitution;
630  b.IsVisible = isVisible;
631  return b;
632  }
633 
639  {
640  return CreateLeftBorder( PhysicsObject.DefaultCoefficients.Restitution, true );
641  }
642 
648  {
649  return CreateRightBorder( PhysicsObject.DefaultCoefficients.Restitution, true );
650  }
651 
657  {
658  return CreateTopBorder( PhysicsObject.DefaultCoefficients.Restitution, true );
659  }
660 
666  {
667  return CreateBottomBorder( PhysicsObject.DefaultCoefficients.Restitution, true );
668  }
669 
670  internal double GetBorderThickness()
671  {
672  return this.Width / 10;
673  }
674 
687  public PhysicsObject CreateGround( double[] heights, double scale )
688  {
689  return CreateGround( heights, scale, null );
690  }
691 
703  public PhysicsObject CreateGround( double[] heights, double scale, Image image )
704  {
705  ground = new Surface( this.Width, heights, scale );
706  ground.Position = new Vector( Center.X, Bottom - ( MathHelper.Max( heights ) / 2 ) );
707  ground.Image = image;
708  game.Add( ground );
709  return ground;
710  }
711 
712  #endregion
713 
719  {
721  }
722 
728  public Vector GetRandomFreePosition(double radius)
729  {
730  if (radius < 0) throw new ArgumentException("Radius cannot be negative!");
731  if (radius == 0) return GetRandomPosition();
732 
733  Vector position;
734 
735  do
736  {
737  position = GetRandomPosition();
738  }
739  while (Game.Instance.GetObjectAt(position, radius) != null);
740 
741  return position;
742  }
743 
749  public void LoadFromFile( string fileName )
750  {
751  LoadFromFile( fileName, ObjectLoadMethods.Empty );
752  }
753 
760  public void LoadFromFile( string fileName, ObjectLoadMethods methods )
761  {
762 #if WINDOWS
763  LevelData levelData = new LevelData();
764  Factory.FactoryMethod createObject = delegate { return new LevelObject( levelData, 0 ); };
765  Game.Instance.AddFactory<LevelObject>( null, createObject );
766  levelData = fileManager.Load<LevelData>( levelData, fileName );
767  Game.Instance.RemoveFactory<LevelObject>( null, createObject );
768  DoLoadLevel( levelData, methods );
769 #else
770  throw new NotImplementedException( "LoadFromFile not implemented for WP7 / Xbox360" );
771 #endif
772  }
773 
779  public void LoadFromContent( string assetName )
780  {
781  LoadFromContent( assetName, ObjectLoadMethods.Empty );
782  }
783 
790  public void LoadFromContent( string assetName, ObjectLoadMethods methods )
791  {
792  LevelData levelData = new LevelData();
793  Factory.FactoryMethod createObject = delegate { return new LevelObject( levelData, 0 ); };
794  Game.Instance.AddFactory<LevelObject>( null, createObject );
795  levelData = Game.DataStorage.LoadContent<LevelData>( levelData, assetName );
796  Game.Instance.RemoveFactory<LevelObject>( null, createObject );
797  DoLoadLevel( levelData, methods );
798  }
799 
800  private void DoLoadLevel( LevelData levelData, ObjectLoadMethods methods )
801  {
802  foreach ( var levelObj in levelData.Objects )
803  {
804  var o = levelObj.ConstructObject();
805  string tag = o.Tag.ToString();
806  string template = levelObj.Template.Name;
807 
808  if ( methods.MethodsByTemplate.ContainsKey( template ) )
809  {
810  o = methods.MethodsByTemplate[template]( o );
811  if ( o == null ) continue;
812  }
813 
814  if ( methods.MethodsByTag.ContainsKey( tag ) )
815  {
816  o = methods.MethodsByTag[tag]( o );
817  if ( o == null ) continue;
818  }
819 
820  Game.Instance.Add( o );
821  }
822  }
823  }
824 }
void LoadFromFile(string fileName)
Lataa kentän tiedostosta. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
Definition: Level.cs:749
static Direction Down
Suunta alas.
Definition: Direction.cs:65
Color Color
Väri, jonka värisenä olio piirretään, jos tekstuuria ei ole määritelty.
PhysicsObject CreateBottomBorder()
Lisää kenttään alareunan.
Definition: Level.cs:665
Surfaces CreateVerticalBorders(double min, double max, int points, double restitution)
Lisää kentän pystysivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:509
Vector GetRandomFreePosition(double radius)
Palauttaa satunnaisen vapaan kohdan kentän reunojen sisältä.
Definition: Level.cs:728
void LoadFromContent(string assetName, ObjectLoadMethods methods)
Lataa kentän contentista. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
Definition: Level.cs:790
List< LevelObject > Objects
Definition: LevelData.cs:12
Surfaces CreateBorders()
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:276
PhysicsObject CreateBottomBorder(double restitution, bool isVisible)
Lisää kenttään alareunan.
Definition: Level.cs:623
bool IsVisible
Piirretäänkö oliota ruudulle.
Definition: __GameObject.cs:91
PhysicsObject CreateGround(double[] heights, double scale)
Helppo tapa lisätä kenttään epätasainen maasto. Maasto kuvataan luettelemalla Y-koordinaatteja vasemm...
Definition: Level.cs:687
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
Surfaces CreateHorizontalBorders(double restitution, bool isVisible, Image borderImage)
Lisää kentän vaakasivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:366
Surface r
Definition: Surfaces.cs:14
void LoadFromFile(string fileName, ObjectLoadMethods methods)
Lataa kentän tiedostosta. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
Definition: Level.cs:760
static Direction Left
Suunta vasemmalle.
Definition: Direction.cs:70
Surfaces CreateVerticalBorders(double min, double max, int points, double restitution, Image borderImage)
Lisää kentän pystysivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:522
GameObject GetObjectAt(Vector position)
Palauttaa peliolion, joka on annetussa paikassa. Jos paikassa ei ole mitään pelioliota, palautetaan null. Jos olioita on useampia, palautetaan päällimmäinen.
Definition: Game.cs:868
Surfaces CreateVerticalBorders(double restitution, bool isVisible, Image borderImage)
Lisää kentän pystysivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:380
void Clear()
Palauttaa oletustaustan.
Definition: Level.cs:191
Surfaces CreateBorders(double min, double max, int points, double restitution, Color borderColor)
Lisää kaikille kentän sivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:396
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
Definition: RandomGen.cs:39
Surfaces CreateHorizontalBorders(double min, double max, int points, double restitution)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:454
BoundingRectangle FindObjectLimits()
Laskee pienimmän alueen, jonka sisälle kaikki kentän oliot mahtuvat.
Definition: Level.cs:202
Surfaces CreateBorders(double restitution, bool isVisible, Image borderImage)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:322
PhysicsObject CreateLeftBorder()
Lisää kenttään vasemman reunan.
Definition: Level.cs:638
static Surface Create(Level level, Direction direction)
Luo kentälle tasaisen reunan. Ei lisää reunaa automaattisesti kenttään.
Definition: Surface.cs:226
Surfaces CreateBorders(bool isVisible)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:285
static double NextDouble(double min, double max)
Palauttaa satunnaisen liukuluvun parametrien
Definition: RandomGen.cs:78
Surfaces CreateHorizontalBorders(double min, double max, int points, double restitution, Color borderColor)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:483
delegate object FactoryMethod()
Image Image
Olion kuva. Voi olla null, jolloin piirretään vain väri.
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
Definition: Coefficients.cs:36
static Game Instance
Definition: Game.cs:149
override Angle Angle
Kulma, jossa olio on. Oliota voi pyörittää kulmaa vaihtamalla.
Definition: Dimensions.cs:80
PhysicsObject CreateLeftBorder(double restitution, bool isVisible)
Lisää kenttään vasemman reunan.
Definition: Level.cs:572
Surfaces CreateHorizontalBorders(double min, double max, int points)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:497
static readonly Vector Zero
Nollavektori.
Definition: Vector.cs:61
Kuva.
Definition: Image.cs:24
static readonly Color Gray
Harmaa.
Definition: Color.cs:639
void Add(IGameObject o)
Lisää olion peliin. Tavalliset oliot tulevat automaattisesti kerrokselle 0 ja ruutuoliot päällimmäise...
Definition: Game.cs:691
Surfaces CreateVerticalBorders(double restitution, bool isVisible, Color borderColor)
Lisää kentän pystysivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:352
PhysicsObject CreateRightBorder(double restitution, bool isVisible)
Lisää kenttään oikean reunan.
Definition: Level.cs:589
Pelikenttä, johon voi lisätä olioita. Kentällä voi myös olla reunat ja taustaväri tai taustakuva...
Definition: Level.cs:78
Perussuunta tasossa.
Definition: Direction.cs:50
SynchronousList< Layer > Layers
Kerrokset, joilla pelioliot viihtyvät.
Definition: Game.cs:95
Surfaces CreateBorders(double min, double max, int points)
Lisää kaikille kentän sivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:442
double Restitution
Olion kimmoisuus. Arvo välillä 0.0-1.0. Arvolla 1.0 olio säilyttää kaiken vauhtinsa törmäyksessä...
Definition: Coefficients.cs:66
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
Surfaces CreateBorders(double min, double max, int points, double restitution)
Lisää kaikille kentän sivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:431
static FileManager DataStorage
Tietovarasto, johon voi tallentaa tiedostoja pidempiaikaisesti. Sopii esimerkiksi pelitilanteen lataa...
Definition: Game.cs:236
Tasainen tai epätasainen pinta.
Definition: Surface.cs:12
PhysicsObject CreateTopBorder()
Lisää kenttään yläreunan.
Definition: Level.cs:656
Surfaces CreateBorders(double restitution, bool isVisible, Color borderColor)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:306
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
Definition: Angle.cs:316
static readonly Angle Zero
Nollakulma.
Definition: Angle.cs:45
Surface t
Definition: Surfaces.cs:14
Surfaces CreateHorizontalBorders(double min, double max, int points, double restitution, Image borderImage)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:467
Vector GetRandomPosition()
Palauttaa satunnaisen kohdan kentän reunojen sisältä.
Definition: Level.cs:718
Surfaces CreateVerticalBorders(double min, double max, int points, double restitution, Color borderColor)
Lisää kentän pystysivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:538
Body Body
Fysiikkamoottorin käyttämä tietorakenne.
Definition: Dimensions.cs:42
Väri.
Definition: Color.cs:13
void LoadFromContent(string assetName)
Lataa kentän contentista. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
Definition: Level.cs:779
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
Definition: Dimensions.cs:49
Surfaces CreateVerticalBorders(double min, double max, int points)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:552
static PhysicsObject CreateStaticObject(double width, double height)
Tekee suorakulmaisen kappaleen, joka on staattinen (eli pysyy paikallaan).
Definition: Inertia.cs:110
PhysicsObject CreateGround(double[] heights, double scale, Image image)
Helppo tapa lisätä kenttään epätasainen maasto. Maasto kuvataan luettelemalla Y-koordinaatteja vasemm...
Definition: Level.cs:703
static Direction Right
Suunta oikealle.
Definition: Direction.cs:75
PhysicsObject CreateRightBorder()
Lisää kenttään oikean reunan.
Definition: Level.cs:647
static Direction Up
Suunta ylös.
Definition: Direction.cs:60
void AddByTag(string tag, Func< GameObject, GameObject > method)
Lisää metodin ladatun olion muokkaamiseksi. Metodin tulee palauttaa muokkaamansa olio. Metodi voi myös palauttaa uuden olion, jos haluttu tyyppi ei ole tuettu editorissa.
Definition: Level.cs:55
2D-vektori.
Definition: Vector.cs:56
Surfaces CreateHorizontalBorders(double restitution, bool isVisible, Color borderColor)
Lisää kentän vaakasivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:338
void AddByTemplate(string template, Func< GameObject, GameObject > method)
Lisää metodin ladatun olion muokkaamiseksi. Metodin tulee palauttaa muokkaamansa olio. Metodi voi myös palauttaa uuden olion, jos haluttu olion tyyppi ei ole tuettu editorissa.
Definition: Level.cs:67
Kentän reunat.
Definition: Surfaces.cs:12
Surfaces CreateBorders(double min, double max, int points, double restitution, Image borderImage)
Lisää kaikille kentän sivuille epätasaiset reunat, joihin oliot voivat törmätä.
Definition: Level.cs:414
Surfaces CreateBorders(double restitution, bool isVisible)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
Definition: Level.cs:295
Surface b
Definition: Surfaces.cs:14
PhysicsObject CreateTopBorder(double restitution, bool isVisible)
Lisää kenttään yläreunan.
Definition: Level.cs:606
Olio jolla on reunat.
Definition: Dimensional.cs:11