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

Revision 7219, 3.8 KB checked in by sieerinn, 4 years ago (diff)

Raketinheitin tehty

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 RocketLauncher : AssaultRifle
19{
20    public Player Owner;
21
22    public RocketLauncher(double leveys, double korkeus, Image image, Player owner)
23        : base(leveys, korkeus)
24    {
25        Image = image;
26        AttackSound = null;
27        FireRate = 0.5;
28        Power.Value = 15;
29        Power.DefaultValue = 15;
30        Owner = owner;
31    }
32
33    protected override PhysicsObject CreateProjectile()
34    {
35        var rocket = new Bullet(15);
36        rocket.Shape = Shape.Rectangle;
37        rocket.MaxVelocity = 1000;
38        rocket.Color = Owner.Color;
39
40        ((Punasininen)Game.Instance).AddCollisionHandler(rocket, (PhysicsObject a, PhysicsObject b) =>
41        {
42            if (b is Tile)
43            {
44                ((Punasininen)Game).ColorTile(Owner, (Tile)b);
45            }
46        });
47
48        var updateTimer = new Timer();
49        updateTimer.Interval = 0.01;
50        updateTimer.Timeout += () =>
51        {
52            rocket.Velocity *= 1.03;
53
54            var particle = new PhysicsObject(8, 8);
55            particle.IgnoresCollisionResponse = true;
56            particle.IgnoresGravity = true;
57            particle.Color = rocket.Color;
58            particle.Position = rocket.Position;
59            particle.LifetimeLeft = TimeSpan.FromSeconds(0.5);
60            particle.FadeColorTo(Color.Black, 0.5);
61            var angle = (-rocket.Velocity).Angle + Angle.FromDegrees(RandomGen.NextDouble(-30, 30));
62            particle.Velocity = Vector.FromLengthAndAngle(RandomGen.NextDouble(50,300), angle);
63            Game.Instance.Add(particle);
64        };
65        updateTimer.Start();
66
67        var explosionTimer = new Timer();
68        explosionTimer.Interval = 10;
69        explosionTimer.Timeout += () =>
70        {
71            updateTimer.Stop();
72            explosionTimer.Stop();
73            rocket.Destroy();
74
75            var explosion = new Explosion(100);
76            explosion.Position = rocket.Position;
77            explosion.ShockwaveColor = Owner.Color;
78            explosion.MaxRadius = 150;
79            explosion.Speed = 500;
80            explosion.Sound = null;
81            explosion.ShockwaveReachesObject += (IPhysicsObject a, Vector b) =>
82            {
83                if (a is Tile)
84                {
85                    ((Punasininen)Game).ColorTile(Owner, (Tile)a);
86                }
87            };
88            ((Punasininen)Game.Instance).Add(explosion);
89        };
90        explosionTimer.Start();
91
92        return rocket;
93    }
94}
95
96class GrenadeLauncher : Weapon
97{
98    public Player Owner;
99
100    protected override PhysicsObject CreateProjectile()
101    {
102        Grenade test = new Grenade(10, TimeSpan.FromSeconds(1));
103        test.Explosion.ShockwaveColor = Owner.Color;
104        test.Explosion.MaxRadius = 300;
105        test.Explosion.Speed = 1000;
106        test.Explosion.Sound = null;
107        test.Explosion.ShockwaveReachesObject += delegate(IPhysicsObject a, Vector b) 
108        {
109            if (a is Tile)
110            {
111                ((Punasininen)Game).ColorTile(test, (Tile)a);
112            }
113        };
114        Timer.SingleShot(1, () => ((Punasininen)Game.Instance).NewWave(test.Position));
115        return test;
116    }
117
118    public GrenadeLauncher(double leveys, double korkeus, Image image, Player owner)
119        : base(leveys, korkeus)
120    {
121        Image = image;
122        AttackSound = null;
123        FireRate = 1;
124        Power.DefaultValue = 30000;
125        Owner = owner;
126       
127    }
128}
Note: See TracBrowser for help on using the repository browser.