source: 2013/26/OtsoR/Projekti/Projekti/Projekti/Projekti.cs @ 4278

Revision 4278, 28.7 KB checked in by juiitamm, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Player : PhysicsObject
10{
11    private IntMeter health = new IntMeter(100, 0, 100);
12    public IntMeter Health { get { return health; } }
13    public Color Color1;
14    public Color Color2;
15
16    public Image cannonImage;
17
18    public Player(double width, double height, Shape shape)
19        : base(width, height, shape)
20    {
21        ProgressBar playerhealth = new ProgressBar(8, 3);
22        playerhealth.BindTo(health);
23        playerhealth.BarColor = Color.SpringGreen;
24        playerhealth.BorderColor = Color.Red;
25        playerhealth.X = -8;
26        playerhealth.Angle = Angle.RightAngle;
27        Add(playerhealth);
28        health.LowerLimit += delegate
29        {
30            this.Destroy();
31        };
32    }
33}
34class Enemy : PhysicsObject
35{
36    private IntMeter health = new IntMeter(5, 0, 5);
37    public IntMeter Health { get { return health; } }
38
39    public Enemy(double leveys, double korkeus, Shape muoto)
40        : base(leveys, korkeus, muoto)
41    {
42        ProgressBar enemyhealth = new ProgressBar(6, 2.5);
43        enemyhealth.BindTo(health);
44        enemyhealth.X = -8;
45        enemyhealth.Angle = Angle.RightAngle;
46        Add(enemyhealth);
47        health.LowerLimit += delegate
48        {
49            this.Destroy();
50        };
51    }
52}
53class BigEnemy : PhysicsObject
54{
55    private IntMeter health = new IntMeter(100, 0, 100);
56    public IntMeter Health { get { return health; } }
57
58    public BigEnemy(double leveys, double korkeus, Shape muoto)
59        : base(leveys, korkeus, muoto)
60    {
61        ProgressBar enemyhealth = new ProgressBar(6, 2.5);
62        enemyhealth.BindTo(health);
63        enemyhealth.X = -20;
64        enemyhealth.Angle = Angle.RightAngle;
65        Add(enemyhealth);
66        health.LowerLimit += delegate
67        {
68            this.Destroy();
69        };
70    }
71}
72public class Projekti : PhysicsGame
73{
74    Image[] shipimages = new Image[100];
75    Color[] shipcolors = { Color.DarkGray, Color.Silver, Color.DarkOrange, Color.Blue };
76    Color[] shipcolors2 = { Color.Ruby, Color.Azure, Color.Emerald, Color.Orange };
77    Image bigenemy = LoadImage("bigenemy");
78    Image shell = LoadImage("bullet");
79    Image pointer = LoadImage("pointer");
80    Image rdamage = LoadImage("rdamage");
81    Image rrepair = LoadImage("rrepair");
82    Image homing = LoadImage("missile");
83
84    String[] weaponnames = { "projectile", "laser", "plasma", "missile" };
85
86    PhysicsObject topedge;
87    PhysicsObject bottomedge;
88    PhysicsObject leftedge;
89    PhysicsObject rightedge;
90
91    Player ship1;
92    Weapon weapon;
93    Player ship2;
94    Weapon weapon2;
95    //PhysicsObject hostile;
96    Weapon hostilew;
97    GameObject line;
98    PhysicsObject ammus;
99
100    Label number;
101    Label number2;
102    Label colour;
103    Label weaponlabel;
104    Label weaponlabel2;
105    Widget aluskuva;
106    Widget aluskuva2;
107    IntMeter shipimg;
108    IntMeter shipcolor1;
109    IntMeter shipwpn;
110    IntMeter shipimg2;
111    IntMeter shipcolor2;
112    IntMeter shipWeapon2;
113    int shipcounter;
114    int bigshipcounter;
115    int bosscounter;
116    int runecounter;
117    public override void Begin()
118    {
119        for (int i = 1; i <= 100; i++)
120        {
121            shipimages[i - 1] = LoadImage("s" + i);
122        }
123        IsMouseVisible = true;
124        MultiSelectWindow numberofplayersmenu = new MultiSelectWindow("Select number of players", "1 Player", "2 Players", "Quit");
125        numberofplayersmenu.ItemSelected += mainmenu;
126        Add(numberofplayersmenu);
127    }
128    void mainmenu(int choice)
129    {
130        switch (choice)
131        {
132            case 0:
133                ClearAll();
134                singleplayer();
135                break;
136            case 1:
137                ClearAll();
138                coop();
139                break;
140            case 2:
141                Exit();
142                break;
143        }
144    }
145
146    void singleplayer()
147    {
148        aluskuva = new Widget(50, 50);
149        aluskuva.X = 0;
150        aluskuva.Y = 250;
151        aluskuva.Image = shipimages[0];
152        Add(aluskuva);
153
154        shipimg = new IntMeter(1, 1, 100);
155        shipimg.Changed += Changeship1;
156        shipwpn = new IntMeter(1, 1, 4);
157        shipwpn.Changed += delegate { weaponlabel.Text = weaponnames[shipwpn.Value - 1]; };
158        shipcolor1 = new IntMeter(0, 0, 3);
159        shipcolor1.Changed += Changeship1;
160
161        number = new Label();
162        number.BindTo(shipimg);
163        number.X = 0;
164        number.Y = 300;
165        Add(number);
166
167        colour = new Label("style");
168        colour.X = -125;
169        colour.Y = 125;
170        Add(colour);
171
172        weaponlabel = new Label(weaponnames[0]);
173        weaponlabel.X = 125;
174        weaponlabel.Y = 125;
175        Add(weaponlabel);
176
177        Slider shiptype = new Slider(550, 10);
178        shiptype.X = 0;
179        shiptype.Y = 200;
180        shiptype.BindTo(shipimg);
181        Slider shipcolour = new Slider(125, 15);
182        shipcolour.X = -125;
183        shipcolour.Y = 150;
184        shipcolour.BindTo(shipcolor1);
185        Slider shipweapon = new Slider(125, 15);
186        shipweapon.X = 125;
187        shipweapon.Y = 150;
188        shipweapon.BindTo(shipwpn);
189
190        Add(shiptype);
191        Add(shipcolour);
192        Add(shipweapon);
193
194        List<Label> valikonKohdat;
195        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
196        Label kohta1 = new Label("Start");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
197        kohta1.Position = new Vector(0, -100);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
198        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
199        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
200        foreach (Label valikonKohta in valikonKohdat)
201        {
202            Add(valikonKohta);
203        }
204        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, singleplayerbase, null);
205    }
206
207    void Changeship1(int vanha, int uusi)
208    {
209        aluskuva.Image = shipimages[shipimg.Value - 1].Clone();
210        aluskuva.Image.ReplaceColor(Color.White, shipcolors[shipcolor1.Value]);
211        aluskuva.Image.ReplaceColor(Color.Black, shipcolors2[shipcolor1.Value]);
212    }
213    void Changeship2(int vanha, int uusi)
214    {
215        aluskuva2.Image = shipimages[shipimg2.Value - 1].Clone();
216        aluskuva2.Image.ReplaceColor(Color.White, shipcolors[shipcolor2.Value]);
217        aluskuva2.Image.ReplaceColor(Color.Black, shipcolors2[shipcolor2.Value]);
218    }
219
220    void Createship(double x, double y)
221    {
222        ship1 = new Player(14, 14, Shape.FromImage(aluskuva.Image));
223        ship1.Image = aluskuva.Image;
224
225        ship1.Restitution = 1.0;
226        ship1.Color1 = shipcolors[shipcolor1.Value];
227        ship1.Color2 = shipcolors2[shipcolor1.Value];
228        ship1.cannonImage = LoadImage("missile");
229        ship1.cannonImage.ReplaceColor(Color.White, ship1.Color1);
230        ship1.cannonImage.ReplaceColor(Color.Black, ship1.Color2);
231
232        ship1.X = x;
233        ship1.Y = y;
234        ship1.KineticFriction = 0.0;
235        ship1.MomentOfInertia = Double.PositiveInfinity;
236        ship1.LinearDamping = 0.95;
237        ship1.AngularDamping = 0.95;
238        Add(ship1);
239        choice(shipwpn.Value);
240        ship1.Add(weapon);
241        ship1.CollisionIgnoreGroup = 1;
242        ship1.Tag = "player";
243        ship1.Destroyed += playerdeath;
244        if (weapon is LaserGun)
245        {
246            line = new GameObject(5000, 1.25);
247            line.Image = pointer;
248            line.X = 2500;
249            ship1.Add(line);
250        }
251    }
252    void Createship2(double x, double y)
253    {
254        ship2 = new Player(14, 14, Shape.FromImage(aluskuva2.Image));
255        ship2.Image = aluskuva2.Image;
256        ship2.X = x;
257        ship2.Y = y;
258        ship2.Color1 = shipcolors[shipcolor2.Value];
259        ship2.Color2 = shipcolors2[shipcolor2.Value];
260        ship2.cannonImage = LoadImage("missile");
261        ship2.cannonImage.ReplaceColor(Color.White, ship2.Color1);
262        ship2.cannonImage.ReplaceColor(Color.Black, ship2.Color2);
263
264        ship2.Restitution = 1.0;
265        ship2.KineticFriction = 0.0;
266        ship2.MomentOfInertia = Double.PositiveInfinity;
267        ship2.LinearDamping = 0.95;
268        ship2.AngularDamping = 0.95;
269        Add(ship2);
270        choice2(shipWeapon2.Value);
271        ship2.Add(weapon2);
272        ship2.CollisionIgnoreGroup = 1;
273        ship2.Tag = "player";
274        ship2.Destroyed += playerdeath;
275        if (weapon is LaserGun)
276        {
277            line = new GameObject(5000, 1.25);
278            line.Image = pointer;
279            line.X = 2500;
280            ship1.Add(line);
281        }
282    }
283    void Spawnhostiles()
284    {
285        while (shipcounter < 39)
286        {
287        int hostileship = RandomGen.NextInt(0, 100);
288        double hostiley = 0.0;
289        double hostilex = 0.0;
290        if (RandomGen.NextBool())
291        {
292            hostiley = Level.Bottom + 2 * Level.Top * RandomGen.NextInt(0, 2);
293            hostilex = RandomGen.NextDouble(Level.Left, Level.Right);
294        }
295        else
296        {
297            hostiley = RandomGen.NextDouble(Level.Bottom, Level.Top);
298            hostilex = Level.Left + 2 * Level.Right * RandomGen.NextInt(0, 2);
299        }
300        Createhostile(hostileship, hostiley, hostilex);
301        shipcounter++;
302        }
303        while (bigshipcounter < 4)
304        {
305            double bighostiley = 0.0;
306            double bighostilex = 0.0;
307            if (RandomGen.NextBool())
308            {
309                bighostiley = Level.Bottom + 2 * Level.Top * RandomGen.NextInt(0, 2);
310                bighostilex = RandomGen.NextDouble(Level.Left, Level.Right);
311            }
312            else
313            {
314                bighostiley = RandomGen.NextDouble(Level.Bottom, Level.Top);
315                bighostilex = Level.Left + 2 * Level.Right * RandomGen.NextInt(0, 2);
316            }
317            Createbighostile(bighostiley, bighostilex);
318            bigshipcounter++;
319        }
320    }
321    void Createhostile(int randomship, double randomy, double randomx)
322    {
323        Enemy hostile = new Enemy(14, 14, Shape.FromImage(shipimages[randomship]));
324        hostile.Image = shipimages[randomship];
325        hostile.Y = randomy;
326        hostile.X = randomx;
327        hostile.Restitution = 1.0;
328        hostile.KineticFriction = 0.0;
329        hostile.MomentOfInertia = Double.PositiveInfinity;
330        hostile.LinearDamping = 0.95;
331        hostile.AngularDamping = 1;
332        hostile.Tag = "hostile";
333        hostile.Health.MaxValue = 5;
334        hostile.Health.Value = 5;
335        hostile.CollisionIgnoreGroup = 2;
336        hostile.Image.ReplaceColor(Color.White, Color.Ultramarine);
337        hostile.Image.ReplaceColor(Color.Black, Color.Green);
338        Add(hostile);
339
340        hostile.Destroyed += enemydeath;
341
342        AssaultRifle hostilew = new AssaultRifle(0, 0);
343        hostilew.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 10, 0); };
344        hostilew.FireRate = 0.5;
345        hostilew.Power.DefaultValue = 15;
346        hostilew.Power.Value = 15;
347        hostile.Add(hostilew);
348
349        FollowerBrain brain = new FollowerBrain("player");
350        brain.Speed = 20;
351        brain.DistanceFar = 10000;
352        brain.DistanceClose = 125;
353        brain.StopWhenTargetClose = false;
354        brain.TargetClose += delegate { fire(hostilew, null); };
355        brain.TurnWhileMoving = true;
356        hostile.Brain = brain;
357    }
358    void Createbighostile(double y, double x)
359    {
360        Enemy Big1 = new Enemy(50, 28, Shape.FromImage(bigenemy));
361        Big1.Image = bigenemy;
362        Big1.X = x;
363        Big1.Y = y;
364        Big1.Restitution = 1.0;
365        Big1.KineticFriction = 0.0;
366        Big1.MomentOfInertia = Double.PositiveInfinity;
367        Big1.LinearDamping = 0.95;
368        Big1.AngularDamping = 1;
369        Big1.Tag = "hostile";
370        Big1.Health.MaxValue = 40;
371        Big1.Health.Value = 40;
372        Big1.CollisionIgnoreGroup = 2;
373        Big1.Image.ReplaceColor(Color.White, Color.Ultramarine);
374        Big1.Image.ReplaceColor(Color.Black, Color.Green);
375        Add(Big1);
376        Big1.Destroyed += bigenemydeath;
377
378        Cannon Big1w = new Cannon(0, 0);
379        Big1w.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 3, 0); };
380        Big1w.FireRate = 0.3;
381        Big1w.CanHitOwner = false;
382        Big1w.Power.DefaultValue = 1500;
383        Big1w.Power.Value = 1500;
384        Big1.Add(Big1w);
385
386        FollowerBrain bigbrain = new FollowerBrain("player");
387        bigbrain.Speed = 15;
388        bigbrain.DistanceFar = 10000;
389        bigbrain.DistanceClose = 325;
390        bigbrain.TurnSpeed = UnlimitedAngle.FromDegrees(25);
391        bigbrain.StopWhenTargetClose = false;
392        bigbrain.TargetClose += delegate { firehoming(Big1w); };
393        bigbrain.TurnWhileMoving = true;
394        Big1.Brain = bigbrain;
395    }
396    void playerdeath()
397    {
398        MessageDisplay.Add("Ship lost");
399        //MediaPlayer.Play("playerdeath");
400    }
401    void enemydeath()
402    {
403        shipcounter--;
404    }
405    void bigenemydeath()
406    {
407        bigshipcounter--;
408    }
409    void boss1death()
410    {
411    }
412    void boss2death()
413    {
414    }
415    void createedges()
416    {
417        PhysicsObject leftedge = Level.CreateLeftBorder();
418        leftedge.Restitution = 1.0;
419        leftedge.KineticFriction = 0.0;
420        leftedge.IsVisible = false;
421        leftedge.CollisionIgnoreGroup = 2;
422        PhysicsObject rightedge = Level.CreateRightBorder();
423        rightedge.Restitution = 1.0;
424        rightedge.KineticFriction = 0.0;
425        rightedge.IsVisible = false;
426        rightedge.CollisionIgnoreGroup = 2;
427        PhysicsObject topedge = Level.CreateTopBorder();
428        topedge.Restitution = 1.0;
429        topedge.KineticFriction = 0.0;
430        topedge.IsVisible = false;
431        topedge.CollisionIgnoreGroup = 2;
432        PhysicsObject bottomedge = Level.CreateBottomBorder();
433        bottomedge.Restitution = 1.0;
434        bottomedge.IsVisible = false;
435        bottomedge.KineticFriction = 0.0;
436        topedge.CollisionIgnoreGroup = 2;
437    }
438    void coop()
439    {
440        aluskuva = new Widget(50, 50);
441        aluskuva.X = -300;
442        aluskuva.Y = 250;
443        aluskuva.Image = shipimages[0];
444        Add(aluskuva);
445
446        aluskuva2 = new Widget(50, 50);
447        aluskuva2.X = 300;
448        aluskuva2.Y = 250;
449        aluskuva2.Image = shipimages[0];
450        Add(aluskuva2);
451
452        shipimg = new IntMeter(1, 1, 100);
453        shipimg.Changed += Changeship1;
454        shipwpn = new IntMeter(1, 1, 4);
455        shipwpn.Changed += delegate { weaponlabel.Text = weaponnames[shipwpn.Value - 1]; };
456
457        Slider shipColorP1 = new Slider(125, 15);
458        shipColorP1.X = -425;
459        shipColorP1.Y = 150;
460        shipcolor1 = new IntMeter(0, 0, 3);
461        shipcolor1.Changed += Changeship1;
462        shipColorP1.BindTo(shipcolor1);
463
464        Slider shipcolour2 = new Slider(125, 15);
465        shipcolour2.X = 225;
466        shipcolour2.Y = 150;
467        shipcolor2 = new IntMeter(0, 0, 3);
468        shipcolor2.Changed += Changeship2;
469        shipcolour2.BindTo(shipcolor2); 
470               
471        shipimg2 = new IntMeter(1, 1, 100);
472        shipimg2.Changed += Changeship2;
473        shipWeapon2 = new IntMeter(1, 1, 4);
474        shipWeapon2.Changed += delegate
475        {
476            weaponlabel2.Text = weaponnames[shipWeapon2.Value - 1];
477        };
478        number = new Label();
479        number.BindTo(shipimg);
480        number.X = -300;
481        number.Y = 300;
482        Add(number);
483
484        number2 = new Label();
485        number2.BindTo(shipimg2);
486        number2.X = 300;
487        number2.Y = 300;
488        Add(number2);
489
490        weaponlabel = new Label(weaponnames[0]);
491        weaponlabel.X = -225;
492        weaponlabel.Y = 125;
493        Add(weaponlabel);
494        weaponlabel2 = new Label(weaponnames[0]);
495        weaponlabel2.X = 425;
496        weaponlabel2.Y = 125;
497        Add(weaponlabel2);
498
499        Slider shiptype = new Slider(550, 10);
500        shiptype.X = -300;
501        shiptype.Y = 200;
502        shiptype.BindTo(shipimg);
503       
504        Slider shipweapon = new Slider(125, 15);
505        shipweapon.X = -225;
506        shipweapon.Y = 150;
507        shipweapon.BindTo(shipwpn);
508
509        Slider shiptype2 = new Slider(550, 10);
510        shiptype2.X = 300;
511        shiptype2.Y = 200;
512        shiptype2.BindTo(shipimg2);
513       
514        Slider shipweapon2 = new Slider(125, 15);
515        shipweapon2.X = 425;
516        shipweapon2.Y = 150;
517        shipweapon2.BindTo(shipWeapon2);
518        Add(shiptype);
519        Add(shipColorP1);
520        Add(shipweapon);
521        Add(shiptype2);
522        Add(shipcolour2);
523        Add(shipweapon2);
524        List<Label> valikonKohdat2;
525        valikonKohdat2 = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
526        Label kohta2 = new Label("Start");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
527        kohta2.Position = new Vector(0, -100);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
528        valikonKohdat2.Add(kohta2);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
529        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
530        foreach (Label valikonKohta2 in valikonKohdat2)
531        {
532            Add(valikonKohta2);
533        }
534        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, coopbase, null);
535    }
536    void choice(int choice)
537    {
538        switch (choice)
539        {
540            case 1:
541                weapon = new AssaultRifle(0, 0);
542                weapon.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 1); };
543                weapon.FireRate = 4.5;
544                weapon.Power.Value = 25;
545                weapon.Power.DefaultValue = 25;
546                break;
547            case 2:
548                weapon = new LaserGun(0, 0);
549                weapon.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 5); };
550                weapon.FireRate = 0.8;
551                weapon.Power.DefaultValue = 100;
552                weapon.Power.Value = 100;
553                break;
554            case 3:
555                weapon = new PlasmaCannon(0, 0);
556                weapon.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 3); };
557                weapon.FireRate = 1.5;
558                weapon.Power.Value = 400;
559                weapon.Power.DefaultValue = 400;
560                break;
561            case 4:
562                weapon = new Cannon(0, 0);
563                weapon.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 5); };
564                weapon.FireRate = 0.8;
565                weapon.Power.DefaultValue = 1500;
566                weapon.Power.Value = 1500;
567                break;
568        }
569    }
570    void choice2(int choice)
571    {
572        switch (choice)
573        {
574            case 1:
575                weapon2 = new AssaultRifle(0, 0);
576                weapon2.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 1); };
577                weapon2.FireRate = 4.5;
578                weapon2.Power.Value = 25;
579                weapon2.Power.DefaultValue = 25;
580                break;
581            case 2:
582                weapon2 = new LaserGun(0, 0);
583                weapon2.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 5); };
584                weapon2.FireRate = 1;
585                weapon2.Power.DefaultValue = 1000;
586                weapon2.Power.Value = 1000;
587                break;
588            case 3:
589                weapon2 = new PlasmaCannon(0, 0);
590                weapon2.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 3); };
591                weapon2.FireRate = 1.5;
592                weapon2.Power.Value = 400;
593                weapon2.Power.DefaultValue = 400;
594                break;
595            case 4:
596                weapon2 = new Cannon(0, 0);
597                weapon2.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { weaponhit(ammus, kohde, 0, 5); };
598                weapon2.FireRate = 0.8;
599                weapon2.Power.DefaultValue = 1500;
600                weapon2.Power.Value = 1500;
601                break;
602        }
603    }
604    void fire(Weapon ase, Player ship)
605    {
606        PhysicsObject ammus = ase.Shoot();
607        if (ammus != null)
608        {
609            //Add(ammus, 2);
610            //ammus.Size *= ;
611            //ammus.Image = ...;
612            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
613            ammus.MaximumLifetime = TimeSpan.FromSeconds(10.0);
614            if (ase is AssaultRifle)
615            {
616                ammus.IgnoresCollisionResponse = true;
617                ammus.Image = shell;
618                ammus.Size *= 0.4;
619                ammus.CollisionIgnoreGroup = 4;
620                AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
621            }
622            if (ase is LaserGun)
623            {
624                ammus.Size *= 2;
625                ammus.IgnoresCollisionResponse = true;
626                ammus.Tag = "laser";
627            }
628            if (ase is PlasmaCannon)
629            {
630                ammus.Size *= 0.9;
631                AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
632                ammus.IgnoresCollisionResponse = true;
633                ammus.CollisionIgnoreGroup = 3;
634            }
635            if (ase is Cannon)
636            {
637                ammus.Size *= 0.8;
638                // ammus.Image = homing;
639                ammus.Image = ship.cannonImage;
640                AddCollisionHandler(ammus, missilehit);
641                ammus.AngularDamping = 1.0;
642                ammus.IgnoresCollisionResponse = true;
643
644                FollowerBrain ammusbrain = new FollowerBrain("hostile", "laser");
645                //ammusbrain.DistanceFar = 125;
646                ammusbrain.DistanceFar = 50;
647                ammusbrain.Speed = 80;
648                ammusbrain.TurnSpeed = UnlimitedAngle.FromDegrees(360);
649                ammusbrain.StopWhenTargetClose = false;
650                ammusbrain.TurnWhileMoving = true;
651                ammus.Brain = ammusbrain;
652            }
653        }
654    }
655    void missilehit(PhysicsObject tormaaja, PhysicsObject kohde)
656    {
657        tormaaja.Destroy();
658        Explosion missilecrash = new Explosion(8);
659        missilecrash.Position = tormaaja.Position;
660        missilecrash.UseShockWave = false;
661        Add(missilecrash);
662    }
663    void firehoming(Weapon ase)
664    {
665        PhysicsObject ammus = ase.Shoot();
666        if (ammus != null)
667        {
668            //Add(ammus, 2);
669            //ammus.Size *= ;
670            //ammus.Image = ...;
671            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
672            ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
673            ammus.Image = homing;
674            AddCollisionHandler(ammus, missilehit);
675            ammus.IgnoresCollisionResponse = true;
676            ammus.Size *= 0.8;
677            ammus.AngularDamping = 1.0;
678            ammus.Image.ReplaceColor(Color.White, Color.Ultramarine);
679            ammus.Image.ReplaceColor(Color.Black, Color.Green);
680            AddCollisionHandler(ammus, "player1", CollisionHandler.DestroyObject);
681            FollowerBrain ammusbrain = new FollowerBrain("player", "laser");
682            //ammusbrain.DistanceFar = 125;
683            ammusbrain.DistanceFar = 50;
684            ammusbrain.Speed = 80;
685            ammusbrain.TurnSpeed = UnlimitedAngle.FromDegrees(360);
686            ammusbrain.StopWhenTargetClose = false;
687            ammusbrain.TurnWhileMoving = true;
688            ammus.Brain = ammusbrain;
689        }
690    }
691    void weaponhit(PhysicsObject ammus, PhysicsObject kohde, int playerDamage, int enemyDamage)
692    {
693        if (kohde.Tag == "player")
694        {
695            Player ship = kohde as Player;
696            //ship.Health.Value -= 3;
697            ship.Health.Value -= playerDamage;
698        }
699        if (kohde.Tag == "hostile")
700        {
701            Enemy ship = kohde as Enemy;
702            //ship.Health.Value -= 1;
703            ship.Health.Value -= enemyDamage;
704        }
705    }
706    void Controlsship()
707    {
708        Keyboard.Listen(Key.W, ButtonState.Down, movement, null, 0, 100, ship1);
709        Keyboard.Listen(Key.S, ButtonState.Down, movement, null, 0, -100, ship1);
710        Keyboard.Listen(Key.A, ButtonState.Down, movement, null, -100, 0, ship1);
711        Keyboard.Listen(Key.D, ButtonState.Down, movement, null, 100, 0, ship1);
712        Keyboard.Listen(Key.Space, ButtonState.Down, fire, "", weapon, ship1);
713        Mouse.ListenMovement(0, Aim, null, ship1);
714        Mouse.Listen(MouseButton.Left, ButtonState.Down, fire, null, weapon, ship1);
715        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
716    }
717    void Aim(AnalogState hiirenLiike, Player ship)
718    {
719        Vector suunta = (Mouse.PositionOnWorld - ship.AbsolutePosition).Normalize();
720        ship.Angle = suunta.Angle;
721    }
722    void movement(int x, int y, PhysicsObject ship)
723    {
724        ship.Push(new Vector(x, y));
725    }
726    void Controlsship1()
727    {
728        Keyboard.Listen(Key.W, ButtonState.Down, thrust, "", 1.0, ship1);
729        Keyboard.Listen(Key.S, ButtonState.Down, thrust, "", -1.0, ship1);
730        Keyboard.Listen(Key.A, ButtonState.Down, tilt, "", 1.0, ship1);
731        Keyboard.Listen(Key.D, ButtonState.Down, tilt, "", -1.0, ship1);
732        Keyboard.Listen(Key.Space, ButtonState.Down, fire, "", weapon, ship1);
733        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
734    }
735    void Controlsship2()
736    {
737        Keyboard.Listen(Key.NumPad8, ButtonState.Down, thrust, "", 1.0, ship2);
738        Keyboard.Listen(Key.NumPad5, ButtonState.Down, thrust, "", -1.0, ship2);
739        Keyboard.Listen(Key.NumPad4, ButtonState.Down, tilt, "", 1.0, ship2);
740        Keyboard.Listen(Key.NumPad6, ButtonState.Down, tilt, "", -1.0, ship2);
741        Keyboard.Listen(Key.Add, ButtonState.Down, fire, "", weapon2, ship2);
742    }
743    void thrust(double direction, Player ship)
744    {
745        Vector shipdirection = Vector.FromLengthAndAngle(100.0 * direction, ship.Angle);
746        ship.Push(shipdirection);
747    }
748    void tilt(double direction, Player ship)
749    {
750        ship.AngularAcceleration = 10.0 * direction;
751    }
752    void singleplayerbase()
753    {
754        ClearAll();
755        Level.Background.CreateStars();
756        Level.CreateBorders();
757        Camera.ZoomToLevel();
758        Createship(0, 0);
759        Spawnhostiles();
760        Controlsship();
761
762        Timer a = new Timer();
763        a.Interval = 8;
764        a.Timeout += Spawnhostiles;
765        a.Start();
766    }
767
768    void coopbase()
769    {
770        ClearAll();
771        Level.Background.CreateStars();
772        Level.CreateBorders();
773        Camera.ZoomToLevel();
774        Createship(-100, 0);
775        Createship2(100, 0);
776        Spawnhostiles();
777        Controlsship1();
778        Controlsship2();
779
780        Timer a = new Timer();
781        a.Interval = 8;
782        a.Timeout += Spawnhostiles;
783        a.Start();
784    }
785
786    void Spawnrunes()
787    {
788        while (runecounter < 5)
789        {
790            int runetype = RandomGen.NextInt(0, 2);
791            double runey = 0.0;
792            double runex = 0.0;
793            if (RandomGen.NextBool())
794            {
795                runey = Level.Bottom + 2 * Level.Top * RandomGen.NextInt(0, 2);
796                runex = RandomGen.NextDouble(Level.Left, Level.Right);
797            }
798            else
799            {
800                runey = RandomGen.NextDouble(Level.Bottom, Level.Top);
801                runex = Level.Left + 2 * Level.Right * RandomGen.NextInt(0, 2);
802            }
803            Createhostile(runetype, runey, runex);
804            runecounter++;
805        }
806    }
807    void Createrune(int runetype, double y, double x)
808    {
809        PhysicsObject Rune = new PhysicsObject(5, 5);
810        Rune.X = x;
811        Rune.Y = y;
812        Rune.CollisionIgnoreGroup = 2 & 3 & 4;
813
814        switch (runetype)
815        {
816            case 1:
817                //Addcollision
818                Rune.Image = rdamage;
819                break;
820            case 2:
821                //Addcollision
822                Rune.Image = rrepair;
823                break;
824            case 3:
825                //Addcollision
826                //Rune.Image = ...;
827                break;
828        }
829    }
830}
Note: See TracBrowser for help on using the repository browser.