Jypeli  9
The simple game programming library
WeaponTemplates.cs
Siirry tämän tiedoston dokumentaatioon.
1 #region MIT License
2 /*
3  * Copyright (c) 2009 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: Tero Jäntti, Tomi Karppinen, Janne Nikkanen, Rami Pasanen.
28  */
29 
30 using System;
31 using System.ComponentModel;
32 
33 
34 namespace Jypeli.Assets
35 {
39  public class Cannon : Weapon
40  {
44  public Cannon(double width, double height)
45  : base(width, height)
46  {
47  Power.DefaultValue = 15000;
48  TimeBetweenUse = TimeSpan.FromSeconds(1);
49 
50  Image = Game.LoadImageFromResources("Cannon.png");
51  AttackSound = Game.LoadSoundEffectFromResources("CannonFire.wav");
52  }
53 
54  protected override PhysicsObject CreateProjectile()
55  {
56  return new CannonBall(5);
57  }
58  }
59 
63  public class AssaultRifle : Weapon
64  {
68  public AssaultRifle(double width, double height)
69  : base(width, height)
70  {
71  AmmoIgnoresGravity = true;
72  Power.DefaultValue = 200;
73  TimeBetweenUse = TimeSpan.FromSeconds(0.2);
74 
75  Image = Game.LoadImageFromResources("AsRifle.png");
77  }
78 
79  protected override PhysicsObject CreateProjectile()
80  {
81  return new Bullet(5);
82  }
83  }
84 
88  public class PlasmaCannon : Weapon
89  {
93  public PlasmaCannon(double width, double height)
94  : base(width, height)
95  {
96  Power.DefaultValue = 6000;
97  AmmoIgnoresGravity = true;
98  AmmoIgnoresExplosions = true;
99  MaxAmmoLifetime = TimeSpan.FromSeconds(0.7);
100 
101  Image = Game.LoadImageFromResources("PlasmaCannon.png");
102  AttackSound = Game.LoadSoundEffectFromResources("PlasmaAttack.wav");
103  TimeBetweenUse = TimeSpan.FromSeconds(0.1);
104  }
105 
106  protected override PhysicsObject CreateProjectile()
107  {
108  return new Projectile(3, 5, Color.Green);
109  }
110  }
111 
115  public class LaserGun : Weapon
116  {
120  public LaserGun(double width, double height)
121  : base(width, height)
122  {
123  Power.DefaultValue = 500;
124  Ammo.DefaultValue = Int32.MaxValue;
125  AmmoIgnoresGravity = true;
126  AmmoIgnoresExplosions = true;
127  //MaxAmmoLifetime = TimeSpan.FromSeconds( 0.7 );
128 
129  Image = Game.LoadImageFromResources("PlasmaCannon.png");
131  TimeBetweenUse = TimeSpan.FromSeconds(0);
132  }
133 
134  protected override PhysicsObject CreateProjectile()
135  {
136  //return new Projectile( 10, 1, 5, Color.Red );
138  beam.Color = Color.Red;
139  return beam;
140  }
141  }
142 
146  public class CannonBall : Projectile
147  {
151  public CannonBall(double radius)
152  : base(radius, 20, "CannonBall.png")
153  {
154  }
155  }
156 
160  public class Bullet : Projectile
161  {
165  public Bullet(double radius)
166  : base(radius, 0.2, "Bullet.png")
167  {
168  }
169  }
170 
174  public class Grenade : Projectile
175  {
179  public Explosion Explosion { get; set; }
180 
184  public bool Exploded { get; set; }
185 
189  [Obsolete("Use Explosion.MaxRadius")]
190  public double ExplosionRadius
191  {
192  get { return Explosion.MaxRadius; }
193  set { Explosion.MaxRadius = value; }
194  }
195 
199  [Obsolete("Use Explosion.Speed")]
200  public double ExplosionSpeed
201  {
202  get { return Explosion.Speed; }
203  set { Explosion.Speed = value; }
204  }
205 
209  [Obsolete("Use Explosion.Force")]
210  public double ExplosionForce
211  {
212  get { return Explosion.Force; }
213  set { Explosion.Force = value; }
214  }
215 
219  public TimeSpan FuseTime { get; set; }
220 
225  public Grenade(double radius)
226  : this(radius, TimeSpan.FromSeconds(3))
227  {
228  }
229 
235  public Grenade(double radius, TimeSpan fuseTime)
236  : base(radius, 20, "Grenade.png")
237  {
238  FuseTime = fuseTime;
239  IsUpdated = true;
240  Explosion = new Assets.Explosion(150) { Speed = 150, Force = 1000 };
241  }
242 
246  public virtual void Explode()
247  {
248  if (!IsAddedToGame)
249  return;
250 
251  this.Destroy();
252  Explosion.Position = this.Position;
254  Exploded = true;
255  }
256 
257  [EditorBrowsable(EditorBrowsableState.Never)]
258  public override void Update(Time time)
259  {
260  if ((time.SinceStartOfGame - CreationTime) > FuseTime && IsAddedToGame && !Exploded)
261  {
262  // Boom!
263  Explode();
264  }
265 
266  base.Update(time);
267  }
268  }
269 
274  public class ClusterGrenade : Grenade
275  {
276  private int clusterlevel = 0;
277 
281  public int NumberOfClusters { get; set; }
282 
286  public Angle ClusterDirection { get; set; }
287 
291  public double ClusterArc { get; set; }
292 
298  public ClusterGrenade(double radius, int cl)
299  : base(radius)
300  {
301  Mass = 20;
303  NumberOfClusters = 3;
304  ClusterDirection = Angle.FromRadians(Math.PI / 2);
305  ClusterArc = Math.PI;
306  clusterlevel = cl - 1;
307  }
308 
312  public override void Explode()
313  {
314  if (!IsAddedToGame) return;
315 
316  Vector posOffset;
317  double direction;
318 
319  base.Explode();
320 
321  for (int i = 0; i < NumberOfClusters; i++)
322  {
323  double currentRadius = Width / 2;
324  double r = currentRadius * 0.6;
325  // TODO: The mass could be evenly distributed to the clusters and the main projectile.
326  Grenade g = (clusterlevel > 0) ?
327  new ClusterGrenade(r, clusterlevel - 1) : new Grenade(r);
328 
330  posOffset = Vector.FromLengthAndAngle(2 + this.Size.Magnitude, Angle.FromRadians(direction));
331 
332  g.Position = this.Position + posOffset;
333  g.Mass = this.Mass / NumberOfClusters;
334  g.Image = this.Image;
335  g.Color = this.Color;
336  g.FuseTime = this.FuseTime;
337  g.Explosion.Force = this.Explosion.Force / 2;
338  g.Explosion.MaxRadius = this.Explosion.MaxRadius / 2;
339  g.Explosion.Speed = this.Explosion.Speed / 2;
341  Game.Instance.Add(g);
342  }
343  }
344  }
345 }
Jypeli.Assets.Weapon.AttackSound
SoundEffect AttackSound
Hyökkäysääni (pistoolin pamaus jne.)
Definition: Weapon.cs:102
Jypeli.Assets.ClusterGrenade.NumberOfClusters
int NumberOfClusters
Sirpaleiden määrä, joka räjähdyksestä syntyy.
Definition: WeaponTemplates.cs:281
Jypeli.Assets.ClusterGrenade.Explode
override void Explode()
Räjäyttää kranaatin sirpaleiksi.
Definition: WeaponTemplates.cs:312
Jypeli.PhysicsObject.Size
override Vector Size
Definition: Dimensions.cs:41
Jypeli.Assets.Weapon
Ase.
Definition: Weapon.cs:38
Jypeli.Assets.Grenade.Grenade
Grenade(double radius)
Luo uuden kranaatin, joka räjähtää kolmen sekunnin päästä.
Definition: WeaponTemplates.cs:225
Jypeli.Assets.Projectile
Ammus.
Definition: Projectile.cs:7
Jypeli.Assets.Cannon.CreateProjectile
override PhysicsObject CreateProjectile()
Luo uuden ammuksen. Ylikirjoitetaan aliluokissa.
Definition: WeaponTemplates.cs:54
Jypeli.Color.Red
static readonly Color Red
Punainen.
Definition: Color.cs:813
Jypeli.Vector.Zero
static readonly Vector Zero
Nollavektori.
Definition: Vector.cs:63
Jypeli.Assets.Weapon.AmmoIgnoresGravity
bool AmmoIgnoresGravity
Jättävätkö panokset painovoiman huomiotta.
Definition: Weapon.cs:86
Jypeli.Assets.Grenade.Explode
virtual void Explode()
Räjäytä kranaatti.
Definition: WeaponTemplates.cs:246
Jypeli.Vector.UnitX
static readonly Vector UnitX
Vaakasuuntainen yksikkövektori (pituus 1, suunta oikealle).
Definition: Vector.cs:73
Jypeli.Assets.ClusterGrenade.ClusterArc
double ClusterArc
Sirpaleiden hajontakaari.
Definition: WeaponTemplates.cs:291
Jypeli.Assets.Explosion
Räjähdys.
Definition: Explosion.cs:38
Jypeli.Assets.Cannon.Cannon
Cannon(double width, double height)
Alustaa uuden tykin.
Definition: WeaponTemplates.cs:44
Jypeli.Assets.ClusterGrenade
Rypälepommi. Hajoaa räjähtäessään pienempiin osiin, jotka voivat edelleen räjähtää pienempiin osiin.
Definition: WeaponTemplates.cs:275
Jypeli.Assets.PlasmaCannon
Plasmatykki.
Definition: WeaponTemplates.cs:89
Jypeli.RaySegment
Jana.
Definition: Shapes.cs:475
Jypeli.Assets.LaserGun.CreateProjectile
override PhysicsObject CreateProjectile()
Luo uuden ammuksen. Ylikirjoitetaan aliluokissa.
Definition: WeaponTemplates.cs:134
Jypeli.Angle.Radians
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:85
Jypeli.Assets.CannonBall.CannonBall
CannonBall(double radius)
Alustaa uuden tykinkuulan.
Definition: WeaponTemplates.cs:151
Jypeli.Assets.Bullet
Luoti.
Definition: WeaponTemplates.cs:161
Jypeli.Assets.ClusterGrenade.ClusterDirection
Angle ClusterDirection
Sirpaleiden hajontasuunta.
Definition: WeaponTemplates.cs:286
Jypeli.Assets.Grenade.Explosion
Explosion Explosion
Räjähdys, joka kranaatista syntyy.
Definition: WeaponTemplates.cs:179
Jypeli.Assets.Weapon.Power
DoubleMeter Power
Voima, jolla panos ammutaan. Nollautuu ammuttaessa.
Definition: Weapon.cs:61
Jypeli.Assets.Explosion.Explosion
Explosion(Explosion src)
Luo uuden räjähdyksen entisen pohjalta.
Definition: Explosion.cs:105
Jypeli.Assets.Cannon
Yksinkertainen tykki, joka ampuu kuulia tai muuta ammuksia.
Definition: WeaponTemplates.cs:40
Jypeli.Assets.ClusterGrenade.ClusterGrenade
ClusterGrenade(double radius, int cl)
Alustaa uuden rypälepommin.
Definition: WeaponTemplates.cs:298
Jypeli.Assets.CannonBall
Tykinkuula.
Definition: WeaponTemplates.cs:147
Jypeli.Assets.Grenade.ExplosionSpeed
double ExplosionSpeed
Räjähdyksen nopeus.
Definition: WeaponTemplates.cs:201
Jypeli.Assets.AssaultRifle
Rynnäkkökivääri.
Definition: WeaponTemplates.cs:64
Jypeli.Game.Instance
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:90
Jypeli.Color.Green
static readonly Color Green
Vihreä.
Definition: Color.cs:648
Jypeli.Assets.PlasmaCannon.CreateProjectile
override PhysicsObject CreateProjectile()
Luo uuden ammuksen. Ylikirjoitetaan aliluokissa.
Definition: WeaponTemplates.cs:106
Jypeli.Assets.Explosion.MaxRadius
double MaxRadius
Suurin säde, johon räjähdys voi kasvaa.
Definition: Explosion.cs:54
Jypeli.Game.Add
void Add(Light light)
Lisää valon peliin. Nykyisellään valoja voi olla ainoastaan yksi kappale. Toistaiseksi ei tuettu Wind...
Definition: Effects.cs:27
Jypeli.PhysicsObject.CollisionIgnorer
virtual Ignorer CollisionIgnorer
Olio, jolla voi välttää oliota osumasta tiettyihin muihin olioihin.
Definition: Collisions.cs:13
Jypeli.Time
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:14
Jypeli.Game.LoadImageFromResources
static Image LoadImageFromResources(string name)
Lataa kuvan Jypelin sisäisistä resursseista.
Definition: Content.cs:84
Jypeli.Assets.Explosion.Speed
double Speed
Räjähdyksen leviämisnopeus (pikseliä sekunnissa)
Definition: Explosion.cs:88
Jypeli.Assets.LaserGun.LaserGun
LaserGun(double width, double height)
Alustaa uuden laser-tykin.
Definition: WeaponTemplates.cs:120
Jypeli.Angle.FromRadians
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
Definition: Angle.cs:315
Jypeli.Assets.ClusterGrenade.clusterlevel
int clusterlevel
Definition: WeaponTemplates.cs:276
Jypeli.Assets.Explosion.Force
double Force
Voima, jolla räjähdyksen paineaallon uloin reuna heittää olioita räjähdyksestä poispäin....
Definition: Explosion.cs:94
Jypeli.Assets.Grenade.ExplosionRadius
double ExplosionRadius
Räjähdyksen säde.
Definition: WeaponTemplates.cs:191
Jypeli.Assets.Grenade.Grenade
Grenade(double radius, TimeSpan fuseTime)
Luo uuden kranaatin.
Definition: WeaponTemplates.cs:235
Jypeli.Assets.PlasmaCannon.PlasmaCannon
PlasmaCannon(double width, double height)
Alustaa uuden plasmakiväärin.
Definition: WeaponTemplates.cs:93
Jypeli.Assets.Grenade
Kranaatti.
Definition: WeaponTemplates.cs:175
Jypeli.Color
Väri.
Definition: Color.cs:13
Jypeli.PhysicsObject.Position
override Vector Position
Definition: Dimensions.cs:27
Jypeli.Assets.AssaultRifle.AssaultRifle
AssaultRifle(double width, double height)
Alustaa uuden rynnäkkökiväärin.
Definition: WeaponTemplates.cs:68
Jypeli.Assets.Weapon.MaxAmmoLifetime
TimeSpan MaxAmmoLifetime
Ammuksen elinikä. TimeSpan.MaxValue jos ikuinen, TimeSpan.FromSeconds( 5 ) jos 5 sekuntia jne.
Definition: Weapon.cs:97
Jypeli.Time.SinceStartOfGame
TimeSpan SinceStartOfGame
Aika joka on kulunut pelin alusta.
Definition: Time.cs:32
Jypeli.Vector.FromLengthAndAngle
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:106
Jypeli.Assets.Weapon.Ammo
IntMeter Ammo
Panosten määrä.
Definition: Weapon.cs:66
Jypeli.Image
Kuva.
Definition: Image.cs:29
Jypeli.Game.LoadSoundEffectFromResources
static SoundEffect LoadSoundEffectFromResources(string name)
Lataa ääniefektin Jypelin sisäisistä resursseista.
Definition: Content.cs:161
Jypeli.Assets.Bullet.Bullet
Bullet(double radius)
Alustaa uuden luodin.
Definition: WeaponTemplates.cs:165
Jypeli.Vector.Magnitude
double Magnitude
Vektorin pituus.
Definition: Vector.cs:319
Jypeli.Vector
2D-vektori.
Definition: Vector.cs:59
System
Definition: CFFauxAttributes.cs:29
Jypeli.PhysicsObject
Definition: Collisions.cs:6
Jypeli.Assets.Grenade.FuseTime
TimeSpan FuseTime
Aika, jonka päästä ammus räjähtää itsestään.
Definition: WeaponTemplates.cs:219
Jypeli.Assets.Weapon.AmmoIgnoresExplosions
bool AmmoIgnoresExplosions
Jättävätkö panokset räjähdyksen paineaallot huomiotta.
Definition: Weapon.cs:91
Jypeli.Assets
Definition: Automobile.cs:5
Jypeli.ObjectIgnorer
A collision ignorer that uses reference comparison. All Bodies with the same instance of this ignorer...
Definition: ObjectIgnorer.cs:41
Jypeli.Assets.AssaultRifle.CreateProjectile
override PhysicsObject CreateProjectile()
Luo uuden ammuksen. Ylikirjoitetaan aliluokissa.
Definition: WeaponTemplates.cs:79
Jypeli.Assets.Grenade.ExplosionForce
double ExplosionForce
Räjähdyksen voima.
Definition: WeaponTemplates.cs:211
Jypeli.PhysicsObject.Mass
double Mass
Olion massa (paino). Mitä enemmän massaa, sitä enemmän voimaa tarvitaan saamaan olio liikkeelle / pys...
Definition: Inertia.cs:14
Jypeli.Game
Definition: Content.cs:46
Jypeli.Assets.LaserGun
Lasertykki
Definition: WeaponTemplates.cs:116
Jypeli.Assets.Weapon.TimeBetweenUse
TimeSpan TimeBetweenUse
Kuinka kauan kestää, että asetta voidaan käyttää uudestaan.
Definition: Weapon.cs:107
Jypeli.Assets.Grenade.Update
override void Update(Time time)
Definition: WeaponTemplates.cs:258
Jypeli.Assets.Grenade.Exploded
bool Exploded
Onko kranaatti räjähtänyt
Definition: WeaponTemplates.cs:184
Jypeli.Angle
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40