Jypeli 10
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
30using System;
31using System.ComponentModel;
32
33
34namespace 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");
52 }
53
58 protected override PhysicsObject CreateProjectile()
59 {
60 return new CannonBall(5);
61 }
62 }
63
67 public class AssaultRifle : Weapon
68 {
72 public AssaultRifle(double width, double height)
73 : base(width, height)
74 {
75 AmmoIgnoresGravity = true;
76 Power.DefaultValue = 200;
77 TimeBetweenUse = TimeSpan.FromSeconds(0.2);
78
79 Image = Game.LoadImageFromResources("AsRifle.png");
81 }
82
87 protected override PhysicsObject CreateProjectile()
88 {
89 return new Bullet(5);
90 }
91 }
92
96 public class PlasmaCannon : Weapon
97 {
101 public PlasmaCannon(double width, double height)
102 : base(width, height)
103 {
104 Power.DefaultValue = 6000;
105 AmmoIgnoresGravity = true;
107 MaxAmmoLifetime = TimeSpan.FromSeconds(0.7);
108
109 Image = Game.LoadImageFromResources("PlasmaCannon.png");
110 AttackSound = Game.LoadSoundEffectFromResources("PlasmaAttack.wav");
111 TimeBetweenUse = TimeSpan.FromSeconds(0.1);
112 }
113
118 protected override PhysicsObject CreateProjectile()
119 {
120 return new Projectile(3, 5, Color.Green);
121 }
122 }
123
127 public class LaserGun : Weapon
128 {
132 public LaserGun(double width, double height)
133 : base(width, height)
134 {
135 Power.DefaultValue = 500;
136 Ammo.DefaultValue = Int32.MaxValue;
137 AmmoIgnoresGravity = true;
139 //MaxAmmoLifetime = TimeSpan.FromSeconds( 0.7 );
140
141 Image = Game.LoadImageFromResources("PlasmaCannon.png");
143 TimeBetweenUse = TimeSpan.FromSeconds(0);
144 }
145
150 protected override PhysicsObject CreateProjectile()
151 {
152 //return new Projectile( 10, 1, 5, Color.Red );
154 beam.Color = Color.Red;
155 return beam;
156 }
157 }
158
162 public class CannonBall : Projectile
163 {
167 public CannonBall(double radius)
168 : base(radius, 20, "CannonBall.png")
169 {
170 }
171 }
172
176 public class Bullet : Projectile
177 {
181 public Bullet(double radius)
182 : base(radius, 0.2, "Bullet.png")
183 {
184 }
185 }
186
190 public class Grenade : Projectile
191 {
195 public Explosion Explosion { get; set; }
196
200 public bool Exploded { get; set; }
201
205 [Obsolete("Use Explosion.MaxRadius")]
206 public double ExplosionRadius
207 {
208 get { return Explosion.MaxRadius; }
209 set { Explosion.MaxRadius = value; }
210 }
211
215 [Obsolete("Use Explosion.Speed")]
216 public double ExplosionSpeed
217 {
218 get { return Explosion.Speed; }
219 set { Explosion.Speed = value; }
220 }
221
225 [Obsolete("Use Explosion.Force")]
226 public double ExplosionForce
227 {
228 get { return Explosion.Force; }
229 set { Explosion.Force = value; }
230 }
231
235 public TimeSpan FuseTime { get; set; }
236
241 public Grenade(double radius)
242 : this(radius, TimeSpan.FromSeconds(3))
243 {
244 }
245
251 public Grenade(double radius, TimeSpan fuseTime)
252 : base(radius, 20, "Grenade.png")
253 {
254 FuseTime = fuseTime;
255 IsUpdated = true;
256 Explosion = new Assets.Explosion(150) { Speed = 150, Force = 1000 };
257 }
258
262 public virtual void Explode()
263 {
264 if (!IsAddedToGame)
265 return;
266
267 this.Destroy();
270 Exploded = true;
271 }
272
274 [EditorBrowsable(EditorBrowsableState.Never)]
275 public override void Update(Time time)
276 {
278 {
279 // Boom!
280 Explode();
281 }
282
283 base.Update(time);
284 }
285 }
286
291 public class ClusterGrenade : Grenade
292 {
293 private int clusterlevel = 0;
294
298 public int NumberOfClusters { get; set; }
299
303 public Angle ClusterDirection { get; set; }
304
308 public double ClusterArc { get; set; }
309
315 public ClusterGrenade(double radius, int cl)
316 : base(radius)
317 {
318 Mass = 20;
321 ClusterDirection = Angle.FromRadians(Math.PI / 2);
322 ClusterArc = Math.PI;
323 clusterlevel = cl - 1;
324 }
325
329 public override void Explode()
330 {
331 if (!IsAddedToGame) return;
332
333 Vector posOffset;
334 double direction;
335
336 base.Explode();
337
338 for (int i = 0; i < NumberOfClusters; i++)
339 {
340 double currentRadius = Width / 2;
341 double r = currentRadius * 0.6;
342 // TODO: The mass could be evenly distributed to the clusters and the main projectile.
343 Grenade g = (clusterlevel > 0) ?
344 new ClusterGrenade(r, clusterlevel - 1) : new Grenade(r);
345
347 posOffset = Vector.FromLengthAndAngle(2 + this.Size.Magnitude, Angle.FromRadians(direction));
348
349 g.Position = this.Position + posOffset;
350 g.Mass = this.Mass / NumberOfClusters;
351 g.Image = this.Image;
352 g.Color = this.Color;
353 g.FuseTime = this.FuseTime;
354 g.Explosion.Force = this.Explosion.Force / 2;
356 g.Explosion.Speed = this.Explosion.Speed / 2;
358 Game.Instance.Add(g);
359 }
360 }
361 }
362}
Rynnäkkökivääri.
AssaultRifle(double width, double height)
Alustaa uuden rynnäkkökiväärin.
override PhysicsObject CreateProjectile()
Luo uuden ammuksen
Bullet(double radius)
Alustaa uuden luodin.
CannonBall(double radius)
Alustaa uuden tykinkuulan.
Yksinkertainen tykki, joka ampuu kuulia tai muuta ammuksia.
Cannon(double width, double height)
Alustaa uuden tykin.
override PhysicsObject CreateProjectile()
Luo uuden ammuksen
Rypälepommi. Hajoaa räjähtäessään pienempiin osiin, jotka voivat edelleen räjähtää pienempiin osiin.
ClusterGrenade(double radius, int cl)
Alustaa uuden rypälepommin.
Angle ClusterDirection
Sirpaleiden hajontasuunta.
int NumberOfClusters
Sirpaleiden määrä, joka räjähdyksestä syntyy.
double ClusterArc
Sirpaleiden hajontakaari.
override void Explode()
Räjäyttää kranaatin sirpaleiksi.
double Force
Voima, jolla räjähdyksen paineaallon uloin reuna heittää olioita räjähdyksestä poispäin....
Definition: Explosion.cs:94
double MaxRadius
Suurin säde, johon räjähdys voi kasvaa.
Definition: Explosion.cs:54
Explosion(Explosion src)
Luo uuden räjähdyksen entisen pohjalta.
Definition: Explosion.cs:111
double Speed
Räjähdyksen leviämisnopeus (pikseliä sekunnissa)
Definition: Explosion.cs:88
double ExplosionForce
Räjähdyksen voima.
double ExplosionRadius
Räjähdyksen säde.
Grenade(double radius, TimeSpan fuseTime)
Luo uuden kranaatin.
bool Exploded
Onko kranaatti räjähtänyt
override void Update(Time time)
Peliolion päivitys. Tätä kutsutaan, kun IsUpdated-ominaisuuden arvoksi on asetettu true ja olio on li...
Grenade(double radius)
Luo uuden kranaatin, joka räjähtää kolmen sekunnin päästä.
TimeSpan FuseTime
Aika, jonka päästä ammus räjähtää itsestään.
virtual void Explode()
Räjäytä kranaatti.
Explosion Explosion
Räjähdys, joka kranaatista syntyy.
double ExplosionSpeed
Räjähdyksen nopeus.
LaserGun(double width, double height)
Alustaa uuden laser-tykin.
override PhysicsObject CreateProjectile()
Luo uuden ammuksen
override PhysicsObject CreateProjectile()
Luo uuden ammuksen
PlasmaCannon(double width, double height)
Alustaa uuden plasmakiväärin.
bool AmmoIgnoresExplosions
Jättävätkö panokset räjähdyksen paineaallot huomiotta.
Definition: Weapon.cs:91
DoubleMeter Power
Voima, jolla panos ammutaan. Nollautuu ammuttaessa.
Definition: Weapon.cs:61
bool AmmoIgnoresGravity
Jättävätkö panokset painovoiman huomiotta.
Definition: Weapon.cs:86
TimeSpan MaxAmmoLifetime
Ammuksen elinikä. TimeSpan.MaxValue jos ikuinen, TimeSpan.FromSeconds( 5 ) jos 5 sekuntia jne.
Definition: Weapon.cs:97
IntMeter Ammo
Panosten määrä.
Definition: Weapon.cs:66
TimeSpan TimeBetweenUse
Kuinka kauan kestää, että asetta voidaan käyttää uudestaan.
Definition: Weapon.cs:107
SoundEffect AttackSound
Hyökkäysääni (pistoolin pamaus jne.)
Definition: Weapon.cs:102
static Image LoadImageFromResources(string name)
Lataa kuvan Jypelin sisäisistä resursseista.
Definition: Content.cs:91
static SoundEffect LoadSoundEffectFromResources(string name)
Lataa ääniefektin Jypelin sisäisistä resursseista.
Definition: Content.cs:167
void Add(Light light)
Lisää valon peliin. Nykyisellään valoja voi olla ainoastaan yksi kappale. Toistaiseksi ei tuettu Wind...
Definition: Effects.cs:27
static Game Instance
Käynnissä olevan pelin pääolio.
Definition: Game.cs:96
override Vector?? Position
Definition: Dimensions.cs:72
bool IsAddedToGame
Onko olio lisätty peliin.
override void Destroy()
Tuhoaa olion. Tuhottu olio poistuu pelistä.
Definition: GameObject.cs:55
virtual Color Color
Väri, jonka värisenä olio piirretään, jos tekstuuria ei ole määritelty.
Definition: Appearance.cs:65
TimeSpan CreationTime
Olion luomisaika.
Image Image
Olion kuva. Voi olla null, jolloin piirretään vain väri.
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true,...
Kuva.
Definition: Image.cs:30
ValueType DefaultValue
Mittarin oletusarvo.
Definition: Meter.cs:153
A collision ignorer that uses reference comparison. All Bodies with the same instance of this ignorer...
Kappale joka noudattaa fysiikan lakeja, johon voi törmätä. Vaatii että käytössä on fysiikkapeli.
Definition: Collisions.cs:7
override Vector?? Position
Definition: Dimensions.cs:30
double Mass
Olion massa (paino). Mitä enemmän massaa, sitä enemmän voimaa tarvitaan saamaan olio liikkeelle / pys...
Definition: Inertia.cs:14
virtual Ignorer CollisionIgnorer
Olio, jolla voi välttää oliota osumasta tiettyihin muihin olioihin.
Definition: Collisions.cs:14
override Vector Size
Definition: Dimensions.cs:80
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
static Angle FromRadians(double radian)
Luo kulman annettujen radiaanien mukaan.
Definition: Angle.cs:315
double Radians
Palauttaa tai asettaa kulman radiaaneina.
Definition: Angle.cs:85
Väri.
Definition: Color.cs:13
static readonly Color Green
Vihreä.
Definition: Color.cs:701
static readonly Color Red
Punainen.
Definition: Color.cs:866
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
Definition: Time.cs:14
TimeSpan SinceStartOfGame
Aika joka on kulunut pelin alusta.
Definition: Time.cs:35
2D-vektori.
Definition: Vector.cs:67
static readonly Vector Zero
Nollavektori.
Definition: Vector.cs:71
static readonly Vector UnitX
Vaakasuuntainen yksikkövektori (pituus 1, suunta oikealle).
Definition: Vector.cs:81
double Magnitude
Vektorin pituus.
Definition: Vector.cs:345
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:114