source: 2012/23/AnttiR/From above/FysiikkaPeli2/FysiikkaPeli2/FromAbove.cs @ 3852

Revision 3852, 42.2 KB checked in by sieerinn, 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 Pelaaja : PhysicsObject
10{
11    public DoubleMeter elamaMittari;
12    public DoubleMeter turbomittari;
13    public DoubleMeter Ammusmittari;
14    public DoubleMeter Pistemittari;
15    public double Latausnopeus;
16    public double Latapati;
17    public bool lataamassa = false;
18    public bool Recoil = false;
19    public double liikkumisnopeus;
20    public DoubleMeter Pisteputki;
21    public Explosion Viimeisinrajahdus = null;
22    public double Ampumisnopeus;
23    public double Combo = 1;
24    public String Asekuva;
25    public string Ase;
26    public Vector viimeisinSuunta = Vector.Zero;
27
28   
29   
30    public Pelaaja(double leveys, double korkeus)
31        : base(leveys, korkeus)
32    {
33        elamaMittari = new DoubleMeter(500, 0, 500);
34        turbomittari = new DoubleMeter(50, 0, 100);
35        Ammusmittari = new DoubleMeter(250, 0, 250);
36        Pistemittari = new DoubleMeter(0, 0, 3000);
37        Pisteputki = new DoubleMeter(0, 0, 10);
38        Ampumisnopeus = 512;
39        Ase = "Heavy";
40        Asekuva = "HMG";
41        Latausnopeus = 6.0;
42        Latapati = 250;
43        liikkumisnopeus = 155;
44    }
45}
46
47public class FromAbove : PhysicsGame
48{
49    Pelaaja pallo;
50    Pelaaja pallo2;
51    Vector spawni;
52    Vector spawni2;
53
54    Vector siirtyma = new Vector(0, 130);
55    List<Vector> kultaLista = new List<Vector>();
56   
57    PhysicsObject alareuna;
58    GameObject Sinikuva;
59    GameObject Punakuva;
60    GameObject Text;
61    GameObject Text2;
62    PhysicsObject m;
63    PhysicsObject n;
64    PhysicsObject n2;
65    PhysicsObject m2; 
66    BarGauge elppiPalkki = new BarGauge(50, 150);
67    BarGauge elppiPalkki2 = new BarGauge(50, 150);
68    BarGauge turboPalkki = new BarGauge(50, 150);
69    BarGauge turboPalkki2 = new BarGauge(50, 150);
70    BarGauge ammusPalkki = new BarGauge(50, 150);
71    BarGauge ammusPalkki2 = new BarGauge(50, 150);
72    BarGauge pistePalkki = new BarGauge(150, 40);
73    BarGauge pistePalkkib = new BarGauge(150, 40);
74    Image pPallo = LoadImage("Punapallo");
75    Image sPallo = LoadImage("Sinipallo");
76    Image sPati = LoadImage("Punapati");
77    Image Boom = LoadImage("Boom!++++++");
78    Image pPati = LoadImage("Sinipati");
79    Image kransu = LoadImage("kransu");
80    Image Sydan = LoadImage("Heart");
81    Image salama = LoadImage("Lightning");
82    Image Shotgun = LoadImage("Striker");
83    Image Famas = LoadImage("Famas");
84    Image Caliber = LoadImage("Caliber 89");
85    Image Ak47u = LoadImage("Aku");
86    Image Sniper = LoadImage("Barret");
87    Image Light = LoadImage("Light");
88    Image HMG = LoadImage("HMG");
89    Image tausta = LoadImage("Hpboost");
90    Image tausta2 = LoadImage("Hpboost2");
91    Image MGH = LoadImage("Dragunov");
92    Image Spas = LoadImage("Spas12");
93    Image kulta = LoadImage("Kulta");
94     bool Kenttalad;
95     
96    public override void Begin()
97     {
98         Kenttalad = false;
99       
100
101
102
103        //Kirjoita ohjelmakoodisi tähän
104
105
106        pallo = Luopallo(Color.Blue, Level.Left + 20, Level.Top - 50);
107        pallo2 = Luopallo(Color.Red, Level.Right - 20, Level.Top - 50);
108        pallo.Image = sPallo;
109        pallo2.Image = pPallo;
110
111
112        Level.Background.CreateGradient(Color.Black, Color.White);
113
114
115        Luokentta();       
116        Liikkeet();
117        Luoajastin();
118        Kutsuvalikko();
119
120    }
121
122    Pelaaja Luopallo(Color vari, double x, double y)
123    {
124        Pelaaja pallo = new Pelaaja(25, 25);
125        pallo.elamaMittari.LowerLimit += delegate { Pelaajakuoli(pallo); };
126        pallo.Pistemittari.UpperLimit += delegate { Maxpointsreached(pallo); };
127        pallo.Shape = Shape.Circle;
128        pallo.Restitution = 0.0;
129        pallo.X = x;
130        pallo.Y = y;
131        pallo.CanRotate = false;
132        pallo.Tag = "pallo";
133        pallo.Color = vari;
134        Add(pallo);
135        AddCollisionHandler(pallo, "Kulta", Kullankerays);       
136        return pallo;
137    }
138
139    void Luoajastin()
140    {
141        Timer ajastin = new Timer();
142        ajastin.Interval = 1.0;
143        ajastin.Timeout += delegate { pallo.turbomittari.Value += 5; };
144        ajastin.Timeout += delegate { pallo2.turbomittari.Value += 5; };
145        ajastin.Start();
146    }
147
148    void Luokentta()
149    {
150        Surface vasenReuna = Surface.CreateLeft(Level);
151        vasenReuna.Color = Color.DarkBlue;
152        Add(vasenReuna);
153        Surface oikeaReuna = Surface.CreateRight(Level);
154        oikeaReuna.Color = Color.DarkBlue;
155        Add(oikeaReuna);
156        Surface ylaReuna = Surface.CreateTop(Level);
157        ylaReuna.Color = Color.DarkBlue;
158        Add(ylaReuna);
159        Surface alaReuna = Surface.CreateBottom(Level);
160        alaReuna.Color = Color.DarkBlue;
161        Add(alaReuna);
162        PhysicsObject alareuna = PhysicsObject.CreateStaticObject(1000, 10);
163        alareuna.Color = Color.DarkBlue;
164        alareuna.X = 0;
165        alareuna.Y = -150;
166        Add(alareuna);
167
168        PhysicsObject vali = PhysicsObject.CreateStaticObject(10, 290);
169        vali.Color = Color.DarkBlue;
170        vali.X = 0;
171        vali.Y = -300;
172        Add(vali);
173
174        Sinikuva = new GameObject(HMG);
175        Sinikuva.Position = new Vector(-165,-300);
176        Add(Sinikuva);
177
178        Punakuva = new GameObject(HMG);
179        Punakuva.Position = new Vector(165, -300);
180        Add(Punakuva);
181
182        GameObject Text = new GameObject(tausta);
183        Text.Position = new Vector(-399, -190);
184        Add(Text);
185
186        GameObject Text2 = new GameObject(tausta2);
187        Text2.Position = new Vector(399, -190);
188        Add(Text2);
189
190        elppiPalkki.BindTo(pallo.elamaMittari);
191        elppiPalkki.BarColor = Color.Red;
192        elppiPalkki.BorderColor = Color.Black;
193        elppiPalkki.Position = new Vector(-450, -300);
194        Add(elppiPalkki);
195
196        elppiPalkki2.BindTo(pallo2.elamaMittari);
197        elppiPalkki2.BarColor = Color.Red;
198        elppiPalkki2.BorderColor = Color.Black;
199        elppiPalkki2.Position = new Vector(350, -300);
200        Add(elppiPalkki2);
201
202        turboPalkki.BindTo(pallo.turbomittari);
203        turboPalkki.BarColor = Color.DarkBlue;
204        turboPalkki.BorderColor = Color.Black;
205        turboPalkki.Position = new Vector(-400, -300);
206        Add(turboPalkki);
207
208        turboPalkki2.BindTo(pallo2.turbomittari);
209        turboPalkki2.BarColor = Color.DarkBlue;
210        turboPalkki2.BorderColor = Color.Black;
211        turboPalkki2.Position = new Vector(400, -300);
212        Add(turboPalkki2);
213
214        ammusPalkki.BindTo(pallo.Ammusmittari);
215        ammusPalkki.BarColor = Color.Yellow;
216        ammusPalkki.BorderColor = Color.Black;
217        ammusPalkki.Position = new Vector(-350, -300);
218        Add(ammusPalkki);
219
220        ammusPalkki2.BindTo(pallo2.Ammusmittari);
221        ammusPalkki2.BarColor = Color.Yellow;
222        ammusPalkki2.BorderColor = Color.Black;
223        ammusPalkki2.Position = new Vector(450, -300);
224        Add(ammusPalkki2);
225
226        pistePalkki.BindTo(pallo.Pistemittari);
227        pistePalkki.BarColor = Color.DarkBlue;
228        pistePalkki.BorderColor = Color.Black;
229        pistePalkki.Position = new Vector(-200, -200);
230        pistePalkki.Direction = BarGauge.BarDirection.BarHorizontalLeft;
231        Add(pistePalkki);
232        Label pisteLuku = new Label();
233        pisteLuku.BindTo(pallo.Pistemittari);
234        pisteLuku.Position = new Vector(-60, -200);
235        Add(pisteLuku);
236
237
238        pistePalkkib.BindTo(pallo2.Pistemittari);
239        pistePalkkib.BarColor = Color.DarkRed;
240        pistePalkkib.BorderColor = Color.Black;
241        pistePalkkib.Position = new Vector(200, -200);
242        pistePalkkib.Direction = BarGauge.BarDirection.BarHorizontalLeft;
243        Add(pistePalkkib);
244        Label pisteLukub = new Label();
245        pisteLukub.BindTo(pallo2.Pistemittari);
246        pisteLukub.Position = new Vector(60, -200);
247        Add(pisteLukub);
248
249
250
251    }
252    void Liikkeet()
253    {
254        // Pelaaja 1
255        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Pelaaja 1 liiku oikealle", pallo, new Vector(pallo.liikkumisnopeus * 1, 0));
256        Keyboard.Listen(Key.D, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
257        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Pelaaja 1 liiku ylös", pallo, new Vector(0, pallo.liikkumisnopeus * 1));
258        Keyboard.Listen(Key.W, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
259        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Pelaaja 1 liiku alas", pallo, new Vector(0, -pallo.liikkumisnopeus * 1));
260        Keyboard.Listen(Key.S, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
261        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Pelaaja 1 liiku vasemmalle", pallo, new Vector(-pallo.liikkumisnopeus * 1, 0));
262        Keyboard.Listen(Key.A, ButtonState.Released, Liikuta, null, pallo, Vector.Zero);
263        Keyboard.Listen(Key.Q, ButtonState.Pressed, Kayta, "Pelaaja 1:Käytä turbo", pallo);
264        Keyboard.Listen(Key.U, ButtonState.Pressed, Tayta, "Pelaaja 1:Paranna elamia", pallo);
265        Keyboard.Listen(Key.E, ButtonState.Pressed, Lataa, "Pelaaja 1:Lataa ase", pallo);
266        Keyboard.Listen(Key.T, ButtonState.Pressed, HKranaatti, "Pelaaja 1:Heita kranaatti", pallo); // heitetään kranaatti siihen suuntaan mihin on viimeksi liikuttu
267        Keyboard.Listen(Key.Y, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(0, 1), pPati);
268        Keyboard.Listen(Key.H, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(0, -1), pPati);
269        Keyboard.Listen(Key.G, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(-1, 0), pPati);
270        Keyboard.Listen(Key.J, ButtonState.Down, Ammu, "Pelaaja 1: ammu", pallo, new Vector(1, 0), pPati);
271
272        // Pelaaja 2
273        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Pelaaja 2 liiku oikealle", pallo2, new Vector(pallo2.liikkumisnopeus * 1, 0));
274        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
275        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja 2 liiku ylös", pallo2, new Vector(0, pallo2.liikkumisnopeus * 1));
276        Keyboard.Listen(Key.Up, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
277        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Pelaaja 2 liiku alas", pallo2, new Vector(0, -pallo2.liikkumisnopeus * 1));
278        Keyboard.Listen(Key.Down, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
279        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Pelaaja 2 liiku vasemmalle", pallo2, new Vector(-pallo2.liikkumisnopeus * 1, 0));
280        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta, null, pallo2, Vector.Zero);
281        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Kayta, "Pelaaja 2:Käytä turbo", pallo2);
282        Keyboard.Listen(Key.NumPad9, ButtonState.Pressed, Tayta, "Pelaaja 2:Paranna elamia", pallo2);
283        Keyboard.Listen(Key.NumPad2, ButtonState.Pressed, Lataa, "Pelaaja 2:Lataa ase", pallo2);
284        Keyboard.Listen(Key.NumPad7, ButtonState.Pressed, HKranaatti, "Pelaaja 2:Heita kranaatti", pallo2);
285        Keyboard.Listen(Key.NumPad8, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, 1), sPati);
286        Keyboard.Listen(Key.NumPad5, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(0, -1), sPati);
287        Keyboard.Listen(Key.NumPad4, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(-1, 0), sPati);
288        Keyboard.Listen(Key.NumPad6, ButtonState.Down, Ammu, "Pelaaja 2: ammu", pallo2, new Vector(1, 0), sPati);
289
290        //General
291
292        Keyboard.Listen(Key.P, ButtonState.Pressed,Kutsuvalikko,"Vaihda aseita");
293
294    }
295    void Ammu(Pelaaja pallo, Vector suunta, Image P)
296    {
297        if (pallo.IsDestroyed) return;
298        if (pallo.Ammusmittari < 1) return;
299        if (pallo.Recoil == true) return;
300
301        PhysicsObject ammus = new PhysicsObject(4, 4);
302        ammus.Position = pallo.Position + suunta * 25;
303        ammus.Image = P;
304        ammus.Restitution = 0.0;
305        pallo.Ammusmittari.Value -= 1;
306        ammus.Velocity = suunta * pallo.Ampumisnopeus;
307        AddCollisionHandler(ammus, "tuhottava", AmmusOsui);
308        AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
309        Add(ammus);
310        ammus.Tag = "ammus";
311
312        double vahinko = 0;
313
314        if (pallo.Ase == "Heavy")
315        {
316
317            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 700);
318            vahinko = 9;
319        }
320        if (pallo.Ase == "Famas")
321        {
322
323            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 190);
324            pallo.Recoil = true;
325            vahinko = 23;
326            Timer.SingleShot(0.03, delegate
327            {
328                pallo.Recoil = false;
329            });
330
331
332        }
333        if (pallo.Ase == "LMG Type")
334        {
335
336            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 500);
337            pallo.Recoil = true;
338            vahinko =14;
339            Timer.SingleShot(0.01, delegate
340            {
341                pallo.Recoil = false;
342            });
343
344
345        }
346        if (pallo.Ase == "Dragunov")
347        {
348            pallo.Recoil = true;
349            vahinko = 139;
350            Timer.SingleShot(0.4, delegate
351            {
352                pallo.Recoil = false;
353            });
354
355        }
356        if (pallo.Ase == "Barret")
357        {
358           vahinko = 298; 
359        }
360
361        if (pallo.Ase == "Ak")
362        {
363            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 600);
364            pallo.Recoil = true;
365            vahinko = 13;
366            Timer.SingleShot(0.01, delegate
367            {
368                pallo.Recoil = false;
369            });
370        }
371        if (pallo.Ase == "Cal89")
372        {
373            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 500);
374            pallo.Recoil = true;
375            vahinko = 26;
376            Timer.SingleShot(0.1, delegate
377            {
378                pallo.Recoil = false;
379            });
380        }
381            if (pallo.Ase == "Spas")
382            {
383                ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 100);
384                pallo.Recoil = true;
385                vahinko = 219;
386                Timer.SingleShot(0.5, delegate
387                {
388                    pallo.Recoil = false;
389                });
390            }
391
392       
393        if (pallo.Ase == "Shotgun")
394        {
395            ammus.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 100);
396            pallo.Recoil = true;
397            vahinko = 90;
398            Timer.SingleShot(0.4, delegate
399            {
400                pallo.Recoil = false;
401            });
402
403
404            PhysicsObject hauli = new PhysicsObject(4, 4);
405            hauli.Position = pallo.Position + suunta * 25;
406            hauli.Image = P;
407            hauli.Tag = "ammus";
408            hauli.Restitution = 0.0;
409            hauli.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
410            AddCollisionHandler(hauli, "tuhottava", AmmusOsui);
411            AddCollisionHandler(hauli, CollisionHandler.DestroyObject);
412            Add(hauli);
413            hauli.Velocity = suunta * pallo.Ampumisnopeus;
414            hauli.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(-20)) * pallo.Ampumisnopeus;
415            AddCollisionHandler(hauli, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
416            {
417                Pelaaja kohdepelaaja = (Pelaaja)kohde;
418                kohdepelaaja.elamaMittari.Value -= vahinko;
419                pallo.Pistemittari.Value += vahinko;
420
421            });
422
423            PhysicsObject hauli2 = new PhysicsObject(4, 4);
424            hauli2.Position = pallo.Position + suunta * 25;
425            hauli2.Image = P;
426            hauli2.Tag = "ammus";
427            hauli2.Restitution = 0.0;
428            hauli2.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 70);
429            AddCollisionHandler(hauli2, "tuhottava", AmmusOsui);
430            AddCollisionHandler(hauli2, CollisionHandler.DestroyObject);
431            Add(hauli2);
432
433            hauli2.Velocity = Vector.FromLengthAndAngle(suunta.Magnitude, suunta.Angle + Angle.FromDegrees(20)) * pallo.Ampumisnopeus;
434            AddCollisionHandler(hauli2, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
435            {
436                Pelaaja kohdepelaaja = (Pelaaja)kohde;
437                kohdepelaaja.elamaMittari.Value -= vahinko;
438                pallo.Pistemittari.Value += vahinko;
439
440            });
441        }
442        AddCollisionHandler(ammus, "pallo", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
443        {
444            Pelaaja kohdepelaaja = (Pelaaja)kohde;
445            kohdepelaaja.elamaMittari.Value -= vahinko;
446            pallo.Pistemittari.Value += vahinko * pallo.Combo;
447        });
448    }
449    void Liikuta(Pelaaja pallo, Vector suunta)
450    {
451        //        pallo.Velocity = suunta;
452        if (suunta.Magnitude != 0)
453        {
454            pallo.Velocity = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
455            pallo.viimeisinSuunta = Vector.ComponentProduct(suunta.Normalize(), new Vector(pallo.liikkumisnopeus, pallo.liikkumisnopeus));
456            return;
457        }
458        pallo.Velocity = suunta;
459        pallo.viimeisinSuunta = suunta;
460    }
461
462    void Luoseina(Vector paikka, double leveys, double korkeus)
463    {
464        PhysicsObject m = PhysicsObject.CreateStaticObject(leveys, korkeus);
465        m.Shape = Shape.Rectangle;
466        m.Position = paikka + siirtyma;
467        m.Color = Color.DarkBlue;
468        Add(m);
469    }
470
471    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
472    {
473        kohde.Destroy();
474    }
475    void Kayta(Pelaaja p)
476    {
477        if (p.turbomittari > 99)
478        {
479            ExplosionSystem ss = new ExplosionSystem(salama, 100);
480            ss.MaxScale = 30;
481            ss.MinScale = 20;
482            ss.MaxVelocity = 150;
483            ss.MaxLifetime = 0.5;
484            ss.MinRotation = 0.0;
485            ss.MaxRotation = 365.0;
486            ss.MinRotationSpeed = 2.0;
487
488            Add(ss);
489            ss.AddEffect(p.Position, 50);
490            p.liikkumisnopeus = p.liikkumisnopeus * 2;
491            p.turbomittari.Value = 0.0;
492            Timer.SingleShot(5.0, delegate { p.liikkumisnopeus = p.liikkumisnopeus / 2; });
493
494        }
495    }
496
497    void Lataa(Pelaaja x)
498    {
499        if (!x.lataamassa)
500        {
501            x.lataamassa = true;
502            x.Ammusmittari.Value = 0;
503            Timer.SingleShot(x.Latausnopeus, delegate { x.Ammusmittari.Value += x.Latapati; x.lataamassa = false; });
504        }
505    }
506
507    void Luopelikentta()
508    {
509        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta DM");
510
511        ruudut.SetTileMethod(Color.White, Luomaa);
512        ruudut.SetTileMethod(Color.Black, Luoseina);
513        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
514        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
515       
516        ruudut.Execute(35, 35);
517    }
518
519    void Syntyykokulta()
520    {
521            int paikka = RandomGen.NextInt(kultaLista.Count);
522            Spawnkulta(paikka);
523    }
524
525    void Luopelikentta2()
526    {        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang DM");
527
528        ruudut.SetTileMethod(Color.White, Luomaa);
529        ruudut.SetTileMethod(Color.Black, Luoseina);
530        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
531        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
532
533        ruudut.Execute(35, 35);     
534    }
535    void Luopelikentta3()
536    {
537        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Testikartta");
538
539        ruudut.SetTileMethod(Color.White, Luomaa);
540        ruudut.SetTileMethod(Color.Black, Luoseina);
541        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
542        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
543        ruudut.SetTileMethod(Color.FromHexCode("#FFE14F"), Luokultapaikka);
544
545        Timer ajastin = new Timer();
546        ajastin.Interval = 3.0;
547        ajastin.Timeout += Syntyykokulta;
548        ajastin.Start();
549
550        ruudut.Execute(35, 35);
551    }
552    void Luopelikentta4()
553    {
554        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("Yang");
555
556        ruudut.SetTileMethod(Color.White, Luomaa);
557        ruudut.SetTileMethod(Color.Black, Luoseina);
558        ruudut.SetTileMethod(Color.FromHexCode("#0026FF"), setspawn2);
559        ruudut.SetTileMethod(Color.FromHexCode("#FF0000"), setspawn1);
560        ruudut.SetTileMethod(Color.FromHexCode("#FFE14F"), Luokultapaikka);
561
562        Timer ajastin = new Timer();
563        ajastin.Interval = 3.0;
564        ajastin.Timeout += Syntyykokulta;
565        ajastin.Start();
566
567        ruudut.Execute(35, 35);
568    }
569
570    //Valikot!!!!
571    void Kutsuvalikko()
572    {
573        MultiSelectWindow alkuv = new MultiSelectWindow("Welcome", "Start game/Continue", "Game settings", "Player 1 weapon", "Player 2 weapon","Under work", "Quit");
574        alkuv.ItemSelected += PainettiinValikonNappia;
575        alkuv.Color = Color.MediumBlue;
576        Add(alkuv);
577    }
578    void PainettiinValikonNappia(int valinta)
579    {
580        switch (valinta)
581        {
582            case 0:
583                //Sulje ikkuna,Pelaa norm.asetuksilla
584                break;
585            case 1:
586                Gasetukset();
587                //Kartta
588                break;
589            case 2:
590                Asetukset1();
591                //Pelaajan 1 asevalinta
592                break;
593            case 3:
594                Asetukset2();
595                //Pelaajan 2 asevalinta
596                break;
597            case 4:
598                if (m != null)
599                    m.Destroy();
600                if (n != null)
601                    n.Destroy();
602                Kutsuvalikko();
603                break;
604            case 5:
605                Exit();
606                break;
607        }
608
609    }
610    void Asetukset1()
611    {
612        MultiSelectWindow p1 = new MultiSelectWindow("Choose your gun",
613            "Sniper rifle", "Assault rifle", "Heavy machine gun", "Shotgun", "Light machine gun", "Back");
614        p1.Color = Color.MediumBlue;
615        p1.ItemSelected += PVN1;
616        Add(p1);
617    }
618    void Asetukset2()
619    {
620        MultiSelectWindow p2 = new MultiSelectWindow("Choose your gun",
621               "Sniper rifle", "Assault rifle", "Heavy machine gun", "Shotgun", "Light machine gun", "Back");
622        p2.Color = Color.Ruby;
623        p2.ItemSelected += PVN2;
624        Add(p2);
625    }
626    void PVN1(int s)
627    {
628        switch (s)
629        {
630            case 0:
631                pallo.Ase = "Sniper";
632                Sni();
633                break;
634            case 1:
635                As();
636                break;
637            case 2:
638                pallo.Ase = "Heavy";
639                pallo.Ampumisnopeus = 512;
640                pallo.Ammusmittari.MaxValue = 400;
641                pallo.Ammusmittari.Value = 400;
642                pallo.Latausnopeus = 6.0;
643                pallo.Latapati = 400;
644                pallo.Asekuva = "HMG";
645                Sinikuva.Image = HMG;
646                Kutsuvalikko();
647                break;
648            case 3:
649                sho();
650                break;
651            case 4:
652                LMG();
653                break;
654            case 5:
655                Kutsuvalikko();
656                //Palaa takaisin
657                break;
658        }
659    }
660    void PVN2(int s)
661    {
662        switch (s)
663        {
664            case 0:
665                Snib();
666                break;
667            case 1:
668                Asb();
669                break;
670            case 2:
671                pallo2.Ase = "Heavy";
672                pallo2.Ampumisnopeus = 512;
673                pallo2.Ammusmittari.MaxValue = 400;
674                pallo2.Ammusmittari.Value = 400;
675                pallo2.Latausnopeus = 6.0;
676                pallo2.Latapati = 400;
677                pallo2.Asekuva = "HMG2";
678                Punakuva.Image = HMG;
679                Kutsuvalikko();
680                break;
681            case 3:
682                shob();
683                break;
684            case 4:
685                LMGb();
686                break;
687            case 5:
688                Kutsuvalikko();
689                //Palaa takaisin
690                break;
691        }
692    }
693    void Gasetukset()
694    {
695        MultiSelectWindow a1 = new MultiSelectWindow("Maps:",
696              "Caves DM", "Yin DM", "Caves Gold rush","Yin Gold rush","exit");
697        a1.Color = Color.Azure;
698        a1.ItemSelected += PVN3;
699        Add(a1);
700    }
701    void PVN3(int Valinta)
702    {
703        if (Kenttalad == true) return;
704        //Estaa Kenttien synnyn paallekkain
705           
706        switch (Valinta)
707        {
708            case 0:
709                //Caves-dm
710                Luopelikentta();
711                Kenttalad = true;
712                Gasetukset3();
713                break;
714            case 1:
715                //yin-dm
716                 Luopelikentta2();
717                 Kenttalad = true;
718                 Gasetukset3();
719                 break;
720            case 2:
721                 //caves-goru
722                 Luopelikentta3();
723                 Kenttalad = true;
724                 Gasetukset3();
725                 break;
726            case 3:
727                 //yin-goru
728                 Luopelikentta4();
729                 Kenttalad = true;
730                 Gasetukset3();
731                 break;
732            case 4:               
733                 Kutsuvalikko();
734                 break;
735        }
736
737
738    }
739   
740    void Gasetukset3()
741    {
742        MultiSelectWindow a1 = new MultiSelectWindow("Points limit","1000", "3000","5000","10000","15000", "Back");
743        a1.Color = Color.Azure;
744        a1.ItemSelected += PVN33;
745        Add(a1);
746    }
747    void PVN33(int Valinta)
748    {
749        switch (Valinta)
750        {
751            case 0:
752                pallo.Pistemittari.MaxValue = 1000;
753                pallo2.Pistemittari.MaxValue = 1000;
754                Kutsuvalikko();
755                break;
756            case 1:
757                pallo.Pistemittari.MaxValue = 3000;
758                pallo2.Pistemittari.MaxValue = 3000;
759                Kutsuvalikko();
760                break;
761            case 2:
762                pallo.Pistemittari.MaxValue = 5000;
763                pallo2.Pistemittari.MaxValue = 5000;
764                Kutsuvalikko();
765                break;
766            case 3:
767                pallo.Pistemittari.MaxValue = 10000;
768                pallo2.Pistemittari.MaxValue = 10000;
769                Kutsuvalikko();
770                break;
771            case 4:
772                pallo.Pistemittari.MaxValue = 15000;
773                pallo2.Pistemittari.MaxValue = 15000;
774                Kutsuvalikko();
775                break;
776            case 5:
777                Kutsuvalikko();
778                break;
779        }
780
781
782    }
783    //Light machine gun valikot
784    void LMG()
785    {
786        MultiSelectWindow LMG = new MultiSelectWindow("Light machine guns", "Famas", "LMG Type `95","Back");
787        LMG.Color = Color.MediumBlue;
788        LMG.ItemSelected += LMG2;
789        Add(LMG);
790    }
791    void LMGb()
792    {
793        MultiSelectWindow LMG = new MultiSelectWindow("Light machine guns", "Famas", "LMG Type `95", "Back");
794        LMG.Color = Color.Ruby;
795        LMG.ItemSelected += LMG2b;
796        Add(LMG);
797    }
798    void LMG2(int s)
799    {
800        switch (s)
801        {
802
803            case 0:
804                pallo.Ase = "Famas";
805                pallo.Ampumisnopeus = 1024;
806                pallo.Ammusmittari.MaxValue = 100;
807                pallo.Ammusmittari.Value = 100;
808                pallo.Latausnopeus = 1.9;
809                pallo.Latapati = 100;
810                pallo.Asekuva = "Famas2";
811                Sinikuva.Image = Famas;
812                Kutsuvalikko();
813                break;
814            case 1:
815                pallo.Ase = "LMG Type";
816                pallo.Ampumisnopeus = 448;
817                pallo.Ammusmittari.MaxValue = 400;
818                pallo.Ammusmittari.Value = 400;
819                pallo.Latausnopeus = 5.0;
820                pallo.Latapati = 400;
821                pallo.Asekuva = "Light2";
822                Sinikuva.Image = Light;
823                Kutsuvalikko();
824                break;
825            case 2:
826                Asetukset1();
827                break;
828        }
829    }
830    void LMG2b(int s)
831    {
832        switch (s)
833        {
834
835            case 0:
836                pallo2.Ase = "Famas";
837                pallo2.Ampumisnopeus = 1024;
838                pallo2.Ammusmittari.MaxValue = 100;
839                pallo2.Ammusmittari.Value = 100;
840                pallo2.Latausnopeus = 1.9;
841                pallo2.Latapati = 100;
842                pallo2.Asekuva = "Famas2";
843                Punakuva.Image = Famas;
844                Kutsuvalikko();
845                break;
846            case 1:
847                pallo2.Ase = "LMG Type";
848                pallo2.Ampumisnopeus = 448;
849                pallo2.Ammusmittari.MaxValue = 400;
850                pallo2.Ammusmittari.Value = 400;
851                pallo2.Latausnopeus = 5.0;
852                pallo2.Latapati = 400;
853                pallo2.Asekuva = "Light2";
854                Punakuva.Image = Light;
855                Kutsuvalikko();
856                break;
857            case 2:
858                Asetukset2();
859                break;
860        }
861    }
862    //Assault Riflet
863    void As()
864    {
865        MultiSelectWindow As = new MultiSelectWindow("Assault rifles", "Ak-47u", "Caliber `89", "Back");
866        As.Color = Color.MediumBlue;
867        As.ItemSelected += As2;
868        Add(As);
869    }
870    void As2(int s)
871    {
872        switch (s)
873        {
874
875            case 0:
876                pallo.Ase = "Ak";
877                pallo.Ampumisnopeus = 890;
878                pallo.Ammusmittari.MaxValue = 64;
879                pallo.Ammusmittari.Value = 64;
880                pallo.Latausnopeus = 0.8;
881                pallo.Latapati = 64;
882                pallo.Asekuva = "Ak47u2";
883                Sinikuva.Image = Ak47u;
884                Kutsuvalikko();
885                break;
886            case 1:
887                pallo.Ase = "Cal89";
888                pallo.Ampumisnopeus = 1024;
889                pallo.Ammusmittari.MaxValue = 25;
890                pallo.Ammusmittari.Value = 25;
891                pallo.Latausnopeus = 2.1;
892                pallo.Latapati = 25;
893                pallo.Asekuva = "Caliber2";
894                Sinikuva.Image = Caliber;
895                Kutsuvalikko();
896                break;
897            case 2:
898                Asetukset1();
899                break;
900        }
901    }   
902    void Asb()
903    {
904        MultiSelectWindow As = new MultiSelectWindow("Assault rifles", "Ak-47u", "Caliber `89", "Back");
905        As.Color = Color.Ruby;
906        As.ItemSelected += As2b;
907        Add(As);
908    }
909    void As2b(int s)
910    {
911        switch (s)
912        {
913
914            case 0:
915                pallo2.Ase = "Ak";
916                pallo2.Ampumisnopeus = 890;
917                pallo2.Ammusmittari.MaxValue = 64;
918                pallo2.Ammusmittari.Value = 64;
919                pallo2.Latausnopeus = 0.8;
920                pallo2.Latapati = 64;
921                pallo2.Asekuva = "Ak47u2";
922                Punakuva.Image = Ak47u;
923                Kutsuvalikko();
924                break;
925            case 1:
926                pallo2.Ase = "Cal89";
927                pallo2.Ampumisnopeus = 1024;
928                pallo2.Ammusmittari.MaxValue = 25;
929                pallo2.Ammusmittari.Value = 25;
930                pallo2.Latausnopeus = 2.1;
931                pallo2.Latapati = 25;
932                pallo2.Asekuva = "Caliber2";
933                Punakuva.Image = Caliber;
934                Kutsuvalikko();
935                break;
936            case 2:
937                Asetukset2();
938                break;
939        }
940    }
941    //Sniput
942    void Sni()
943    {
944        MultiSelectWindow Sni = new MultiSelectWindow("Sniper rifles", "Dragunov", "L84 Mod.", "Back");
945        Sni.Color = Color.MediumBlue;
946        Sni.ItemSelected += Sni2;
947        Add(Sni);
948    }
949    void Sni2(int s)
950    {
951        switch (s)
952        {
953
954            case 0:
955                pallo.Ase = "Dragunov";
956                pallo.Ampumisnopeus = 1024;
957                pallo.Ammusmittari.MaxValue = 11;
958                pallo.Ammusmittari.Value = 11;
959                pallo.Latausnopeus = 5.3;
960                pallo.Latapati = 11;
961                Sinikuva.Image = MGH;
962                Kutsuvalikko();
963                break;
964            case 1:
965                pallo.Ase = "Barret";
966                pallo.Ampumisnopeus = 1024;
967                pallo.Ammusmittari.MaxValue =1;
968                pallo.Ammusmittari.Value =1;
969                pallo.Latausnopeus = 2.0;
970                pallo.Latapati =1;
971                Sinikuva.Image = Sniper;
972                Kutsuvalikko();
973                break;
974            case 2:
975                Asetukset1();
976                break;
977        }
978    }
979    void Snib()
980    {
981        MultiSelectWindow Sni = new MultiSelectWindow("Sniper rifles", "Dragunov", "L84 Mod.", "Back");
982        Sni.Color = Color.Ruby;
983        Sni.ItemSelected += Sni2b;
984        Add(Sni);
985    }
986    void Sni2b(int s)
987    {
988        switch (s)
989        {
990
991            case 0:
992                pallo2.Ase = "Dragunov";
993                pallo2.Ampumisnopeus = 1024;
994                pallo2.Ammusmittari.MaxValue = 11;
995                pallo2.Ammusmittari.Value = 11;
996                pallo2.Latausnopeus = 5.3;
997                pallo2.Latapati = 11;
998                Punakuva.Image = MGH;
999                Kutsuvalikko();
1000                break;
1001            case 1:
1002                pallo2.Ase = "Barret";
1003                pallo2.Ampumisnopeus = 1024;
1004                pallo2.Ammusmittari.MaxValue = 1;
1005                pallo2.Ammusmittari.Value = 1;
1006                pallo2.Latausnopeus = 2.0;
1007                pallo2.Latapati = 1;
1008                Punakuva.Image = Sniper;
1009                Kutsuvalikko();
1010                break;
1011            case 2:
1012                Asetukset2();
1013                break;
1014        }
1015    }
1016    void sho()
1017    {
1018        MultiSelectWindow Sni = new MultiSelectWindow("Shotguns", "Striker", "Spas12", "Back");
1019        Sni.Color = Color.MediumBlue;
1020        Sni.ItemSelected += sho2;
1021        Add(Sni);
1022    }
1023    void sho2(int s)
1024    {
1025        switch (s)
1026        {
1027
1028            case 0:
1029                pallo.Ase = "Shotgun";
1030                pallo.Ampumisnopeus = 1224;
1031                pallo.Ammusmittari.MaxValue = 11;
1032                pallo.Ammusmittari.Value = 11;
1033                pallo.Latausnopeus = 5.3;
1034                pallo.Latapati = 11;
1035                Sinikuva.Image = Shotgun;
1036                Kutsuvalikko();
1037                break;
1038            case 1:
1039                pallo.Ase = "Spas";
1040                pallo.Ampumisnopeus = 1224;
1041                pallo.Ammusmittari.MaxValue = 2;
1042                pallo.Ammusmittari.Value = 2;
1043                pallo.Latausnopeus = 1.6;
1044                pallo.Latapati = 2;
1045                Sinikuva.Image = Spas;
1046                Kutsuvalikko();
1047                break;
1048            case 2:
1049                Asetukset1();
1050                break;
1051        }
1052    }
1053    void shob()
1054    {
1055        MultiSelectWindow Sni = new MultiSelectWindow("Shotguns", "Striker", "Spas12", "Back");
1056        Sni.Color = Color.Ruby;
1057        Sni.ItemSelected += sho2b;
1058        Add(Sni);
1059    }
1060    void sho2b(int s)
1061    {
1062        switch (s)
1063        {
1064            case 0:
1065                pallo2.Ase = "Shotgun";
1066                pallo2.Ampumisnopeus = 1224;
1067                pallo2.Ammusmittari.MaxValue = 11;
1068                pallo2.Ammusmittari.Value = 11;
1069                pallo2.Latausnopeus = 5.3;
1070                pallo2.Latapati = 11;
1071                Punakuva.Image = Shotgun;
1072                Kutsuvalikko();
1073                break;
1074            case 1:
1075                pallo2.Ase = "Spas";
1076                pallo2.Ampumisnopeus = 1224;
1077                pallo2.Ammusmittari.MaxValue = 2;
1078                pallo2.Ammusmittari.Value = 2;
1079                pallo2.Latausnopeus = 1.6;
1080                pallo2.Latapati = 2;
1081                Punakuva.Image = Spas;
1082                Kutsuvalikko();
1083                break;
1084            case 2:
1085                Asetukset2();
1086                break;
1087        }
1088    }
1089    //Respaus
1090    void Pelaajakuoli(Pelaaja p)
1091    {
1092        if (p == pallo)
1093        {
1094            Remove(pallo);
1095            Timer.SingleShot(3.1, delegate
1096            {
1097                Add(pallo);
1098                pallo.Position = spawni;
1099                pallo.turbomittari.Value = 100.0;
1100                pallo.elamaMittari.Value = 500.0;
1101                pallo.Ammusmittari.Value += pallo.Latapati;
1102            });
1103
1104        }
1105        if (p == pallo2)
1106        {
1107            Remove(pallo2);
1108            Timer.SingleShot(3.1, delegate
1109            {
1110                Add(pallo2);
1111                pallo2.Position =spawni2;
1112                pallo2.turbomittari.Value = 100.0;
1113                pallo2.elamaMittari.Value = 500.0;
1114                pallo2.Ammusmittari.Value += pallo.Latapati;
1115            });
1116        }
1117    }
1118    //Kransu
1119    void HKranaatti(Pelaaja Pallo)
1120    {
1121        if (Pallo.turbomittari < Pallo.turbomittari.MaxValue ) return;
1122        Pallo.turbomittari.Value = Pallo.turbomittari.MinValue;
1123
1124        PhysicsObject Kransu = new PhysicsObject(20, 20);
1125        Kransu.Image = kransu;
1126        Add(Kransu);
1127        Kransu.Position = Pallo.Position;
1128        Kransu.IgnoresCollisionResponse = true;
1129        Kransu.Hit(Pallo.viimeisinSuunta*1.4);
1130        Kransu.IgnoresExplosions = true;
1131        Timer.SingleShot(1.2, delegate
1132        {
1133            ExplosionSystem es = new ExplosionSystem(Boom, 80);           
1134            es.Position = Kransu.Position;
1135            es.MaxScale = 30;
1136            es.MinScale = 30;
1137            es.MaxVelocity = 100;
1138            Add(es);
1139            es.AddEffect(Kransu.Position, 80);
1140            Kransu.Destroy();
1141            Explosion es2 = new Explosion(100);
1142            es2.Position = Kransu.Position;
1143            es2.IsVisible = false;
1144            es2.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta) { Rajahdusosui(Pallo, kohde, suunta, es2); }; 
1145            Add(es2);
1146        });
1147    }
1148    void Rajahdusosui(Pelaaja ampuja, IPhysicsObject kohde, Vector v, Explosion es)
1149    {
1150        if (!(kohde is Pelaaja)) return;
1151        Pelaaja kohdePelaaja = kohde as Pelaaja;
1152        if (kohdePelaaja == null) return;
1153        if (kohdePelaaja.Viimeisinrajahdus == es) return;
1154        double etaisyys = Vector.Distance(kohdePelaaja.Position, es.Position);
1155        int damage = (int)Math.Floor(1000 / etaisyys);
1156        kohdePelaaja.elamaMittari.Value -= damage;
1157        if (ampuja == kohde) return;
1158        ampuja.Pistemittari.Value += damage;
1159    }
1160    void Tayta(Pelaaja p)
1161    {
1162        if (p.turbomittari < p.turbomittari.MaxValue) return;
1163        p.turbomittari.Value = p.turbomittari.MinValue;
1164        ExplosionSystem ss = new ExplosionSystem(Sydan, 100);
1165        ss.MaxScale = 30;
1166        ss.MinScale = 15;
1167        ss.MaxVelocity = 40;
1168        ss.MaxLifetime = 0.6;
1169        Add(ss);
1170        ss.AddEffect(p.Position, 15);
1171        p.elamaMittari.Value = p.elamaMittari.Value + 150;
1172        if (p == pallo)
1173        {
1174            pallo2.Pistemittari.Value = pallo2.Pistemittari.Value -= 150;
1175        }
1176        if (p == pallo2)
1177        {
1178            pallo.Pistemittari.Value = pallo.Pistemittari.Value -= 150;
1179        }
1180       
1181    }
1182    void Luomaa(Vector paikka, double leveys, double korkeus)
1183    {
1184        GameObject maa = new GameObject(leveys, korkeus);
1185        maa.Position = paikka + siirtyma;
1186        maa.Color = Color.White;
1187        Add(maa);
1188    }
1189
1190    void setspawn2(Vector paikka, double leveys, double korkeus)
1191    {
1192        Luomaa(paikka,leveys,korkeus);
1193        spawni2 = paikka + siirtyma;
1194
1195        pallo2.Position = spawni2;
1196    }
1197     void setspawn1(Vector paikka, double leveys, double korkeus)
1198    {
1199        Luomaa(paikka,leveys,korkeus);
1200        spawni = paikka + siirtyma;
1201        pallo.Position = spawni;
1202    }
1203
1204     void Luokultapaikka(Vector paikka, double leveys, double korkeus)
1205     {
1206         Luomaa(paikka, leveys, korkeus);
1207         kultaLista.Add(paikka + siirtyma);
1208     }
1209     void Spawnkulta(int numero)
1210     {
1211         PhysicsObject Kultapala = new PhysicsObject(35, 35);
1212
1213         Kultapala.X = kultaLista[numero].X;
1214         Kultapala.Y = kultaLista[numero].Y;
1215         Kultapala.MaximumLifetime = TimeSpan.FromSeconds(15);
1216         Kultapala.Image = kulta;
1217         Kultapala.Tag = "Kulta";
1218         
1219
1220         Add(Kultapala);
1221     }
1222
1223     void Kullankerays(PhysicsObject olio,PhysicsObject kulta)
1224     {
1225         if (olio is Pelaaja)
1226         {
1227             Pelaaja p = (Pelaaja)olio;
1228             p.Pistemittari.Value = p.Pistemittari.Value + 350;
1229             kulta.Destroy();
1230         }
1231     }
1232
1233    void Maxpointsreached(Pelaaja pallow)   
1234    {
1235        if (pallow == pallo2)
1236        {
1237            Label voitto = new Label("Punainen pallo  voittaa pelin");
1238            voitto.Color = Color.White;
1239            voitto.MaximumLifetime = new TimeSpan(0, 0, 0, 0, 5000);
1240            voitto.Position = new Vector(0,100);
1241            voitto.Size = new Vector(300, 50);
1242            Add(voitto);
1243            Timer.SingleShot(5.0, delegate
1244            {
1245                pallo.Pistemittari.Value = 0;
1246                pallo2.Pistemittari.Value = 0;
1247                pallo.Combo = 1;
1248                pallo2.Combo = 1;
1249                Kutsuvalikko();
1250            }); 
1251        }
1252        if (pallow == pallo)
1253        {
1254            Label voitto2 = new Label("Sininen pallo voitti pelin");
1255            voitto2.Color = Color.White;
1256            voitto2.MaximumLifetime = new TimeSpan (0,0,0,0,5000);
1257            voitto2.Position = new Vector(0, 100);
1258            voitto2.Size = new Vector(300, 50);
1259            Add(voitto2);
1260            Timer.SingleShot(5.0, delegate
1261            {
1262                pallo.Pistemittari.Value = 0;
1263                pallo2.Pistemittari.Value = 0;
1264                pallo.Combo = 1;
1265                pallo2.Combo = 1;
1266                Kutsuvalikko();
1267            });
1268
1269        }
1270    }
1271}
Note: See TracBrowser for help on using the repository browser.