source: 2013/23/LeoL/Lord_Of_the_Swords/Lord_Of_the_Swords/Lord_Of_the_Swords/Lord_Of_the_Swords.cs @ 3990

Revision 3990, 34.9 KB checked in by lemilaht, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Runtime.Serialization.Formatters.Binary;
4using System.IO;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10using Physics2DDotNet.Ignorers;
11interface Valittava
12{
13
14}
15[Serializable] class Aloituspaikka : PhysicsObject, Valittava
16{
17    private IntMeter elamaLaskuri = new IntMeter(2000, 0, 2000);
18    public int ObjectID { get; set; }
19    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
20    public Aloituspaikka(double leveys, double korkeus)
21        : base(leveys, korkeus)
22    {
23        this.MakeStatic();
24        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
25        ObjectID = 1;
26    }
27
28
29}
30public class DeepCloneClass
31{
32    public static T DeepClone<T>(T obj)
33    {
34        using (var ms = new MemoryStream())
35        {
36            var formatter = new BinaryFormatter();
37            formatter.Serialize(ms, obj);
38            ms.Position = 0;
39
40            return (T)formatter.Deserialize(ms);
41        }
42    }
43}
44
45[Serializable] class tukikohta : Aloituspaikka
46{
47
48    public int Mhinta { get; set; }
49    private int raksaK { get; set; }
50    public tukikohta(double leveys, double korkeus)
51        : base(leveys, korkeus)
52    {
53        raksaK = 1;
54        ElamaLaskuri.DefaultValue = 2000;
55        ElamaLaskuri.MaxValue = 2000;
56        ElamaLaskuri.Reset();
57        this.MakeStatic();
58        ElamaLaskuri.LowerLimit += delegate { this.Destroy(); };
59        Mhinta = 400;
60        ObjectID = 1;
61    }
62
63
64
65}
66[Serializable] class rakennus : tukikohta
67{
68    public new int Mhinta { get; set; }
69    public int Khinta { get; set; }
70    public int rakennusaika { get; set; }
71    public int elämät { get; set; }
72    public int raksaK { get; set; }
73    public rakennus(double leveys, double korkeus)
74        : base(leveys, korkeus)
75    {
76        this.MakeStatic();
77        ObjectID = 1;
78    }
79
80    public static rakennus LuoUusi(rakennus rak)
81    {
82        rakennus uusi = new rakennus(rak.Size.X, rak.Size.Y);
83        uusi.Mhinta = rak.Mhinta;
84        uusi.Khinta = rak.Khinta;
85        uusi.rakennusaika = rak.rakennusaika;
86        uusi.elämät = rak.elämät;
87        uusi.raksaK = rak.elämät;
88        return uusi;
89    }
90}
91
92class Resurssi : PhysicsObject
93{
94    private int maara { get; set; }
95
96    public int ObjectID { get; set; }
97
98    public Resurssi(double leveys, double korkeus)
99        : base(leveys, korkeus)
100    {
101        maara = 1000;
102        this.MakeStatic();
103        ObjectID = 1;
104    }
105
106
107}
108class kristalli : PhysicsObject
109{
110    public int Kmaara { get; set; }
111    public kristalli(double leveys, double korkeus)
112        : base(leveys, korkeus)
113    {
114        Kmaara = 750;
115        this.MakeStatic();
116    }
117
118
119    public int Louhikristallia()
120    {
121        Kmaara -= 1;
122        if (Kmaara == 0) this.Destroy();
123        return 1;
124    }
125}
126class hevonen : PhysicsObject
127{
128    public int hmaara;
129    public int ObjectID { get; set; }
130    public hevonen(double leveys, double korkeus)
131        : base(leveys, korkeus)
132    {
133        this.MakeStatic();
134        ObjectID = 1;
135        Timer ajastin = new Timer();
136        ajastin.Interval = 10;
137        ajastin.Timeout += delegate { tarkkaileHevostenMaaraa(hmaara); };
138        ajastin.Start();
139    }
140
141
142    public void tarkkaileHevostenMaaraa(int Hmaara)
143    {
144
145        if (Hmaara < 5)
146        {
147            Hmaara++;
148        }
149    }
150}
151
152class työlainen : PhysicsObject, Valittava
153{
154    public int koulutusaika { get; set; }
155    public int Mhinta { get; set; }
156    public int hevosmäärä { get; set; }
157    public int nopeus { get; set; }
158    public int visibility { get; set; }
159    public int kantomaara { get; set; }
160    public int kmaara { get; set; }
161    public int ObjectID { get; set; }
162    public int liikkumistila { get; set; }
163    public int supplycost { get; set; }
164    public int elämät { get; set; }
165    private List<Vector> liikkumiset = new List<Vector>();
166    public työlainen(double leveys, double korkeus)
167        : base(leveys, korkeus)
168    {
169        kantomaara = 0;
170        nopeus = 10;
171        elämät = 40;
172        hevosmäärä = 0;
173        Mhinta = 50;
174        this.CanRotate = false;
175        koulutusaika = 10;
176        ObjectID = 2;
177        GameObject rakentaja = new GameObject(2, 2);
178        this.IgnoresGravity = true;
179        this.Tag = "työläinen";
180
181    }
182
183
184
185}
186class Sotilas : PhysicsObject, Valittava
187{
188    public int vahinko { get; set; }
189    public int ObjectID { get; set; }
190    public int koulutusaika { get; set; }
191    public int Mhinta { get; set; }
192    public int Khinta { get; set; }
193    public int Hhinta { get; set; }
194    public int range { get; set; }
195    public int nopeus { get; set; }
196    AssaultRifle ase;
197    public int visibility { get; set; }
198    public int armor { get; set; }
199    public int elämät { get; set; }
200    public int Liikkumistila { get; set; }
201    public double hyökkäysaika { get { return ase.FireRate; } set { ase.FireRate = value; } }
202    public int supplycost { get; set; }
203    public List<Vector> liikkumiset;
204
205    public Sotilas(double leveys, double korkeus, int elämiä)
206        : base(leveys, korkeus)
207    {
208        this.IgnoresGravity = true;
209        Liikkumistila = 0;
210        liikkumiset = new List<Vector>();
211        GameObject liikkumispiste = new GameObject(20, 20);
212        ObjectID = 2;
213        ase = new AssaultRifle(1, 1);
214        ase.InfiniteAmmo = true;
215        ase.IsVisible = false;
216        ase.AmmoIgnoresGravity = true;
217        ase.CanHitOwner = false;
218        this.Add(ase);
219        elämät = elämiä;
220        this.CanRotate = false;
221        this.Brain = aivot(range, visibility, nopeus, vahinko, liikkumiset);
222    }
223
224    Sotilas LuoUusi(Sotilas sotilas)
225    {
226        Sotilas uusi = new Sotilas(sotilas.Size.X, sotilas.Size.Y, sotilas.elämät);
227        uusi.Khinta = sotilas.Khinta;
228        uusi.Mhinta = sotilas.Mhinta;
229        uusi.supplycost = sotilas.supplycost;
230        uusi.vahinko = sotilas.vahinko;
231        uusi.range = sotilas.range;
232        uusi.visibility = sotilas.visibility;
233        uusi.ase = sotilas.ase;
234        uusi.Brain = sotilas.Brain;
235        uusi.armor = sotilas.armor;
236        uusi.koulutusaika = sotilas.koulutusaika;
237        uusi.hyökkäysaika = sotilas.hyökkäysaika;
238        uusi.nopeus = sotilas.nopeus;
239        uusi.Hhinta = sotilas.Hhinta;
240        return uusi;
241    }
242
243
244    Brain aivot(int range, int visibility, int nopeus, int vahinko, List<Vector> liikkumiset)
245    {
246        FollowerBrain aivot = new FollowerBrain("vihollinen");
247        aivot.Speed = nopeus;
248        aivot.DistanceFar = visibility;
249        aivot.DistanceClose = range;
250        aivot.StopWhenTargetClose = true;
251
252
253        //hyökkäysaivot.TargetClose += Hyökkää();
254        return aivot;
255
256    }
257
258    /*   public void Hyökkää(object lahettajaAivot, EventArgs e )
259        { 
260       
261        }   */
262
263}
264
265
266
267public class Lord_Of_the_Swords : PhysicsGame
268{
269    bool rakenna;
270    Image ruoho = LoadImage("ruoho");
271    string Rotu = String.Empty;
272    GameObject valitsin;
273    string AIrotu = String.Empty;
274    Image parakkikuva = LoadImage("barracks");
275    Image Nexuz = LoadImage("nexus'");
276    Image berserkki = LoadImage("berserkki");
277    Image spawnim = LoadImage("spawn");
278    Image VCIM = LoadImage("voidcore");
279    Image Mkuva = LoadImage("metalli");
280    Image Spawnk = LoadImage("spawn");
281    Image Kaupunkikuva = LoadImage("kaupunki");
282    Image Corek = LoadImage("core");
283    Image Raperkuva = LoadImage("Reaper1");
284    Image CitadelK = LoadImage("citadel");
285    Image CrystalK = LoadImage("kristalli");
286    Image Vuorik = LoadImage("vuori");
287    Image Hatchkuva = LoadImage("hATCHERY");
288    Image Heppakuva = LoadImage("hevonen");
289    Image Gateway = LoadImage("gateway");
290    Image Dronek = LoadImage("Drone");
291    Image DR = LoadImage("darkorrakentaa");
292    List<Sotilas> Valitutsotilaat = new List<Sotilas>();
293    List<Sotilas> Sotilaat = new List<Sotilas>();
294    List<työlainen> työläiset = new List<työlainen>();
295    List<Sotilas> PSotilaat = new List<Sotilas>();
296    List<työlainen> Ptyöläiset = new List<työlainen>();
297    List<työlainen> valitutTyöläiset = new List<työlainen>();
298    List<Vector> PMoverS = new List<Vector>();
299    List<Vector> PmoverT = new List<Vector>();
300    List<Vector> AImoverT = new List<Vector>();
301    List<Vector> AIMoverS = new List<Vector>();
302    List<Resurssi> RES = new List<Resurssi>();
303    List<Aloituspaikka> Paloituspaikka = new List<Aloituspaikka>();
304    List<rakennus> Prakennus = new List<rakennus>();
305    List<rakennus> rakennuus = new List<rakennus>();
306    List<rakennus> valitutRakennukset = new List<rakennus>();
307    List<tukikohta> Ptukikohdat = new List<tukikohta>();
308    List<tukikohta> tukikohdat = new List<tukikohta>();
309    IntMeter Pmetallit;
310    public override void Begin()
311    {
312        ClearAll();
313        Mouse.IsCursorVisible = true;
314        //SetWindowSize(1920, 1080, true);
315        MediaPlayer.Play("Chase");
316        Valikko();
317        Camera.Reset();
318        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Lopeta peli");
319        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
320
321    }
322
323
324    void Pmetallilaskuri()
325    {
326        Pmetallit = new IntMeter(50);
327
328        Label pisteNaytto = new Label();
329        pisteNaytto.X = Screen.Left - 100;
330        pisteNaytto.Y = Screen.Top + 100;
331        pisteNaytto.TextColor = Color.Black;
332        pisteNaytto.Color = Color.White;
333
334        pisteNaytto.BindTo(Pmetallit);
335        Add(pisteNaytto);
336    }
337    void Valikko()
338    {
339        MultiSelectWindow valikko = new MultiSelectWindow("Lords of the swords",
340"SinglePlayer", "Instructions", "Lopeta");
341        valikko.ItemSelected += Aloitusruutu;
342        Add(valikko);
343
344    }
345    void Aloitusruutu(int valinta)
346    {
347        switch (valinta)
348        {
349            case 0:
350                SinglePlayer();
351                break;
352            case 1:
353
354                break;
355            case 2:
356                Exit();
357                break;
358        }
359    }
360    void SinglePlayer()
361    {
362        MultiSelectWindow valikko2 = new MultiSelectWindow("Single player",
363            "Campaigin", "Conquest", "Custom game", "Back to the menu");
364        valikko2.ItemSelected += Svalikko;
365        Add(valikko2);
366    }
367    void Svalikko(int valinta)
368    {
369        switch (valinta)
370        {
371            case 0:
372                RotuV();
373                break;
374            case 1:
375                RotuV();
376                break;
377            case 2:
378                RotuV();
379                break;
380            case 3:
381                Begin();
382                break;
383        }
384    }
385
386
387    void LuoKentta()
388    {
389
390        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("OmaRTS kentta");
391        ruudut.SetTileMethod(Color.Black, Pelaaja);
392        ruudut.SetTileMethod(Color.White, kaupunki);
393        //ruudut.SetTileMethod(Color.Yellow, Ylämaa );
394        ruudut.SetTileMethod(Color.FromHexCode("FF00D4"), reuna);
395        ruudut.SetTileMethod(Color.FromHexCode("FFFF00"), Metalli);
396        ruudut.SetTileMethod(Color.FromHexCode("0A0AFF"), luokristalli);
397        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), Luovuori);
398        ruudut.SetTileMethod(Color.FromHexCode("808080"), AIaloitus);
399        //FF0010
400        ruudut.SetTileMethod(Color.FromHexCode("FF0010"), hevoset);
401
402        ruudut.Execute(20, 20);
403
404        Rotualustus();
405
406        Level.BackgroundColor = Color.DarkForestGreen;
407        Pmetallilaskuri();
408
409
410        foreach (var border in Level.CreateBorders())
411        {
412            var ignorer = new GroupIgnorer();
413            ignorer.Groups.Add(1);
414            ignorer.IsInverted = true;
415            border.CollisionIgnorer = ignorer;
416
417        }
418        for (int i = 0; i < 7; i++)
419        {
420            Lisätäänyksiköitä();
421        }
422
423    }
424    void Luovuori(Vector paikka, double leveys, double korkeus)
425    {
426        PhysicsObject vuori = PhysicsObject.CreateStaticObject(20, 20);
427        vuori.Position = paikka;
428        vuori.Image = Vuorik;
429        Add(vuori, -2);
430    }
431    void reuna(Vector paikka, double leveys, double korkeus)
432    {
433        PhysicsObject Reuna = PhysicsObject.CreateStaticObject(20, 20);
434        Reuna.Position = paikka;
435        Reuna.IgnoresCollisionResponse = true;
436        Reuna.Image = ruoho;
437        Add(Reuna, -3);
438    }
439
440
441
442    void Pelaaja(Vector paikka, double leveys, double korkeus)
443    {
444        PhysicsObject pelaaja = new PhysicsObject(1, 1);
445        pelaaja.Position = paikka;
446        pelaaja.IsVisible = false;
447        pelaaja.CanRotate = false;
448        pelaaja.IgnoresGravity = true;
449        pelaaja.IgnoresCollisionResponse = false;
450        pelaaja.Restitution = 0;
451        Add(pelaaja);
452        Camera.Follow(pelaaja);
453        Camera.Zoom(7.5);
454        Ohjaimet(pelaaja);
455
456        var ignorer = new GroupIgnorer();
457        ignorer.Groups.Add(1);
458        ignorer.IsInverted = true;
459        pelaaja.CollisionIgnorer = ignorer;
460    }
461
462
463    void kaupunki(Vector paikka, double leveys, double korkeus)
464    {
465        Aloituspaikka AP = AnnaAloitusPaikka(leveys, korkeus);
466        AP.Position = paikka;
467        Paloituspaikka.Add(AP);
468        for (int i = 0; i < Paloituspaikka.Count; i++)
469        {
470            Add(Paloituspaikka[i]);
471        }
472    }
473
474
475    Aloituspaikka AnnaAloitusPaikka(double leveys, double korkeus)
476    {
477        Aloituspaikka AloitusP = new Aloituspaikka(40, 40);
478
479        switch (Rotu)
480        {
481            case "felidi":
482                AloitusP.Image = CitadelK;
483                AloitusP.Tag = "luoja";
484
485                break;
486            case "Human":
487                AloitusP.Image = Kaupunkikuva;
488                AloitusP.Tag = "luoja";
489                break;
490            case "darkor":
491                AloitusP.Image = Nexuz;
492                AloitusP.Tag = "luoja";
493                break;
494            case "Demoni":
495                AloitusP.Image = Hatchkuva;
496                AloitusP.Tag = "luoja";
497                break;
498
499        }
500        return AloitusP;
501    }
502    void AIaloitus(Vector paikka, double leveys, double korkeus)
503    {
504        Aloituspaikka aiAP = annaAIaloitus(leveys, korkeus);
505        aiAP.Position = paikka;
506        Add(aiAP);
507    }
508
509
510    Aloituspaikka annaAIaloitus(double leveys, double korkeus)
511    {
512        Aloituspaikka paikka = new Aloituspaikka(leveys, korkeus);
513
514        switch (AIrotu)
515        {
516            case "felidi":
517                paikka.Image = CitadelK;
518                paikka.Tag = "AIluoja";
519                for (int i = 0; i < 7; i++)
520                {
521                    Lisätäänyksiköitä();
522                }
523                break;
524            case "Human":
525                paikka.Image = Kaupunkikuva;
526                paikka.Tag = "AIluoja";
527                for (int i = 0; i < 7; i++)
528                {
529                    Lisätäänyksiköitä();
530                }
531                break;
532            case "darkor":
533                paikka.Image = Nexuz;
534                paikka.Tag = "AIluoja";
535                for (int i = 0; i < 7; i++)
536                {
537                    Lisätäänyksiköitä();
538                }
539                break;
540            case "Demoni":
541                paikka.Image = Hatchkuva;
542                paikka.Tag = "AIluoja";
543                break;
544
545        }
546        return paikka;
547    }
548
549    void Metalli(Vector paikka, double leveys, double korkeus)
550    {
551        Resurssi metalli = new Resurssi(20, 20);
552        metalli.Position = paikka;
553        metalli.Image = Mkuva;
554        metalli.Tag = "kiinteä";
555        Add(metalli, -2);
556    }
557
558    void RotuV()
559    {
560        MultiSelectWindow valikko = new MultiSelectWindow("Choose your race",
561"Human", "Elf", "Demon", "Darkor", "Main menu", "Exit");
562        valikko.ItemSelected += RoturuutuS;
563        Add(valikko);
564
565    }
566    void RoturuutuS(int valinta)
567    {
568        switch (valinta)
569        {
570            case 0:
571                Rotu = "Human";
572                Aloitus();
573                break;
574            case 1:
575                Rotu = "felidi";
576                Aloitus();
577                break;
578            case 2:
579                Rotu = "Demoni";
580                Aloitus();
581                break;
582            case 3:
583                Rotu = "darkor";
584                Aloitus();
585                break;
586            case 4:
587                Begin();
588                break;
589            case 5:
590                Exit();
591                break;
592        }
593    }
594    void Aloitus()
595    {
596
597        MediaPlayer.Stop();
598        Määritäpuolet();
599        LuoKentta();
600
601        MediaPlayer.Play("The Complex");
602
603
604
605
606    }
607
608    void Ohjaimet(PhysicsObject pelaaja)
609    {
610
611        Keyboard.Listen(Key.Left, ButtonState.Down, Liiku, null, pelaaja, new Vector(-250, 0));
612        Keyboard.Listen(Key.Left, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
613        Keyboard.Listen(Key.Right, ButtonState.Down, Liiku, null, pelaaja, new Vector(250, 0));
614        Keyboard.Listen(Key.Right, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
615        Keyboard.Listen(Key.Up, ButtonState.Down, Liiku, null, pelaaja, new Vector(0, 250));
616        Keyboard.Listen(Key.Up, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
617        Keyboard.Listen(Key.Down, ButtonState.Down, Liiku, null, pelaaja, new Vector(0, -250));
618        Keyboard.Listen(Key.Down, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
619        Keyboard.Listen(Key.C, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "supply");
620        Keyboard.Listen(Key.Z, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "ATra");
621        Keyboard.Listen(Key.X, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "kouluttaja");
622        Keyboard.Listen(Key.S, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "rangedK");
623        Keyboard.Listen(Key.D, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "hevostalli");
624        Keyboard.Listen(Key.F, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "make");
625        Keyboard.Listen(Key.G, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "eriokois");
626        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, valitseyksiköt, "Valitsee sotilaat");
627        Mouse.Listen(MouseButton.Left, ButtonState.Released, suoritaValinta, "ad");
628        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, suoritaKomento, "ad");
629        Mouse.Listen(MouseButton.Middle, ButtonState.Pressed, valitseRakennus, "valitsee rakennuksen");
630        Keyboard.Listen(Key.A, ButtonState.Pressed, valitsekaikki, "valitsee kaikki yksikköt");
631    }
632
633    void rotuTarkistusRakennaT(string tag)
634    {
635        switch (Rotu)
636        {
637            case "darkor":
638                for(int i = 0; i < Prakennus.Count; i++)
639                {
640                    if (Prakennus[i].Tag.Equals(tag))
641                    {
642                        rakennaT(tag, DR, Prakennus[i].rakennusaika, Prakennus[i].Image);
643                    }
644                    if (Prakennus[i].Tag.Equals("kouluttaja"))
645                    {
646                        voidc();
647                        Summoner();
648                    }
649                }
650                break;
651            case "Human":
652                for (int i = 0; i < Prakennus.Count; i++)
653                {
654                    if (Prakennus[i].Tag.Equals(tag))
655                    {
656                        rakennaT(tag, DR, Prakennus[i].rakennusaika, Prakennus[i].Image);
657                    }
658                }
659                break;
660            default:
661                break;
662        }
663
664    }
665
666
667    void rakennaT(string tag, Image kuva, double aika, Image valmisKuva)
668    {
669        if (!(ButtonState.Down.Equals(Keyboard.GetKeyState(Key.B)))) return;
670        Vector point = Mouse.PositionOnWorld;
671        if (TarkistaOnkoRakentajaaTarjolla(point, 40))
672        {
673            rakennus rak = null;
674            foreach (var item in Prakennus)
675            {
676                if (tag.Equals(item.Tag)) rak = item;
677            }
678            if (rak == null) return;
679            rakennus uusi = rakennus.LuoUusi(rak);
680           // AddCollisionHandler(uusi, TarkistusRakennusTilasta);
681            uusi.Position = point;
682            Add(uusi);
683            //Soita ääni, jos olio tuhottu esim uusi.Destroyed();
684            if (uusi.IsDestroyed) return;
685            uusi.Image = kuva;
686            rakennuus.Add(uusi);
687            Timer ajastin = new Timer();
688            ajastin.Interval = aika;
689            ajastin.Timeout += delegate { if (!(uusi.IsDestroyed)) uusi.Image = valmisKuva; };
690            ajastin.Start(1);
691        }
692
693        //this.rakenna = false;
694    }
695
696    void TarkistusRakennusTilasta(PhysicsObject rakennus, PhysicsObject kohde)
697    {
698        rakennus.Destroy();
699    }
700
701
702    bool TarkistaOnkoRakentajaaTarjolla(Vector point, double etaisyys)
703    {
704        foreach (var item in valitutTyöläiset)
705        {
706            if (Vector.Distance(item.Position, point) <= etaisyys)
707                return true;
708        }
709        return false;
710    }
711
712
713    void sijoitus(int raksa)
714    {
715        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, raksai, "ad", raksa);
716
717    }
718
719    void raksai(int raksa)
720    {
721        PhysicsObject rakentaja = PhysicsObject.CreateStaticObject(20, 20);
722        rakentaja.IgnoresGravity = true;
723        rakentaja.Position = Mouse.PositionOnWorld;
724        rakentaja.Image = DR;
725        Add(rakentaja);
726
727        for (int i = 0; i < Prakennus.Count; i++)
728        {
729
730            if (Prakennus[i].raksaK == raksa)
731            {
732
733                rakenna = false;
734                Timer rajastin = new Timer();
735                Prakennus[i].Position = rakentaja.Position;
736                int ii = i;
737                rajastin.Interval = Prakennus[ii].rakennusaika;
738                rajastin.Timeout += delegate { Add(Prakennus[ii]); };
739
740                rajastin.Timeout += delegate { rakentaja.Destroy(); };
741                rajastin.Start(1);
742
743            }
744        }
745    }
746
747
748    void tarkistaja()
749    {
750        for (int i = 0; i < Prakennus.Count; i++)
751        {
752            if (Prakennus[i].IsAddedToGame)
753            {
754                rakennuus.Add(Prakennus[i]);
755            }
756        }
757    }
758    void valitsekaikki()
759    {
760
761        Valitutsotilaat.Clear();
762        for (int i = 0; i < Sotilaat.Count; i++)
763        {
764            Valitutsotilaat.Add(Sotilaat[i]);
765        }
766    }
767
768    void Liiku(PhysicsObject pelaaja, Vector vektori)
769    {
770        pelaaja.Push(vektori);
771        pelaaja.MaxVelocity = 250;
772
773    }
774    void pysäytä(PhysicsObject pelaaja, Vector vektori)
775    {
776        pelaaja.Stop();
777    }
778
779    void Määritäpuolet()
780    {
781        if (Rotu.Equals("Human"))
782        {
783            AIrotu = RandomGen.SelectOne("felidi", "darkor", "Demoni");
784
785
786
787
788        }
789        else if (Rotu.Equals("darkor"))
790        {
791            AIrotu = RandomGen.SelectOne("felidi", "Human", "Demoni");
792
793        }
794        else if (Rotu.Equals("felidi"))
795        {
796            AIrotu = RandomGen.SelectOne("Human", "darkor", "Demoni");
797
798
799        }
800        else if (Rotu.Equals("Demoni"))
801        {
802            AIrotu = RandomGen.SelectOne("Human", "darkor", "felidi");
803        }
804
805    }
806
807    void Lisätäänyksiköitä()
808    {
809        for (int i = 0; i < Ptyöläiset.Count; i++)
810        {
811            if (Ptyöläiset[i].Tag.Equals("työläinen"))
812            { Add(Ptyöläiset[i]); }
813        }
814
815    }
816
817    void insinoori()
818    {
819        työlainen inssi = new työlainen(2, 2);
820        for (int i = 0; i < Paloituspaikka.Count; i++)
821        {
822            Vector V = new Vector(100, 0);
823            if (Paloituspaikka[i].Tag.Equals("luoja"))
824                inssi.Position = Paloituspaikka[i].Position - V;
825        }
826        Ptyöläiset.Add(inssi);
827
828    }
829
830
831    void spawn()
832    {
833        työlainen Spawn = new työlainen(2, 2);
834        for (int i = 0; i < Paloituspaikka.Count; i++)
835        {
836            Vector V = new Vector(100, 0);
837            if (Paloituspaikka[i].Tag.Equals("luoja"))
838                Spawn.Position = Paloituspaikka[i].Position - V;
839
840        }
841        Spawn.Image = Spawnk;
842        Ptyöläiset.Add(Spawn);
843
844    }
845    void hevoset(Vector paikka, double leveys, double korkeus)
846    {
847        hevonen heppa = new hevonen(20, 20);
848        heppa.Position = paikka;
849        heppa.hmaara = 5;
850        heppa.Tag = "hevonen";
851        heppa.Image = Heppakuva;
852        Add(heppa);
853        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(heppa, "työläinen", hevosia);
854    }
855
856    void kerää_resurssejaM(Resurssi metalli, työlainen kohde)
857    {
858
859    }
860    void hevosia(IPhysicsObject tormaaj, IPhysicsObject kohd)
861    {
862        if (!(tormaaj is hevonen && kohd is työlainen)) return;
863        hevonen tormaaja = (hevonen)tormaaj;
864        työlainen kohde = (työlainen)kohd;
865        kohde.Brain = null;
866        Timer ajastin = new Timer();
867        ajastin.Interval = 10;
868        ajastin.Timeout += delegate { tormaaja.hmaara--; };
869        ajastin.Timeout += delegate { kohde.hevosmäärä = 1; };
870        ajastin.Start();
871    }
872    void reaper()
873    {
874        Sotilas Reaper = new Sotilas(2, 2, 75);
875        Reaper.range = 20;
876        Reaper.visibility = 100;
877        Reaper.vahinko = 10;
878        Reaper.IgnoresGravity = true;
879        Reaper.Image = Raperkuva;
880        Reaper.Tag = "reaper";
881        PSotilaat.Add(Reaper);
882
883    }
884
885
886    void Hyökkää(object lahettajaAivot, EventArgs e, int vahinko)
887    {
888
889    }
890    void Voidwalker(Vector paikka, double leveys, double korkeus, int elämiä)
891    {
892        Sotilas voidwalker = new Sotilas(2, 2, 200);
893        voidwalker.armor = 5;
894        voidwalker.vahinko = 50;
895        voidwalker.visibility = 60;
896        voidwalker.range = 20;
897        voidwalker.Tag = "voidwalker";
898        voidwalker.IgnoresGravity = true;
899        PSotilaat.Add(voidwalker);
900    }
901
902    void luoworker()
903    {
904        työlainen worker = new työlainen(2, 2);
905        for (int i = 0; i < Paloituspaikka.Count; i++)
906        {
907            Vector V = new Vector(100, 0);
908            if (Paloituspaikka[i].Tag.Equals("luoja"))
909                worker.Position = Paloituspaikka[i].Position - V;
910        }
911        Ptyöläiset.Add(worker);
912    }
913    void luoparakit()
914    {
915        rakennus Barracks = new rakennus(30, 15);
916        Barracks.Khinta = 0;
917        Barracks.Mhinta = 150;
918        Barracks.rakennusaika = 45;
919        Barracks.Image = parakkikuva;
920        Barracks.Tag = "kouluttaja";
921        Prakennus.Add(Barracks);
922
923    }
924    void voidc()
925    {
926        rakennus Voidcore = new rakennus(40, 40);
927        Voidcore.Mhinta = 200;
928        Voidcore.Khinta = 150;
929        Voidcore.rakennusaika = 120;
930        Voidcore.elämät = 750;
931        Voidcore.Image = VCIM;
932        Voidcore.Tag = "ATra";
933        Prakennus.Add(Voidcore);
934
935    }
936    void fortress(Vector paikka, double leveys, double korkeus)
937    {
938        tukikohta fortress = new tukikohta(80, 80);
939        fortress.Position = paikka;
940        fortress.Tag = "luoja";
941    }
942
943    void kata(Vector paikka, double leveys, double korkeus)
944    {
945        Sotilas katapultti = new Sotilas(40, 40, 200);
946        katapultti.vahinko = 60;
947        katapultti.range = 100;
948        katapultti.visibility = 80;
949        katapultti.nopeus = 5;
950        katapultti.armor = 4;
951        PSotilaat.Add(katapultti);
952    }
953    void drone()
954    {
955        työlainen Drone = new työlainen(2, 2);
956        for (int i = 0; i < Paloituspaikka.Count; i++)
957        {
958            Vector V = new Vector(100, 0);
959            if (Paloituspaikka[i].Tag.Equals("luoja"))
960                Drone.Position = Paloituspaikka[i].Position - V;
961        }
962        Drone.Image = Dronek;
963        Ptyöläiset.Add(Drone);
964    }
965    void fort(Vector paikka, double leveys, double korkeus)
966    {
967        tukikohta fortress = new tukikohta(80, 80);
968        fortress.Position = paikka;
969        Ptukikohdat.Add(fortress);
970    }
971    void kirves()
972    {
973        Sotilas kirvesmies = new Sotilas(20, 20, 100);
974        for (int i = 0; i < Prakennus.Count; i++)
975        {
976            if (Prakennus[i].Tag.Equals("Barracks"))
977                kirvesmies.Position = Prakennus[i].Position;
978        }
979
980
981        kirvesmies.vahinko = 20;
982        kirvesmies.Mhinta = 50;
983        kirvesmies.visibility = 60;
984        kirvesmies.nopeus = 30;
985        kirvesmies.Tag = "kirvesmies";
986        kirvesmies.range = 20;
987        kirvesmies.armor = 0;
988        kirvesmies.koulutusaika = 35;
989        kirvesmies.Khinta = 0;
990        kirvesmies.Hhinta = 0;
991        PSotilaat.Add(kirvesmies);
992    }
993    void rakennuspaja(Vector paikka, double leveys, double korkeus)
994    {
995        rakennus Työpaja = new rakennus(80, 40);
996        Työpaja.elämät = 600;
997        Työpaja.Mhinta = 200;
998        Työpaja.Khinta = 100;
999        Työpaja.rakennusaika = 120;
1000        Add(Työpaja);
1001    }
1002    Image GI = LoadImage("gateway");
1003    Image WP = LoadImage("warpgate");
1004    void warppoint()
1005    {
1006        rakennus warpgate = new rakennus(15, 15);
1007        warpgate.elämät = 500;
1008        warpgate.rakennusaika = 40;
1009        warpgate.Mhinta = 150;
1010        warpgate.Image = WP;
1011        warpgate.Tag = "kouluttaja";
1012        Prakennus.Add(warpgate);
1013    }
1014    void maatila()
1015    {
1016        rakennus farm = new rakennus(10, 10);
1017        farm.Tag = "supply";
1018        Prakennus.Add(farm);
1019    }
1020    void linnan(Vector paikka, double leveys, double korkeus)
1021    {
1022        tukikohta linna = new tukikohta(80, 80);
1023        linna.Position = paikka;
1024        Add(linna);
1025    }
1026    void luokristalli(Vector paikka, double leveys, double korkeus)
1027    {
1028        kristalli Kristalli = new kristalli(20, 20);
1029        Kristalli.Position = paikka;
1030
1031        Kristalli.Image = CrystalK;
1032        Add(Kristalli, -2);
1033    }
1034    void valitseyksiköt()
1035    {
1036        Vector null1 = Mouse.PositionOnWorld;
1037        valitsin = new GameObject(0.0, 0.0);
1038        valitsin.Color = new Color(200, 0, 0, 100);
1039        Add(valitsin, 3);
1040        Mouse.ListenMovement(0.0, seuraaHiirta, "o", valitsin, null1);
1041    }
1042    void suoritaValinta()
1043    {
1044        for (int i = 0; i < PSotilaat.Count; i++)
1045        {
1046            if (PSotilaat[i].IsAddedToGame)
1047            {
1048                Sotilaat.Add(PSotilaat[i]);
1049            }
1050
1051        }
1052        for (int i = 0; i < Ptyöläiset.Count; i++)
1053        {
1054            if (Ptyöläiset[i].IsAddedToGame)
1055            {
1056                työläiset.Add(Ptyöläiset[i]);
1057            }
1058
1059        }
1060        Valitutsotilaat.Clear();
1061        for (int i = 0; i < Sotilaat.Count; i++)
1062        {
1063
1064            if (valitsin.IsInside(Sotilaat[i].Position))
1065            {
1066                Valitutsotilaat.Add(Sotilaat[i]);
1067            }
1068        }
1069        valitutTyöläiset.Clear();
1070        for (int i = 0; i < Ptyöläiset.Count; i++)
1071        {
1072
1073            if (valitsin.IsInside(työläiset[i].Position))
1074            {
1075                valitutTyöläiset.Add(työläiset[i]);
1076            }
1077
1078        }
1079        Remove(valitsin);
1080    }
1081    void seuraaHiirta(AnalogState hiirenTila, GameObject obj, Vector v)
1082    {
1083        Vector z = Mouse.PositionOnWorld;
1084        obj.Position = new Vector((v.X + z.X) / 2, (v.Y + z.Y) / 2);
1085        obj.Size = new Vector(Math.Abs(z.X - v.X), Math.Abs(z.Y - v.Y));
1086    }
1087    void Sotilailleliikuntaa(PhysicsObject obj)
1088    {
1089        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, suoritaKomento, "Suorittaa komennon");
1090    }
1091    void suoritaKomento()
1092    {
1093        PhysicsObject valtsinJ = new PhysicsObject(2, 2);
1094        valtsinJ.X = Mouse.PositionOnWorld.X;
1095        valtsinJ.Y = Mouse.PositionOnWorld.Y;
1096        valtsinJ.Shape = Shape.Circle;
1097        valtsinJ.Color = Color.BloodRed;
1098        PMoverS.Add(valtsinJ.Position);
1099        PmoverT.Add(valtsinJ.Position);
1100        Add(valtsinJ);
1101        valtsinJ.Destroy();
1102        Vector paikka = PMoverS[0];
1103        Vector paikka2 = PmoverT[0];
1104        for (int i = 0; i < Valitutsotilaat.Count; i++)
1105        {
1106            Valitutsotilaat[i].MoveTo(paikka, Valitutsotilaat[i].nopeus);
1107            Vector U = new Vector(Valitutsotilaat[i].X, Valitutsotilaat[i].Y);
1108            Vector suunta2 = new Vector(paikka.X - U.X, paikka.Y - U.Y);
1109            Valitutsotilaat[i].Angle = suunta2.Angle;
1110            PMoverS.Remove(paikka);
1111        }
1112        for (int i = 0; i < valitutTyöläiset.Count; i++)
1113        {
1114            valitutTyöläiset[i].MoveTo(paikka2, valitutTyöläiset[i].nopeus);
1115            Vector V = new Vector(valitutTyöläiset[i].X, valitutTyöläiset[i].Y);
1116            Vector suunta = new Vector(paikka2.X - V.X, paikka2.Y - V.Y);
1117            valitutTyöläiset[i].Angle = suunta.Angle;
1118            PmoverT.Remove(paikka2);
1119        }
1120    }
1121    void Rotualustus()
1122    {
1123        switch (Rotu)
1124        {
1125            case "Human":
1126                luoparakit();
1127                kirves();
1128                insinoori();
1129                break;
1130            case "darkor":
1131                Luocore();
1132                spawn();
1133                reaper();
1134                warppoint();
1135                break;
1136            case "felidi":
1137                luoworker();
1138                break;
1139            case "Demoni":
1140                drone();
1141                break;
1142            default:
1143                // throw new Exception("Kaatui defaulttiin");
1144                break;
1145        }
1146    }
1147
1148
1149    void Luocore()
1150    {
1151        rakennus core = new rakennus(10, 10);
1152        core.Mhinta = 100;
1153        core.elämät = 250;
1154        core.rakennusaika = 30;
1155        core.Tag = "supply";
1156        core.raksaK = 2;
1157        core.Image = Corek;
1158        Prakennus.Add(core);
1159    }
1160    Image Sumk = LoadImage("Summoner");
1161    void Summoner()
1162    {
1163        rakennus summoner = new rakennus(20, 20);
1164        summoner.Mhinta = 200;
1165        summoner.Khinta = 100;
1166        summoner.elämät = 450;
1167        summoner.rakennusaika = 50;
1168        summoner.Tag = "hevostalli";
1169        summoner.Image = Sumk;
1170        Prakennus.Add(summoner);
1171    }
1172    void valitseRakennus()
1173    {
1174        valitutRakennukset.Clear();
1175        PhysicsObject Rakvalitsin = PhysicsObject.CreateStaticObject(10, 10);
1176        Rakvalitsin.Position = Mouse.PositionOnWorld;
1177        Add(Rakvalitsin);
1178        for (int i = 0; i < rakennuus.Count; i++)
1179        {
1180
1181            if (rakennuus[i].Position.Equals(Rakvalitsin.Position))
1182            {
1183                valitutRakennukset.Add(rakennuus[i]);
1184            }
1185        }
1186        Timer jastin = new Timer();
1187        jastin.Interval = 0.5;
1188        jastin.Timeout += delegate { Rakvalitsin.Destroy(); };
1189        jastin.Start(1);
1190       
1191    }
1192
1193}
Note: See TracBrowser for help on using the repository browser.