source: 2016/23/ohjaajat/Punasininen/Punasininen/Punasininen/WeaponCrate.cs @ 7224

Revision 7224, 5.0 KB checked in by sieerinn, 5 years ago (diff)

Loppusäädöt

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class WeaponCrate : PhysicsObject
10{
11    public WeaponCrate(double leveys, double korkeus)
12        : base(leveys, korkeus)
13    {
14        Tag = "crate";
15    }
16}
17
18class SprayGun : LaserGun
19{
20    private Image glowImage;
21
22    public SprayGun(double leveys, double korkeus, Image image, Image glowImage, Player owner)
23        : base(leveys, korkeus)
24    {
25        this.glowImage = glowImage;
26        Image = image;
27        ProjectileCollision = (PhysicsObject a, PhysicsObject b) =>
28        {
29            ((Punasininen)Game).ColorTile(a, b); a.Destroy();
30        };
31        AttackSound = null;
32        MaxAmmoLifetime = TimeSpan.FromSeconds(4);
33    }
34
35    protected override PhysicsObject CreateProjectile()
36    {
37        var bullet = base.CreateProjectile();
38        var glow = new GameObject(100, 100);
39        glow.Image = glowImage;
40        bullet.Add(glow);
41        return bullet;
42    }
43}
44
45class RocketLauncher : AssaultRifle
46{
47    public Player Owner;
48
49    private Image glowImage;
50
51    public RocketLauncher(double leveys, double korkeus, Image image, Image glowImage, Player owner)
52        : base(leveys, korkeus)
53    {
54        this.glowImage = glowImage;
55        Image = image;
56        AttackSound = null;
57        FireRate = 0.5;
58        Power.Value = 15;
59        Power.DefaultValue = 15;
60        Owner = owner;
61    }
62
63    protected override PhysicsObject CreateProjectile()
64    {
65        var rocket = new Bullet(15);
66        rocket.Shape = Shape.Rectangle;
67        rocket.MaxVelocity = 1000;
68        rocket.Color = Owner.Color;
69
70        var rocketGlow = new GameObject(300, 300);
71        rocketGlow.Image = glowImage;
72        Game.Instance.Add(rocketGlow);
73
74        ((Punasininen)Game.Instance).AddCollisionHandler(rocket, (PhysicsObject a, PhysicsObject b) =>
75        {
76            if (b is Tile)
77            {
78                ((Punasininen)Game).ColorTile(Owner, (Tile)b);
79            }
80        });
81
82        var updateTimer = new Timer();
83        updateTimer.Interval = 0.01;
84        updateTimer.Timeout += () =>
85        {
86            rocketGlow.Position = rocket.Position;
87            rocket.Velocity *= 1.03;
88
89            var particle = new PhysicsObject(8, 8);
90            particle.IgnoresCollisionResponse = true;
91            particle.IgnoresGravity = true;
92            particle.Color = rocket.Color;
93            particle.Position = rocket.Position;
94            particle.LifetimeLeft = TimeSpan.FromSeconds(0.5);
95            particle.FadeColorTo(Color.Black, 0.5);
96            var angle = (-rocket.Velocity).Angle + Angle.FromDegrees(RandomGen.NextDouble(-30, 30));
97            particle.Velocity = Vector.FromLengthAndAngle(RandomGen.NextDouble(50,300), angle);
98            Game.Instance.Add(particle);
99        };
100        updateTimer.Start();
101
102        var explosionTimer = new Timer();
103        explosionTimer.Interval = 10;
104        explosionTimer.Timeout += () =>
105        {
106            updateTimer.Stop();
107            explosionTimer.Stop();
108            rocket.Destroy();
109            rocketGlow.Destroy();
110
111            var explosion = new Explosion(100);
112            explosion.Position = rocket.Position;
113            explosion.ShockwaveColor = Owner.Color;
114            explosion.MaxRadius = 150;
115            explosion.Speed = 500;
116            explosion.Sound = null;
117            explosion.ShockwaveReachesObject += (IPhysicsObject a, Vector b) =>
118            {
119                if (a is Tile)
120                {
121                    ((Punasininen)Game).ColorTile(Owner, (Tile)a);
122                }
123            };
124            ((Punasininen)Game.Instance).Add(explosion);
125        };
126        explosionTimer.Start();
127
128        return rocket;
129    }
130}
131
132class GrenadeLauncher : Weapon
133{
134    public Player Owner;
135
136    private Image glowImage;
137
138    public GrenadeLauncher(double leveys, double korkeus, Image image, Image glowImage, Player owner)
139        : base(leveys, korkeus)
140    {
141        this.glowImage = glowImage;
142        Image = image;
143        AttackSound = null;
144        FireRate = 1;
145        Power.DefaultValue = 30000;
146        Owner = owner; 
147    }
148
149    protected override PhysicsObject CreateProjectile()
150    {
151        Grenade grenade = new Grenade(10, TimeSpan.FromSeconds(1));
152        grenade.Explosion.ShockwaveColor = Owner.Color;
153        grenade.Explosion.MaxRadius = 300;
154        grenade.Explosion.Speed = 1000;
155        grenade.Explosion.Sound = null;
156        grenade.Explosion.ShockwaveReachesObject += delegate(IPhysicsObject a, Vector b) 
157        {
158            if (a is Tile)
159            {
160                ((Punasininen)Game).ColorTile(grenade, (Tile)a);
161            }
162        };
163        Timer.SingleShot(1, () => ((Punasininen)Game.Instance).NewWave(grenade.Position));
164
165        var glow = new GameObject(400, 400);
166        glow.Image = glowImage;
167        grenade.Add(glow);
168
169        return grenade;
170    }
171
172}
Note: See TracBrowser for help on using the repository browser.