source: 2010/23/hniemi/ShootEmUp/ShootEmUp/Weapons.cs @ 993

Revision 993, 8.7 KB checked in by hniemi, 12 years ago (diff)

Luotu uus abstraktiluokka helpottamaan aseiden tekemistä
Aseiden vaihtoa myös muokattu hieman ja lisätty pyhä purkkakorjaus.

Aiemmasta poisjääneet seinät myös lisätty mukaan.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.ScreenObjects;
7using Jypeli.Assets;
8
9namespace ShootEmUp
10{
11    /// <summary>
12    /// Säilyttää aseita ja aluksia varten tagissa tietoa
13    /// </summary>
14    class LisaData
15    {
16
17        private int damage;
18        public int Damage
19        {
20            get { return damage; }
21            set { damage = value; }
22        }
23        private string tyyppi;
24        public string Tyyppi
25        {
26            get { return tyyppi; }
27            set { tyyppi = value; }
28        }
29        private bool rajahtaa;
30        public bool Rajahtaa
31        {
32            get { return rajahtaa; }
33            set { rajahtaa = value; }
34        }
35    }
36
37    /// <summary>
38    /// Abstraktiluokka nopeuttamaan uuden aseiden luontia
39    /// </summary>
40    abstract class ShmupWeapon : Weapon
41    {
42        public Image Projectile { get; set; }
43        public int Damage {
44            get { return ((LisaData)this.Tag).Damage; }
45            set { Data.Damage = value;}
46        }
47        public int Level { get; private set; }
48        public CollisionHandler ProjectileCollision { get; set; }
49        public LisaData Data {
50            get { return (LisaData)this.Tag; }
51            set { this.Tag = value; }
52        }
53       
54
55        private double projectileWidth;
56        private double projectileHeigth;
57
58        /// <summary>
59        /// Shmup-ase
60        /// Luo level 1 aseen damagella 1
61        /// </summary>
62        /// <param name="width"></param>
63        /// <param name="height"></param>
64        public ShmupWeapon(double width, double height)
65            : base(1, 1)
66        {
67            Level = 1;
68            Color = Color.Blue;
69
70            projectileWidth = width;
71            projectileHeigth = height;
72
73            LisaData ase = new LisaData(); ;
74            ase.Damage = 1;
75            ase.Rajahtaa = false;
76            ase.Tyyppi = "oma";
77            this.Tag = ase;
78
79            this.AddedToGame += LisaaAV;
80            this.TimeBetweenUse = (new TimeSpan(0, 0, 0, 0, 5));
81            this.IsVisible = false;
82        }
83
84        /// <summary>
85        /// Lisää kuvan ja äänen aseeseen
86        /// </summary>
87        protected void LisaaAV()
88        {
89            //AttackSound = Game.LoadSoundEffect("pum");
90            //ammus = Game.LoadImage("sade");
91        }
92
93        protected override void OnUse()
94        {
95            OnShoot();
96        }
97
98        /// <summary>
99        /// Tämän tehtävä on palauttaa se nopeus, jolla ammus lähtee
100        /// </summary>
101        /// <returns></returns>
102        protected abstract double GetSpeed();
103
104        protected override PhysicsObject OnShoot()
105        {
106            PhysicsObject projectile = new PhysicsObject(Level * projectileWidth, Level * projectileHeigth);
107
108            projectile.Tag = this.Tag;
109
110            projectile.Image = this.Projectile;
111            projectile.Position = this.Position;
112            projectile.Color = this.Color;
113            projectile.IgnoresExplosions = true;
114            projectile.IgnoresCollisionResponse = true;
115            SetCollisionHandler(projectile, ProjectileCollision);
116            ShootProjectile(projectile, GetSpeed());
117
118            return projectile;
119        }
120    }
121
122    /// <summary>
123    /// Sädease
124    /// </summary>
125    class Beam : ShmupWeapon
126    {
127        /// <summary>
128        /// Säde-aseen konstruktori
129        /// Ampuu siis tiukkaan tahtiin
130        /// </summary>
131        /// <param name="projectileWidth">Ammuksen leveys</param>
132        /// <param name="projectileHeigth">Ammuksen pituus</param>
133        /// <param name="projectileImage">Ammuksen kuva</param>
134        public Beam(double projectileWidth, double projectileHeigth, Image projectileImage)
135            : base(projectileHeigth, projectileWidth)
136        {
137            Projectile = projectileImage;
138        }
139
140        protected override double  GetSpeed()
141        {
142            return 2000 + (Math.Sin(Game.Time.SinceStartOfGame.Milliseconds) * 100);
143        }
144    }
145
146    /// <summary>
147    /// Ohjus-ase
148    /// </summary>
149    class Missile2 : ShmupWeapon
150    {
151        /// <summary>
152        /// Luo ohjus-aseen
153        /// </summary>
154        /// <param name="projectileWidth">Ammuksen leveys</param>
155        /// <param name="projectileHeigth">Ammuksen pituus</param>
156        /// <param name="projectileImage">Ammuksen kuva</param>
157        public Missile2(double projectileWidth, double projectileHeigth, Image projectileImage)
158            : base(projectileHeigth, projectileWidth)
159        {
160            Projectile = projectileImage;
161            Damage = 20;
162            this.TimeBetweenUse = (new TimeSpan(0, 0, 0, 0, 300));
163        }
164
165        protected override double GetSpeed()
166        {
167            return 1000;
168        }
169    }
170
171
172    /// <summary>
173    /// Ohjus-ase
174    /// Ampuu räjähtävän ohjuksen
175    /// </summary>
176    class Missile : Weapon
177    {
178        private Image ammus;
179        public int Level { get; private set; }
180        public CollisionHandler MissileCollision { get; set; }
181        public int Damage { get; set; }
182
183        public Missile(double width, double height)
184            : base(width, height)
185        {
186            Level = 1;
187            this.IsVisible = false;
188            this.TimeBetweenUse = (new TimeSpan(0,0,0,0,300));
189            Color = Color.Blue;
190            this.AddedToGame += LisaaAV;
191            LisaData ase = new LisaData();
192            ase.Damage = 20;
193            ase.Rajahtaa = true;
194            ase.Tyyppi = "oma";
195            this.Tag = ase;
196        }
197
198        /// <summary>
199        /// Lisää äänen ja kuvan aseeseen
200        /// </summary>
201        private void LisaaAV()
202        {
203            //AttackSound = Game.LoadSoundEffect("pum");
204            ammus = Game.LoadImage("ohjus");
205        }
206
207        protected override void OnUse()
208        {
209            OnShoot();
210        }
211
212        protected override PhysicsObject OnShoot()
213        {
214           
215            if (!this.IsDestroyed())
216            {
217                PhysicsObject projectile = new PhysicsObject(Level * 30, Level * 15);
218                projectile.Shape = Shapes.Triangle;
219                projectile.Position = this.Position;
220                projectile.Color = this.Color;
221                projectile.Image = this.ammus;
222                SetCollisionHandler(projectile, MissileCollision);
223                ShootProjectile(projectile, 1000);
224                projectile.IgnoresExplosions = true;
225                projectile.IgnoresCollisionResponse = true;
226
227                projectile.Tag = this.Tag;
228
229                return projectile;
230            }
231            return null;
232        }
233    }
234
235    /// <summary>
236    /// Photon-ase
237    /// Ampuu pallon
238    /// </summary>
239    class Photon : Weapon
240    {
241        private Image ammus;
242        public int Level { get; private set; }
243        public CollisionHandler PhotonCollision { get; set; }
244        public int Damage { get; set; }
245
246        public Photon(double width, double height): base(width, height)
247        {
248            Level = 1;
249            this.TimeBetweenUse = (new TimeSpan(0,0,0,0,150));
250            Color = Color.Blue;
251            this.AddedToGame += LisaaAani;
252            this.IsVisible = false;
253
254            //Tagi
255            LisaData ase = new LisaData(); ;
256            ase.Damage = 15;
257            ase.Rajahtaa = false;
258            ase.Tyyppi = "oma";
259            this.Tag = ase;
260        }
261
262        /// <summary>
263        /// Lisää äänen
264        /// </summary>
265        private void LisaaAani()
266        {
267            //AttackSound = Game.LoadSoundEffect("pum");
268            ammus = Game.LoadImage("photon");
269        }
270
271        protected override void OnUse()
272        {
273            OnShoot();
274        }
275
276        protected override PhysicsObject OnShoot()
277        {
278
279            if (!this.IsDestroyed())
280            {
281                PhysicsObject projectile = new PhysicsObject(Level * 15, Level * 15);
282                projectile.Shape = Shapes.Circle;
283                projectile.Position = this.Position;
284                projectile.Color = this.Color;
285                projectile.Image = this.ammus;
286                SetCollisionHandler(projectile, PhotonCollision);
287                ShootProjectile(projectile, 2000);
288                projectile.IgnoresExplosions = true;
289                projectile.IgnoresCollisionResponse = true;
290
291                projectile.Tag = this.Tag;
292                return projectile;
293            }
294            return null;
295        }
296    }
297}
Note: See TracBrowser for help on using the repository browser.