source: 2014/24/EemeliK/Zombieland/Jypeli/Widgets/Background.cs @ 5974

Revision 5974, 7.8 KB checked in by empaheik, 4 years ago (diff)
Line 
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
30using System;
31using System.Collections.Generic;
32using System.Linq;
33using System.Text;
34using Microsoft.Xna.Framework.Graphics;
35using Microsoft.Xna.Framework;
36using Jypeli;
37
38namespace Jypeli.Widgets
39{
40    /// <summary>
41    /// Taustakuva
42    /// </summary>
43    public class Background : Widget
44    {
45        public override Animation Animation
46        {
47            get { return base.Animation; }
48            set
49            {
50                base.Animation = value;
51                if ( value != null )
52                    Size = new Vector( value.Width, value.Height );
53            }
54        }
55       
56        /// <summary>
57        /// Liikkuuko taustakuva kameran mukana vai ei.
58        /// </summary>
59        /// <value><c>true</c> jos liikkuu; muuten <c>false</c>.</value>
60        public bool MovesWithCamera { get; set; }
61
62        /// <summary>
63        /// Taustakuvan skaala.
64        /// <example>
65        /// Jos halutaan kaksinkertainen kuva, niin laitetaan skaalaksi 2, puolet pienemmän kuvan skaala on vastaavasti 0.5.
66        /// </example>
67        /// </summary>
68        /// <value>The scale.</value>
69        public double Scale { get; set; }
70
71        /// <summary>
72        /// Sovittaa taustakuvan kentän kokoiseksi.
73        /// </summary>
74        public void FitToLevel()
75        {
76            Level level = Game.Instance.Level;
77            Size = new Vector( level.Width, level.Height );
78            TextureWrapSize = Vector.Diagonal;
79        }
80
81        /// <summary>
82        /// Toistaa kuvaa vaaka- ja pystysuunnassa niin että kuvio peittää koko kentän.
83        /// </summary>
84        public void TileToLevel()
85        {
86            Level level = Game.Instance.Level;
87            Size = level.Size;
88            TextureWrapSize = new Vector( level.Width / Image.Width, level.Height / Image.Height );
89        }
90
91        /// <summary>
92        /// Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen.
93        /// Kuva sovitetaan niin, että se ei ylitä kentän rajoja.
94        /// </summary>
95        public void ScaleToLevel()
96        {
97            Level level = Game.Instance.Level;
98            Size *= Math.Min( level.Width / this.Width, level.Height / this.Height );
99            TextureWrapSize = Vector.Diagonal;
100        }
101
102        /// <summary>
103        /// Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen.
104        /// Kuva sovitetaan niin, että se täyttää koko kentän ja osa rajautuu kentän ulkopuolelle.
105        /// </summary>
106        public void ScaleToLevelFull()
107        {
108            Level level = Game.Instance.Level;
109            Size *= Math.Max( level.Width / this.Width, level.Height / this.Height );
110            TextureWrapSize = Vector.Diagonal;
111        }
112
113        /// <summary>
114        /// Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen.
115        /// Kuva sovitetaan niin, että se täyttää kentän vaakasuunnassa.
116        /// </summary>
117        public void ScaleToLevelByWidth()
118        {
119            Level level = Game.Instance.Level;
120            Size *= level.Width / this.Width;
121            TextureWrapSize = Vector.Diagonal;
122        }
123
124        /// <summary>
125        /// Sovittaa taustakuvan kentän kokoiseksi pitäen kuvasuhteen.
126        /// Kuva sovitetaan niin, että se täyttää kentän pystysuunnassa.
127        /// </summary>
128        public void ScaleToLevelByHeight()
129        {
130            Level level = Game.Instance.Level;
131            Size *= level.Height / this.Height;
132            TextureWrapSize = Vector.Diagonal;
133        }
134       
135        /// <summary>
136        /// Luo uuden taustakuvan.
137        /// </summary>
138        /// <param name="width">Taustakuvan leveys.</param>
139        /// /// <param name="height">Taustakuvan korkeus.</param>
140        public Background( double width, double height )
141            : base( width, height )
142        {
143            this.Color = Color.LightBlue;
144            this.Size = new Vector( width, height );
145            this.Scale = 1.0f;
146            this.MovesWithCamera = true;
147        }
148       
149        /// <summary>
150        /// Luo uuden taustakuvan.
151        /// </summary>
152        /// <param name="size">Taustakuvan koko.</param>
153        public Background( Vector size )
154            : this( size.X, size.Y )
155        {
156        }
157       
158        /// <summary>
159        /// Luo avaruustaustakuvan.
160        /// </summary>
161        /// <param name="amount">Tähtien määrä.</param>
162        /// <returns>Kuva.</returns>
163        public Image CreateStars( int amount )
164        {
165            int imageWidth = (int)Game.Screen.Width;
166            int imageHeight = (int)Game.Screen.Height;
167
168            Image image = Image.CreateStarSky( imageWidth, imageHeight, amount );
169
170            Image = image;
171            MovesWithCamera = false;
172
173            return image;
174        }
175
176        /// <summary>
177        /// Luo avaruustaustakuvan.
178        /// </summary>
179        /// <returns>Kuva.</returns>
180        public Image CreateStars()
181        {
182            int textureWidth = (int)Game.Screen.Width;
183            int textureHeight = (int)Game.Screen.Height;
184            int amount = ( textureWidth * textureHeight ) / 1000;
185
186            Image image = this.CreateStars( amount );
187
188            Image = image;
189            MovesWithCamera = false;
190
191            return image;
192        }
193
194        /// <summary>
195        /// Luo liukuväritaustan taustakuvaksi.
196        /// </summary>
197        /// <param name="lowerColor">Alempi väri.</param>
198        /// <param name="upperColor">Ylempi väri.</param>
199        /// <returns>Kuva.</returns>
200        public Image CreateGradient( Color lowerColor, Color upperColor )
201        {
202            int textureWidth = (int)Game.Screen.Width;
203            int textureHeight = (int)Game.Screen.Height;
204            int amount = ( textureWidth * textureHeight ) / 800;
205
206            Image image = Image.FromGradient( textureWidth, textureHeight, lowerColor, upperColor );
207
208            Image = image;
209            MovesWithCamera = false;
210
211            return image;
212        }
213
214        public void Draw( Matrix parentTransformation, Matrix transformation )
215        {
216            if ( Image == null ) return;
217
218            if ( MovesWithCamera )
219            {
220                Matrix matrix =
221                    Matrix.CreateScale( (float)Size.X, (float)Size.Y, 1f )
222                    * transformation
223                    * parentTransformation;
224                Renderer.DrawImage( Image, ref matrix, TextureWrapSize );
225            }
226        }
227    }
228}
Note: See TracBrowser for help on using the repository browser.