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

Revision 4245, 24.8 KB checked in by juiitamm, 8 years ago (diff)

Talletus.

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