source: 2010/23/hniemi/oksa/ShootEmUp/ShootEmUp/Weapons.cs @ 1007

Revision 1007, 5.6 KB checked in by hniemi, 10 years ago (diff)
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            if (this.IsAddedToGame)
107            {
108                PhysicsObject projectile = new PhysicsObject(Level * projectileWidth, Level * projectileHeigth);
109
110                projectile.Tag = this.Tag;
111
112                projectile.Image = this.Projectile;
113                projectile.Position = this.Position;
114                projectile.Color = this.Color;
115                projectile.IgnoresExplosions = true;
116                projectile.IgnoresCollisionResponse = true;
117                SetCollisionHandler(projectile, ProjectileCollision);
118                Game.Add(projectile);
119
120                ShootProjectile(projectile, GetSpeed());
121
122                return projectile;
123            }
124            return null;
125        }
126    }
127
128    /// <summary>
129    /// Sädease
130    /// </summary>
131    class Beam : ShmupWeapon
132    {
133        /// <summary>
134        /// Säde-aseen konstruktori
135        /// Ampuu siis tiukkaan tahtiin
136        /// </summary>
137        /// <param name="projectileWidth">Ammuksen leveys</param>
138        /// <param name="projectileHeigth">Ammuksen pituus</param>
139        /// <param name="projectileImage">Ammuksen kuva</param>
140        public Beam(double projectileWidth, double projectileHeigth, Image projectileImage)
141            : base(projectileHeigth, projectileWidth)
142        {
143            Projectile = projectileImage;
144        }
145
146        protected override double GetSpeed()
147        {
148            return 2000; //+ (Math.Sin(Game.Time.SinceStartOfGame.Milliseconds) * 100);
149        }
150    }
151
152    /// <summary>
153    /// Ohjus-ase
154    /// </summary>
155    class Missile : ShmupWeapon
156    {
157        /// <summary>
158        /// Luo ohjus-aseen
159        /// </summary>
160        /// <param name="projectileWidth">Ammuksen leveys</param>
161        /// <param name="projectileHeigth">Ammuksen pituus</param>
162        /// <param name="projectileImage">Ammuksen kuva</param>
163        public Missile(double projectileWidth, double projectileHeigth, Image projectileImage)
164            : base(projectileHeigth, projectileWidth)
165        {
166            Projectile = projectileImage;
167            Damage = 20;
168            this.TimeBetweenUse = (new TimeSpan(0, 0, 0, 0, 300));
169        }
170
171        protected override double GetSpeed()
172        {
173            return 1000;
174        }
175    }
176
177    /// <summary>
178    /// Photon-ase
179    /// </summary>
180    class Photon : ShmupWeapon
181    {
182        public Photon(double projectileWidth, double projectileHeigth, Image projectileImage)
183            : base(projectileHeigth, projectileWidth)
184        {
185            Projectile = projectileImage;
186            Damage = 20;
187            this.TimeBetweenUse = (new TimeSpan(0, 0, 0, 0, 200));
188        }
189
190        protected override double GetSpeed()
191        {
192            return 2000;
193        }
194    }
195}
Note: See TracBrowser for help on using the repository browser.