Jypeli  5
The simple game programming library
Background.cs
Siirry tämän tiedoston dokumentaatioon.
1 #region MIT License
2 /*
3  * Copyright (c) 2009-2011 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: Tomi Karppinen, Tero Jäntti
28  */
29 
30 using System;
31 using System.Collections.Generic;
32 using System.Linq;
33 using System.Text;
34 using Microsoft.Xna.Framework.Graphics;
35 using Microsoft.Xna.Framework;
36 using Jypeli;
37 
38 namespace Jypeli.Widgets
39 {
43  public class Background : Widget
44  {
45  private const int MAX_TEXTURE_RESOLUTION = 2048;
46 
47  public override Animation Animation
48  {
49  get { return base.Animation; }
50  set
51  {
52  base.Animation = value;
53  if ( value != null )
54  Size = new Vector( value.Width, value.Height );
55  }
56  }
57 
62  public bool MovesWithCamera { get; set; }
63 
71  public double Scale { get; set; }
72 
76  public void FitToLevel()
77  {
78  Level level = Game.Instance.Level;
79  Size = new Vector( level.Width, level.Height );
80  TextureWrapSize = Vector.Diagonal;
81  }
82 
86  public void TileToLevel()
87  {
88  Level level = Game.Instance.Level;
89  Size = level.Size;
90  TextureWrapSize = new Vector( level.Width / Image.Width, level.Height / Image.Height );
91  }
92 
97  public void ScaleToLevel()
98  {
99  Level level = Game.Instance.Level;
100  Size *= Math.Min( level.Width / this.Width, level.Height / this.Height );
101  TextureWrapSize = Vector.Diagonal;
102  }
103 
108  public void ScaleToLevelFull()
109  {
110  Level level = Game.Instance.Level;
111  Size *= Math.Max( level.Width / this.Width, level.Height / this.Height );
112  TextureWrapSize = Vector.Diagonal;
113  }
114 
119  public void ScaleToLevelByWidth()
120  {
121  Level level = Game.Instance.Level;
122  Size *= level.Width / this.Width;
123  TextureWrapSize = Vector.Diagonal;
124  }
125 
130  public void ScaleToLevelByHeight()
131  {
132  Level level = Game.Instance.Level;
133  Size *= level.Height / this.Height;
134  TextureWrapSize = Vector.Diagonal;
135  }
136 
142  public Background( double width, double height )
143  : base( width, height )
144  {
145  this.Color = Color.LightBlue;
146  this.Size = new Vector( width, height );
147  this.Scale = 1.0f;
148  this.MovesWithCamera = true;
149  }
150 
155  public Background( Vector size )
156  : this( size.X, size.Y )
157  {
158  }
159 
165  public Image CreateStars( int amount )
166  {
167  int imageWidth = (int)Game.Screen.Width;
168  int imageHeight = (int)Game.Screen.Height;
169 
170  Image image = Image.CreateStarSky( imageWidth, imageHeight, amount );
171 
172  Image = image;
173  MovesWithCamera = false;
174 
175  return image;
176  }
177 
183  {
184  int textureWidth = (int)Game.Screen.Width;
185  int textureHeight = (int)Game.Screen.Height;
186  int amount = ( textureWidth * textureHeight ) / 1000;
187 
188  Image image = this.CreateStars( amount );
189 
190  Image = image;
191  MovesWithCamera = false;
192 
193  return image;
194  }
195 
202  public Image CreateGradient( Color lowerColor, Color upperColor )
203  {
204  int textureWidth = (int)Game.Screen.Width;
205  int textureHeight = (int)Game.Screen.Height;
206 
207 #if WINDOWS
208  // DirectX9 ei tue tekstuureita, joiden koko on suurempi kuin 2048 pikseliä
209  // Ja koska DX9 ei tue niitä, niin myöskään XNA ei tue niitä
210  textureWidth = Math.Min(textureWidth, MAX_TEXTURE_RESOLUTION);
211  textureHeight = Math.Min(textureHeight, MAX_TEXTURE_RESOLUTION);
212 #endif
213 
214  int amount = ( textureWidth * textureHeight ) / 800;
215 
216  Image image = Image.FromGradient( textureWidth, textureHeight, lowerColor, upperColor );
217 
218  Image = image;
219  MovesWithCamera = false;
220 
221  return image;
222  }
223 
224  public void Draw( Matrix parentTransformation, Matrix transformation )
225  {
226  if ( Image == null ) return;
227 
228  if ( MovesWithCamera )
229  {
230  Matrix matrix =
231  Matrix.CreateScale( (float)Size.X, (float)Size.Y, 1f )
232  * transformation
233  * parentTransformation;
234  Renderer.DrawImage( Image, ref matrix, TextureWrapSize );
235  }
236  }
237  }
238 }
Background(double width, double height)
Luo uuden taustakuvan.
Definition: Background.cs:142
Background(Vector size)
Luo uuden taustakuvan.
Definition: Background.cs:155
static void DrawImage(Image texture, ref Matrix matrix, Vector wrapSize)
Definition: Renderer.cs:126
static readonly Color LightBlue
Vaalea sininen.
Definition: Color.cs:684
void ScaleToLevelFull()
Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen. Kuva sovitetaan niin, että se täyttää koko...
Definition: Background.cs:108
Image CreateGradient(Color lowerColor, Color upperColor)
Luo liukuväritaustan taustakuvaksi.
Definition: Background.cs:202
int Width
Leveys pikseleinä.
Definition: Image.cs:290
static Image FromGradient(int imageWidth, int imageHeight, Color lowerColor, Color upperColor)
Luo pystysuuntaisen liukuväritetyn kuvan.
Definition: Image.cs:751
static Game Instance
Definition: Game.cs:149
Käyttöliittymän komponentti.
Definition: Appearance.cs:9
Image CreateStars(int amount)
Luo avaruustaustakuvan.
Definition: Background.cs:165
void Draw(Matrix parentTransformation, Matrix transformation)
Definition: Background.cs:224
Kuva.
Definition: Image.cs:24
double Height
Näytön korkeus y-suunnassa.
Definition: View.cs:74
Pelikenttä, johon voi lisätä olioita. Kentällä voi myös olla reunat ja taustaväri tai taustakuva...
Definition: Level.cs:78
Animation(params Image[] frames)
Luo uuden animaation.
Definition: Animation.cs:185
static ScreenView Screen
Näytön dimensiot, eli koko ja reunat.
Definition: Game.cs:194
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
Image CreateStars()
Luo avaruustaustakuvan.
Definition: Background.cs:182
void ScaleToLevel()
Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen. Kuva sovitetaan niin, että se ei ylitä ken...
Definition: Background.cs:97
int Height
Korkeus pikseleinä.
Definition: Image.cs:298
void ScaleToLevelByWidth()
Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen. Kuva sovitetaan niin, että se täyttää kent...
Definition: Background.cs:119
void ScaleToLevelByHeight()
Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen. Kuva sovitetaan niin, että se täyttää kent...
Definition: Background.cs:130
static readonly Vector Diagonal
Diagonaalivektori (1,1)
Definition: Vector.cs:76
double Height
Kentän korkeus.
Definition: Level.cs:126
Level Level
Aktiivinen kenttä.
Definition: Game.cs:299
static Image CreateStarSky(int width, int height, int stars, bool transparent=false)
Luo tähtitaivaskuvan.
Definition: Image.cs:600
Väri.
Definition: Color.cs:13
void FitToLevel()
Sovittaa taustakuvan kentän kokoiseksi.
Definition: Background.cs:76
double Width
Kentän leveys.
Definition: Level.cs:117
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
Definition: Animation.cs:56
Luokka, joka sisältää metodeita kuvioiden ja tekstuurien piirtämiseen 2D-tasossa. ...
Definition: Renderer.cs:51
void TileToLevel()
Toistaa kuvaa vaaka- ja pystysuunnassa niin että kuvio peittää koko kentän.
Definition: Background.cs:86
Vector Size
Kentän koko (leveys ja korkeus).
Definition: Level.cs:135
2D-vektori.
Definition: Vector.cs:56
double Width
Näytön leveys x-suunnassa.
Definition: View.cs:66