32 using System.Collections.Generic;
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>>();
55 public void AddByTag(
string tag, Func<GameObject, GameObject> method )
57 MethodsByTag.Add( tag, method );
67 public void AddByTemplate(
string template, Func<GameObject, GameObject> method )
69 MethodsByTemplate.Add(
template, method );
80 [Save]
double _width = 1000;
81 [Save]
double _height = 800;
84 private ObjectIgnorer ignorerForBorders =
new ObjectIgnorer();
89 public double AmbientLight {
get;
set; }
101 [Obsolete(
"Use Level.Background.Color")]
102 public Color BackgroundColor
118 get {
return _width; }
119 set { _width = value; }
127 get {
return _height; }
128 set { _height = value; }
136 get {
return new Vector( _width, _height ); }
137 set { _width = value.X; _height = value.Y; }
145 get {
return -Width / 2; }
153 get {
return Width / 2; }
161 get {
return Height / 2; }
169 get {
return -Height / 2; }
204 var objectsAboutToBeAdded =
Game.GetObjectsAboutToBeAdded();
206 if ( (
Game.
Instance.ObjectCount + objectsAboutToBeAdded.Count ) == 0 )
208 throw new InvalidOperationException(
"There must be at least one object" );
211 double left =
double.PositiveInfinity;
212 double right =
double.NegativeInfinity;
213 double top =
double.NegativeInfinity;
214 double bottom =
double.PositiveInfinity;
218 if (layer.IgnoresZoom)
221 foreach ( var o
in layer.Objects )
224 left = o.Left * layer.RelativeTransition.X;
225 if ( o.Right > right )
226 right = o.Right * layer.RelativeTransition.X;
228 top = o.Top * layer.RelativeTransition.Y;
229 if ( o.Bottom < bottom )
230 bottom = o.Bottom * layer.RelativeTransition.Y;
234 foreach ( var o
in objectsAboutToBeAdded )
238 if ( o.Right > right )
242 if ( o.Bottom < bottom )
256 s.
Image = borderImage;
257 s.
Color = borderColor;
262 private Surface CreateBorder(
Direction direction,
double min,
double max,
int points,
double restitution,
bool isVisible,
Image borderImage,
Color borderColor )
267 s.
Image = borderImage;
268 s.
Color = borderColor;
278 return CreateBorders(
PhysicsObject.DefaultCoefficients.Restitution,
true );
287 return CreateBorders(
PhysicsObject.DefaultCoefficients.Restitution, isVisible );
297 return CreateBorders( restitution, isVisible,
Color.
Gray );
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 );
341 borders.l = CreateBorder(
Direction.
Left, restitution, isVisible, null, borderColor );
342 borders.
r = CreateBorder(
Direction.
Right, restitution, isVisible, null, borderColor );
355 borders.
t = CreateBorder(
Direction.
Up, restitution, isVisible, null, borderColor );
356 borders.
b = CreateBorder(
Direction.
Down, restitution, isVisible, null, borderColor );
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 );
433 return CreateBorders( min, max, points, restitution,
Color.
Gray );
456 return CreateHorizontalBorders( min, max, points, restitution,
Color.
Gray );
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 );
499 return CreateHorizontalBorders( min, max, points,
PhysicsObject.DefaultCoefficients.Restitution );
511 return CreateVerticalBorders( min, max, points, restitution,
Color.
Gray );
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 );
554 return CreateVerticalBorders( min, max, points,
PhysicsObject.DefaultCoefficients.Restitution );
557 private PhysicsObject CreateBorder(
double width,
double height )
561 b.
Body.CollisionIgnorer = ignorerForBorders;
574 double thickness = this.GetBorderThickness();
591 double thickness = this.GetBorderThickness();
608 double thickness = this.GetBorderThickness();
609 PhysicsObject b = CreateBorder( this.Width + ( 2 * thickness ), thickness );
625 double thickness = GetBorderThickness();
626 PhysicsObject b = CreateBorder( Width + ( 2 * thickness ), thickness );
640 return CreateLeftBorder(
PhysicsObject.DefaultCoefficients.Restitution,
true );
649 return CreateRightBorder(
PhysicsObject.DefaultCoefficients.Restitution,
true );
658 return CreateTopBorder(
PhysicsObject.DefaultCoefficients.Restitution,
true );
667 return CreateBottomBorder(
PhysicsObject.DefaultCoefficients.Restitution,
true );
670 internal double GetBorderThickness()
672 return this.Width / 10;
689 return CreateGround( heights, scale, null );
705 ground =
new Surface( this.Width, heights, scale );
707 ground.
Image = image;
730 if (radius < 0)
throw new ArgumentException(
"Radius cannot be negative!");
731 if (radius == 0)
return GetRandomPosition();
737 position = GetRandomPosition();
766 levelData = fileManager.Load<
LevelData>( levelData, fileName );
768 DoLoadLevel( levelData, methods );
770 throw new NotImplementedException(
"LoadFromFile not implemented for WP7 / Xbox360" );
797 DoLoadLevel( levelData, methods );
802 foreach ( var levelObj
in levelData.
Objects )
804 var o = levelObj.ConstructObject();
805 string tag = o.Tag.ToString();
806 string template = levelObj.Template.Name;
808 if ( methods.MethodsByTemplate.ContainsKey(
template ) )
810 o = methods.MethodsByTemplate[
template]( o );
811 if ( o == null )
continue;
814 if ( methods.MethodsByTag.ContainsKey( tag ) )
816 o = methods.MethodsByTag[tag]( o );
817 if ( o == null )
continue;
void LoadFromFile(string fileName)
Lataa kentän tiedostosta. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
static Direction Down
Suunta alas.
Color Color
Väri, jonka värisenä olio piirretään, jos tekstuuria ei ole määritelty.
PhysicsObject CreateBottomBorder()
Lisää kenttään alareunan.
Surfaces CreateVerticalBorders(double min, double max, int points, double restitution)
Lisää kentän pystysivuille epätasaiset reunat, joihin oliot voivat törmätä.
Vector GetRandomFreePosition(double radius)
Palauttaa satunnaisen vapaan kohdan kentän reunojen sisältä.
void LoadFromContent(string assetName, ObjectLoadMethods methods)
Lataa kentän contentista. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
List< LevelObject > Objects
Surfaces CreateBorders()
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
PhysicsObject CreateBottomBorder(double restitution, bool isVisible)
Lisää kenttään alareunan.
bool IsVisible
Piirretäänkö oliota ruudulle.
PhysicsObject CreateGround(double[] heights, double scale)
Helppo tapa lisätä kenttään epätasainen maasto. Maasto kuvataan luettelemalla Y-koordinaatteja vasemm...
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Surfaces CreateHorizontalBorders(double restitution, bool isVisible, Image borderImage)
Lisää kentän vaakasivuille reunat, joihin oliot voivat törmätä.
void LoadFromFile(string fileName, ObjectLoadMethods methods)
Lataa kentän tiedostosta. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
static Direction Left
Suunta vasemmalle.
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ä.
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.
Surfaces CreateVerticalBorders(double restitution, bool isVisible, Image borderImage)
Lisää kentän pystysivuille reunat, joihin oliot voivat törmätä.
void Clear()
Palauttaa oletustaustan.
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ä.
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
Surfaces CreateHorizontalBorders(double min, double max, int points, double restitution)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
BoundingRectangle FindObjectLimits()
Laskee pienimmän alueen, jonka sisälle kaikki kentän oliot mahtuvat.
Surfaces CreateBorders(double restitution, bool isVisible, Image borderImage)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
PhysicsObject CreateLeftBorder()
Lisää kenttään vasemman reunan.
static Surface Create(Level level, Direction direction)
Luo kentälle tasaisen reunan. Ei lisää reunaa automaattisesti kenttään.
Surfaces CreateBorders(bool isVisible)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
static double NextDouble(double min, double max)
Palauttaa satunnaisen liukuluvun parametrien
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ä.
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 ...
override Angle Angle
Kulma, jossa olio on. Oliota voi pyörittää kulmaa vaihtamalla.
PhysicsObject CreateLeftBorder(double restitution, bool isVisible)
Lisää kenttään vasemman reunan.
Surfaces CreateHorizontalBorders(double min, double max, int points)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
static readonly Vector Zero
Nollavektori.
static readonly Color Gray
Harmaa.
void Add(IGameObject o)
Lisää olion peliin. Tavalliset oliot tulevat automaattisesti kerrokselle 0 ja ruutuoliot päällimmäise...
Surfaces CreateVerticalBorders(double restitution, bool isVisible, Color borderColor)
Lisää kentän pystysivuille reunat, joihin oliot voivat törmätä.
PhysicsObject CreateRightBorder(double restitution, bool isVisible)
Lisää kenttään oikean reunan.
Pelikenttä, johon voi lisätä olioita. Kentällä voi myös olla reunat ja taustaväri tai taustakuva...
SynchronousList< Layer > Layers
Kerrokset, joilla pelioliot viihtyvät.
Surfaces CreateBorders(double min, double max, int points)
Lisää kaikille kentän sivuille epätasaiset reunat, joihin oliot voivat törmätä.
double Restitution
Olion kimmoisuus. Arvo välillä 0.0-1.0. Arvolla 1.0 olio säilyttää kaiken vauhtinsa törmäyksessä...
Peliluokka reaaliaikaisille peleille.
Surfaces CreateBorders(double min, double max, int points, double restitution)
Lisää kaikille kentän sivuille epätasaiset reunat, joihin oliot voivat törmätä.
static FileManager DataStorage
Tietovarasto, johon voi tallentaa tiedostoja pidempiaikaisesti. Sopii esimerkiksi pelitilanteen lataa...
Tasainen tai epätasainen pinta.
PhysicsObject CreateTopBorder()
Lisää kenttään yläreunan.
Surfaces CreateBorders(double restitution, bool isVisible, Color borderColor)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
static readonly Angle Zero
Nollakulma.
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ä.
Vector GetRandomPosition()
Palauttaa satunnaisen kohdan kentän reunojen sisältä.
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ä.
Body Body
Fysiikkamoottorin käyttämä tietorakenne.
void LoadFromContent(string assetName)
Lataa kentän contentista. Kenttätiedostoja voi tehdä Jypelin mukana tulevalle editorilla.
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
Surfaces CreateVerticalBorders(double min, double max, int points)
Lisää kentän vaakasivuille epätasaiset reunat, joihin oliot voivat törmätä.
static PhysicsObject CreateStaticObject(double width, double height)
Tekee suorakulmaisen kappaleen, joka on staattinen (eli pysyy paikallaan).
PhysicsObject CreateGround(double[] heights, double scale, Image image)
Helppo tapa lisätä kenttään epätasainen maasto. Maasto kuvataan luettelemalla Y-koordinaatteja vasemm...
static Direction Right
Suunta oikealle.
PhysicsObject CreateRightBorder()
Lisää kenttään oikean reunan.
static Direction Up
Suunta ylös.
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.
Surfaces CreateHorizontalBorders(double restitution, bool isVisible, Color borderColor)
Lisää kentän vaakasivuille reunat, joihin oliot voivat törmätä.
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.
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ä.
Surfaces CreateBorders(double restitution, bool isVisible)
Lisää kaikille kentän sivuille reunat, joihin oliot voivat törmätä.
PhysicsObject CreateTopBorder(double restitution, bool isVisible)
Lisää kenttään yläreunan.