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

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