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

Revision 4025, 50.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;
11
12public interface Valittava
13{
14    void Hyokkaa(int vahinko);
15    bool Kuollut();
16    Vector GetPosition();
17    double Koko();
18}
19
20class Aloituspaikka : PhysicsObject, Valittava
21{
22    private int elämät { get; set; }
23    public int ObjectID { get; set; }
24    public string Rotu { get; set; }
25
26    public Vector GetPosition()
27    {
28        return this.Position;
29    }
30
31
32    public double Koko()
33    {
34        return this.Width / 2.0;
35    }
36
37
38    public bool Kuollut()
39    {
40        return elämät <= 0;
41    }
42
43    public void Hyokkaa(int vahinko)
44    {
45        elämät -= vahinko;
46        if (elämät == 0)
47            this.Destroy();
48    }
49    public Aloituspaikka(double leveys, double korkeus)
50        : base(leveys, korkeus)
51    {
52        this.MakeStatic();
53        elämät = 2000;
54        ObjectID = 1;
55    }
56
57
58}
59
60
61class tukikohta : Aloituspaikka
62{
63    public new int elämät { get; set; }
64    public int Mhinta { get; set; }
65    private int raksaK { get; set; }
66    public tukikohta(double leveys, double korkeus)
67        : base(leveys, korkeus)
68    {
69        elämät = 1500;
70        raksaK = 1;
71        this.MakeStatic();
72        Mhinta = 400;
73        ObjectID = 1;
74    }
75
76
77
78}
79class rakennus : tukikohta
80{
81    public new int Mhinta { get; set; }
82    public int Khinta { get; set; }
83    public int rakennusaika { get; set; }
84    public int elämät { get; set; }
85    public int raksaK { get; set; }
86    public rakennus(double leveys, double korkeus)
87        : base(leveys, korkeus)
88    {
89        this.MakeStatic();
90        ObjectID = 1;
91    }
92
93    public static rakennus LuoUusi(rakennus rak)
94    {
95        rakennus uusi = new rakennus(rak.Size.X, rak.Size.Y);
96        uusi.Mhinta = rak.Mhinta;
97        uusi.Khinta = rak.Khinta;
98        uusi.rakennusaika = rak.rakennusaika;
99        uusi.elämät = rak.elämät;
100        uusi.raksaK = rak.elämät;
101        return uusi;
102    }
103}
104
105class Resurssi : PhysicsObject
106{
107    private int maara { get; set; }
108
109    public int ObjectID { get; set; }
110
111    public Resurssi(double leveys, double korkeus)
112        : base(leveys, korkeus)
113    {
114        maara = 1000;
115        this.MakeStatic();
116        ObjectID = 1;
117    }
118
119
120}
121class kristalli : PhysicsObject
122{
123    public int Kmaara { get; set; }
124    public kristalli(double leveys, double korkeus)
125        : base(leveys, korkeus)
126    {
127        Kmaara = 750;
128        this.MakeStatic();
129    }
130
131
132    public int Louhikristallia()
133    {
134        Kmaara -= 1;
135        if (Kmaara == 0) this.Destroy();
136        return 1;
137    }
138}
139class hevonen : PhysicsObject
140{
141    public int hmaara;
142    public int ObjectID { get; set; }
143    public hevonen(double leveys, double korkeus)
144        : base(leveys, korkeus)
145    {
146        this.MakeStatic();
147        ObjectID = 1;
148        Timer ajastin = new Timer();
149        ajastin.Interval = 10;
150        ajastin.Timeout += delegate { tarkkaileHevostenMaaraa(hmaara); };
151        ajastin.Start();
152    }
153
154
155    public void tarkkaileHevostenMaaraa(int Hmaara)
156    {
157
158        if (Hmaara < 5)
159        {
160            Hmaara++;
161        }
162    }
163}
164
165class työlainen : PhysicsObject, Valittava
166{
167    public string Rotu { get; set; }
168    public int koulutusaika { get; set; }
169    public int Mhinta { get; set; }
170    public int hevosmäärä { get; set; }
171    public int nopeus { get; set; }
172    public int visibility { get; set; }
173    public int kantomaara { get; set; }
174    public int kmaara { get; set; }
175    public int ObjectID { get; set; }
176    public int liikkumistila { get; set; }
177    public int supplycost { get; set; }
178    public int elämät { get; set; }
179
180    public Vector GetPosition()
181    {
182        return this.Position;
183    }
184    public double Koko()
185    {
186        return this.Width / 2.0;
187    }
188
189    public bool Kuollut()
190    {
191        return elämät <= 0;
192    }
193
194    public void Hyokkaa(int vahinko)
195    {
196        elämät -= vahinko;
197        if (elämät == 0)
198            this.Destroy();
199    }
200    public työlainen(double leveys, double korkeus)
201        : base(leveys, korkeus)
202    {
203        kantomaara = 0;
204        nopeus = 10;
205        elämät = 40;
206        hevosmäärä = 0;
207        Mhinta = 50;
208        this.CanRotate = false;
209        koulutusaika = 10;
210        ObjectID = 2;
211        GameObject rakentaja = new GameObject(2, 2);
212        this.IgnoresGravity = true;
213        this.Tag = "työläinen";
214
215    }
216
217
218
219}
220class Sotilas : PhysicsObject, Valittava
221{
222    public string Rotu { get; set; }
223    public int vahinko { get; set; }
224    public int ObjectID { get; set; }
225    public int koulutusaika { get; set; }
226    public int Mhinta { get; set; }
227    public int Khinta { get; set; }
228    public int Hhinta { get; set; }
229    public int range { get; set; }
230    public int nopeus { get; set; }
231    AssaultRifle ase;
232    public int visibility { get; set; }
233    public int armor { get; set; }
234    public int elämät { get; set; }
235    public int Liikkumistila { get; set; }
236    public double hyökkäysaika { get { return ase.FireRate; } set { ase.FireRate = value; } }
237    public int supplycost { get; set; }
238    private Valittava kohde;
239    public Valittava Kohde { get { return kohde; } set { Taistele(value); } }
240
241    public Vector GetPosition()
242    {
243        return this.Position;
244    }
245
246
247    public bool Kuollut()
248    {
249        return elämät <= 0;
250    }
251
252    public void Hyokkaa(int vahinko)
253    {
254        elämät -= vahinko;
255        if (elämät == 0)
256            this.Destroy();
257    }
258
259
260    public void Taistele(Valittava kohde)
261    {
262        this.kohde = kohde;
263        Timer ajastin = new Timer();
264        if(hyökkäysaika != 0)
265        ajastin.Interval = hyökkäysaika;
266        else throw new Exception("Hyökkäysaika oli 0!");
267        ajastin.Start();
268        ajastin.Timeout += delegate { LaskeTaistelu(ajastin); };
269    }
270    public double Koko()
271    {
272        return this.Width / 2.0;
273    }
274    public void LaskeTaistelu(Timer ajastin)
275    {
276        if (kohde == null) return;
277        if (Vector.Distance(this.Position, kohde.GetPosition()) > this.range + kohde.Koko()) return;
278        kohde.Hyokkaa(this.vahinko);
279        if (kohde.Kuollut())
280        {
281            if(ajastin != null) ajastin.Stop();
282            ajastin = null;
283            kohde = null;
284        }
285
286    }
287
288
289    public Sotilas(double leveys, double korkeus, int elämiä)
290        : base(leveys, korkeus)
291    {
292        this.IgnoresGravity = true;
293        Liikkumistila = 0;;
294        ObjectID = 2;
295        ase = new AssaultRifle(1, 1);
296        ase.InfiniteAmmo = true;
297        ase.IsVisible = false;
298        ase.AmmoIgnoresGravity = true;
299        ase.CanHitOwner = false;
300        this.Add(ase);
301        elämät = elämiä;
302        this.CanRotate = false;
303        this.Restitution = 0;
304        this.Brain = aivot(range, visibility, nopeus, vahinko); // , liikkumiset);
305    }
306
307   public static Sotilas LuoUusi(Sotilas sotilas)
308    {
309        Sotilas uusi = new Sotilas(sotilas.Size.X, sotilas.Size.Y, sotilas.elämät);
310        uusi.Khinta = sotilas.Khinta;
311        uusi.Mhinta = sotilas.Mhinta;
312        uusi.supplycost = sotilas.supplycost;
313        uusi.vahinko = sotilas.vahinko;
314        uusi.range = sotilas.range;
315        uusi.visibility = sotilas.visibility;
316        uusi.ase = sotilas.ase;
317        uusi.Brain = sotilas.Brain;
318        uusi.armor = sotilas.armor;
319        uusi.Rotu = sotilas.Rotu;
320        uusi.koulutusaika = sotilas.koulutusaika;
321        uusi.hyökkäysaika = sotilas.hyökkäysaika;
322        uusi.nopeus = sotilas.nopeus;
323        uusi.Hhinta = sotilas.Hhinta;
324        return uusi;
325    }
326
327
328    Brain aivot(int range, int visibility, int nopeus, int vahinko) //, List<IGameObject> liikkumiset)
329    {
330        FollowerBrain aivot = new FollowerBrain("v");
331        //aivot.ObjectsToFollow = liikkumiset;
332        //aivot.ObjectsToFollow.Add(item);
333        aivot.Speed = nopeus;
334        aivot.DistanceFar = visibility;
335        aivot.DistanceClose = range;
336        aivot.StopWhenTargetClose = true;
337
338
339        aivot.TargetClose += delegate { Hyökkää(aivot); };
340        return aivot;
341
342    }
343
344    public void Hyökkää(FollowerBrain lahettajaAivot)
345    {
346        IGameObject go = lahettajaAivot.CurrentTarget;
347        //if(go.Tag == "vihutyöläinen")
348        //{
349
350        //}
351
352
353    }
354
355}
356
357
358
359public class Lord_Of_the_Swords : PhysicsGame
360{
361    bool rakenna;
362    Image ruoho = LoadImage("ruoho");
363    string Rotu = String.Empty;
364    GameObject valitsin;
365    string AIrotu = String.Empty;
366    Image parakkikuva = LoadImage("barracks");
367    Image Nexuz = LoadImage("nexus'");
368    Image berserkki = LoadImage("berserkki");
369    Image spawnim = LoadImage("spawn");
370    Image VCIM = LoadImage("voidcore");
371    Image Mkuva = LoadImage("metalli");
372    Image Spawnk = LoadImage("spawn");
373    Image Kaupunkikuva = LoadImage("kaupunki");
374    Image Corek = LoadImage("core");
375    Image Raperkuva = LoadImage("Reaper.1");
376    Image CitadelK = LoadImage("citadel");
377    Image CrystalK = LoadImage("kristalli");
378    Image Vuorik = LoadImage("vuori");
379    Image Hatchkuva = LoadImage("hATCHERY");
380    Image Heppakuva = LoadImage("hevonen");
381    Image Gateway = LoadImage("gateway");
382    Image Dronek = LoadImage("Drone");
383    Image DR = LoadImage("darkorrakentaa");
384    List<Sotilas> Valitutsotilaat = new List<Sotilas>();
385    List<Sotilas> Sotilaat = new List<Sotilas>();
386    List<työlainen> työläiset = new List<työlainen>();
387    List<Sotilas> PSotilaat = new List<Sotilas>();
388    List<työlainen> Ptyöläiset = new List<työlainen>();
389    List<työlainen> valitutTyöläiset = new List<työlainen>();
390    List<Vector> PMoverS = new List<Vector>();
391    List<Vector> PmoverT = new List<Vector>();
392    List<Vector> AImoverT = new List<Vector>();
393    List<Vector> AIMoverS = new List<Vector>();
394    List<Resurssi> RES = new List<Resurssi>();
395    List<Aloituspaikka> Paloituspaikka = new List<Aloituspaikka>();
396    List<rakennus> Prakennus = new List<rakennus>();
397    List<rakennus> rakennuus = new List<rakennus>();
398    List<rakennus> valitutRakennukset = new List<rakennus>();
399    List<tukikohta> Ptukikohdat = new List<tukikohta>();
400    List<tukikohta> tukikohdat = new List<tukikohta>();
401    List<Aloituspaikka> AIaloituspaikka = new List<Aloituspaikka>();
402    List<Sotilas> AIValitutsotilaat = new List<Sotilas>();
403    List<Sotilas> ISotilaat = new List<Sotilas>();
404    List<työlainen> Ityöläiset = new List<työlainen>();
405    List<Sotilas> AISotilaat = new List<Sotilas>();
406    List<työlainen> AItyöläiset = new List<työlainen>();
407    List<työlainen> AIvalitutTyöläiset = new List<työlainen>();
408    List<rakennus> AIrakennus = new List<rakennus>();
409    List<rakennus> Irakennuus = new List<rakennus>();
410    List<rakennus> valitutIRakennukset = new List<rakennus>();
411    List<tukikohta> AItukikohdat = new List<tukikohta>();
412    List<tukikohta> Itukikohdat = new List<tukikohta>();
413    List<työlainen> DemoniT = new List<työlainen>();
414    List<tukikohta> DemoniTu = new List<tukikohta>();
415    List<Sotilas> DemoniS = new List<Sotilas>();
416    List<rakennus> DemoniR = new List<rakennus>();
417    List<työlainen> felidiT = new List<työlainen>();
418    List<tukikohta> felidiTu = new List<tukikohta>();
419    List<Sotilas> felidiS = new List<Sotilas>();
420    List<rakennus> felidiR = new List<rakennus>();
421    List<työlainen> humanT = new List<työlainen>();
422    List<tukikohta> humanTu = new List<tukikohta>();
423    List<Sotilas> humanS = new List<Sotilas>();
424    List<rakennus> humanR = new List<rakennus>();
425    List<työlainen> darkorT = new List<työlainen>();
426    List<tukikohta> darkorTu = new List<tukikohta>();
427    List<Sotilas> darkorS = new List<Sotilas>();
428    List<rakennus> darkorR = new List<rakennus>();
429    IntMeter Pkristallit;
430    IntMeter Phevoset;
431    IntMeter Pmetallit;
432    IntMeter PsupplyC;
433    IntMeter PsupplyU;
434    public override void Begin()
435    {
436        ClearAll();
437        Mouse.IsCursorVisible = true;
438        //SetWindowSize(1920, 1080, true);
439        MediaPlayer.Play("Chase");
440        Valikko();
441        Camera.Reset();
442        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Lopeta peli");
443        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
444
445    }
446
447
448    void Pmetallilaskuri()
449    {
450        Pmetallit = new IntMeter(50);
451        Pkristallit = new IntMeter(0);
452        Label pisteNaytto = new Label();
453        pisteNaytto.X = Screen.Left + 100;
454        pisteNaytto.Y = Screen.Top - 100;
455        pisteNaytto.TextColor = Color.Black;
456
457
458        pisteNaytto.BindTo(Pmetallit);
459        Add(pisteNaytto);
460        Pmetallit = new IntMeter(50);
461
462        Label PkristallitN = new Label();
463        PkristallitN.X = Screen.Left + 100;
464        PkristallitN.Y = Screen.Top - 50;
465        PkristallitN.TextColor = Color.Black;
466
467
468        PkristallitN.BindTo(Pkristallit);
469        Add(PkristallitN);
470    }
471    void Valikko()
472    {
473        MultiSelectWindow valikko = new MultiSelectWindow("Lords of the swords",
474"SinglePlayer", "Instructions", "Lopeta");
475        valikko.ItemSelected += Aloitusruutu;
476        Add(valikko);
477
478    }
479    void Aloitusruutu(int valinta)
480    {
481        switch (valinta)
482        {
483            case 0:
484                SinglePlayer();
485                break;
486            case 1:
487
488                break;
489            case 2:
490                Exit();
491                break;
492        }
493    }
494    void SinglePlayer()
495    {
496        MultiSelectWindow valikko2 = new MultiSelectWindow("Single player",
497            "Campaigin", "Conquest", "Custom game", "Back to the menu");
498        valikko2.ItemSelected += Svalikko;
499        Add(valikko2);
500    }
501    void Svalikko(int valinta)
502    {
503        switch (valinta)
504        {
505            case 0:
506                RotuV();
507                break;
508            case 1:
509                RotuV();
510                break;
511            case 2:
512                RotuV();
513                break;
514            case 3:
515                Begin();
516                break;
517        }
518    }
519
520
521    void LuoKentta()
522    {
523
524        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("OmaRTS kentta");
525        ruudut.SetTileMethod(Color.Black, Pelaaja);
526        ruudut.SetTileMethod(Color.White, kaupunki);
527        ruudut.SetTileMethod(Color.FromHexCode("FF00D4"), reuna);
528        ruudut.SetTileMethod(Color.FromHexCode("FFFF00"), Metalli);
529        ruudut.SetTileMethod(Color.FromHexCode("0A0AFF"), luokristalli);
530        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), Luovuori);
531        ruudut.SetTileMethod(Color.FromHexCode("808080"), AIaloitus);
532        ruudut.SetTileMethod(Color.FromHexCode("FF0010"), hevoset);
533        ruudut.Execute(20, 20);
534        Rotualustus();
535        AIalustus();
536        Level.BackgroundColor = Color.DarkForestGreen;
537        Pmetallilaskuri();
538
539
540        foreach (var border in Level.CreateBorders())
541        {
542            var ignorer = new GroupIgnorer();
543            ignorer.Groups.Add(1);
544            ignorer.IsInverted = true;
545            border.CollisionIgnorer = ignorer;
546
547        }
548        for (int i = 0; i < 7; i++)
549        {
550            Lisätäänyksiköitä();
551        }
552
553    }
554    void Luovuori(Vector paikka, double leveys, double korkeus)
555    {
556        PhysicsObject vuori = PhysicsObject.CreateStaticObject(20, 20);
557        vuori.Position = paikka;
558        vuori.Image = Vuorik;
559        Add(vuori, -2);
560    }
561    void reuna(Vector paikka, double leveys, double korkeus)
562    {
563        PhysicsObject Reuna = PhysicsObject.CreateStaticObject(20, 20);
564        Reuna.Position = paikka;
565        Reuna.IgnoresCollisionResponse = true;
566        Reuna.Image = ruoho;
567        Add(Reuna, -3);
568    }
569
570
571
572    void Pelaaja(Vector paikka, double leveys, double korkeus)
573    {
574        PhysicsObject pelaaja = new PhysicsObject(1, 1);
575        pelaaja.Position = paikka;
576        pelaaja.IsVisible = false;
577        pelaaja.CanRotate = false;
578        pelaaja.IgnoresGravity = true;
579        pelaaja.IgnoresCollisionResponse = false;
580        pelaaja.Restitution = 0;
581        Add(pelaaja);
582        Camera.Follow(pelaaja);
583        Camera.Zoom(7.5);
584        Ohjaimet(pelaaja);
585
586        var ignorer = new GroupIgnorer();
587        ignorer.Groups.Add(1);
588        ignorer.IsInverted = true;
589        pelaaja.CollisionIgnorer = ignorer;
590    }
591
592
593    void kaupunki(Vector paikka, double leveys, double korkeus)
594    {
595        Aloituspaikka AP = AnnaAloitusPaikka(leveys, korkeus);
596        AP.Position = paikka;
597        Paloituspaikka.Add(AP);
598        for (int i = 0; i < Paloituspaikka.Count; i++)
599        {
600            Add(Paloituspaikka[i]);
601        }
602    }
603
604
605    Aloituspaikka AnnaAloitusPaikka(double leveys, double korkeus)
606    {
607        Aloituspaikka AloitusP = new Aloituspaikka(40, 40);
608
609        switch (Rotu)
610        {
611            case "felidi":
612                AloitusP.Image = CitadelK;
613                AloitusP.Tag = "luoja";
614
615                break;
616            case "Human":
617                AloitusP.Image = Kaupunkikuva;
618                AloitusP.Tag = "luoja";
619                break;
620            case "darkor":
621                AloitusP.Image = Nexuz;
622                AloitusP.Tag = "luoja";
623                break;
624            case "Demoni":
625                AloitusP.Image = Hatchkuva;
626                AloitusP.Tag = "luoja";
627                break;
628
629        }
630        return AloitusP;
631    }
632    void AIaloitus(Vector paikka, double leveys, double korkeus)
633    {
634        Aloituspaikka aiAP = annaAIaloitus(leveys, korkeus);
635        aiAP.Position = paikka;
636        AIaloituspaikka.Add(aiAP);
637        Add(aiAP);
638    }
639
640
641    Aloituspaikka annaAIaloitus(double leveys, double korkeus)
642    {
643        Aloituspaikka paikka = new Aloituspaikka(40, 40);
644
645        switch (AIrotu)
646        {
647            case "felidi":
648                paikka.Image = CitadelK;
649
650                paikka.Tag = "luojaAI";
651                for (int i = 0; i < 7; i++)
652                {
653                    LisätäänyksiköitäAI();
654                }
655                break;
656            case "Human":
657                paikka.Image = Kaupunkikuva;
658                paikka.Tag = "luojaAI";
659                for (int i = 0; i < 7; i++)
660                {
661                    LisätäänyksiköitäAI();
662                }
663                break;
664            case "darkor":
665                paikka.Image = Nexuz;
666                paikka.Tag = "luojaAI";
667                for (int i = 0; i < 7; i++)
668                {
669                    LisätäänyksiköitäAI();
670                }
671                break;
672            case "Demoni":
673                paikka.Image = Hatchkuva;
674                paikka.Tag = "luojaAI";
675                break;
676
677        }
678        return paikka;
679    }
680
681    void Metalli(Vector paikka, double leveys, double korkeus)
682    {
683        Resurssi metalli = new Resurssi(20, 20);
684        metalli.Position = paikka;
685        metalli.Image = Mkuva;
686        metalli.Tag = "kiinteä";
687        Add(metalli, -2);
688    }
689
690    void RotuV()
691    {
692        MultiSelectWindow valikko = new MultiSelectWindow("Choose your race",
693"Human", "Elf", "Demon", "Darkor", "Main menu", "Exit");
694        valikko.ItemSelected += RoturuutuS;
695        Add(valikko);
696
697    }
698    void RoturuutuS(int valinta)
699    {
700        switch (valinta)
701        {
702            case 0:
703                Rotu = "Human";
704                Aloitus();
705                break;
706            case 1:
707                Rotu = "felidi";
708                Aloitus();
709                break;
710            case 2:
711                Rotu = "Demoni";
712                Aloitus();
713                break;
714            case 3:
715                Rotu = "darkor";
716                Aloitus();
717                break;
718            case 4:
719                Begin();
720                break;
721            case 5:
722                Exit();
723                break;
724        }
725    }
726    void Aloitus()
727    {
728
729        MediaPlayer.Stop();
730        Määritäpuolet();
731        LuoKentta();
732
733        MediaPlayer.Play("The Complex");
734
735
736
737
738    }
739
740    void Ohjaimet(PhysicsObject pelaaja)
741    {
742
743        Keyboard.Listen(Key.Left, ButtonState.Down, Liiku, null, pelaaja, new Vector(-250, 0));
744        Keyboard.Listen(Key.Left, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
745        Keyboard.Listen(Key.Right, ButtonState.Down, Liiku, null, pelaaja, new Vector(250, 0));
746        Keyboard.Listen(Key.Right, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
747        Keyboard.Listen(Key.Up, ButtonState.Down, Liiku, null, pelaaja, new Vector(0, 250));
748        Keyboard.Listen(Key.Up, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
749        Keyboard.Listen(Key.Down, ButtonState.Down, Liiku, null, pelaaja, new Vector(0, -250));
750        Keyboard.Listen(Key.Down, ButtonState.Released, pysäytä, null, pelaaja, Vector.Zero);
751        Keyboard.Listen(Key.C, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "supply");
752        Keyboard.Listen(Key.Z, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "ATra");
753        Keyboard.Listen(Key.X, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "kouluttaja");
754        Keyboard.Listen(Key.S, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "rangedK");
755        Keyboard.Listen(Key.D, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "hevostalli");
756        Keyboard.Listen(Key.F, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "make");
757        Keyboard.Listen(Key.G, ButtonState.Pressed, rotuTarkistusRakennaT, "Rakentaa supplyn", "eriokois");
758        Keyboard.Listen(Key.Y, ButtonState.Pressed, koulutaT, "kouluttaa raskaan yksikön", "raskas");
759        Keyboard.Listen(Key.U, ButtonState.Pressed, koulutaT, "kouluttaa raskaan yksikön", "peruss");
760        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, valitseyksiköt, "Valitsee sotilaat");
761        Mouse.Listen(MouseButton.Left, ButtonState.Released, suoritaValinta, "ad");
762        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, suoritaKomento, "ad");
763        Keyboard.Listen(Key.A, ButtonState.Pressed, valitsekaikki, "valitsee kaikki yksikköt");
764    }
765
766    void rotuTarkistusRakennaT(string tag)
767    {
768        switch (Rotu)
769        {
770            case "darkor":
771                for (int i = 0; i < Prakennus.Count; i++)
772                {
773                    if (Prakennus[i].Tag.ToString().StartsWith(tag))
774                    {
775                        rakennaT(tag, DR, Prakennus[i].rakennusaika, Prakennus[i].Image);
776                    }
777                   
778                }
779                break;
780            case "Human":
781                for (int i = 0; i < Prakennus.Count; i++)
782                {
783                    if (Prakennus[i].Tag.ToString().StartsWith(tag))
784                    {
785                        rakennaT(tag, DR, Prakennus[i].rakennusaika, Prakennus[i].Image);
786                    }
787                }
788                break;
789            case "Demoni":
790                for (int i = 0; i < Prakennus.Count; i++)
791                {
792                    if (Prakennus[i].Tag.ToString().StartsWith(tag))
793                    {
794                        rakennaT(tag, DR, Prakennus[i].rakennusaika, Prakennus[i].Image);
795                    }
796                }
797                break;
798            case "felidi":
799                for (int i = 0; i < Prakennus.Count; i++)
800                {
801                    if (Prakennus[i].Tag.ToString().StartsWith(tag))
802                    {
803                        rakennaT(tag, DR, Prakennus[i].rakennusaika, Prakennus[i].Image);
804                    }
805                }
806                break;
807            default:
808                break;
809        }
810
811    }
812
813    void koulutaT(string tag)
814    {
815        if (!(ButtonState.Down.Equals(Keyboard.GetKeyState(Key.T)))) return;
816        switch (Rotu)
817        {
818            case "darkor":
819                for (int i = 0; i < Prakennus.Count; i++)
820                {
821                    if (PSotilaat[i].Tag.Equals(tag))
822                    {
823                        kouluta(tag, PSotilaat[i].koulutusaika, PSotilaat[i].Image);
824                    }
825
826                   
827                }
828                break;
829            case "Human":
830                for (int i = 0; i < Prakennus.Count; i++)
831                {
832                    if (PSotilaat[i].Tag.Equals(tag))
833                    {
834                        kouluta(tag,  PSotilaat[i].koulutusaika, PSotilaat[i].Image);
835                    }
836                }
837                break;
838            case "Demoni":
839                for (int i = 0; i < Prakennus.Count; i++)
840                {
841                    if (PSotilaat[i].Tag.Equals(tag))
842                    {
843                        kouluta(tag,  PSotilaat[i].koulutusaika, PSotilaat[i].Image);
844                    }
845                }
846                break;
847            case "felidi":
848                for (int i = 0; i < PSotilaat.Count; i++)
849                {
850                    if (PSotilaat[i].Tag.Equals(tag))
851                    {
852                        kouluta(tag, PSotilaat[i].koulutusaika, PSotilaat[i].Image);
853                    }
854                }
855                break;
856            default:
857                break;
858        }
859    }
860    void kouluta(string tag, double aika, Image kuva)
861    {
862        Vector Z = new Vector();
863        for (int i = 0; i < valitutRakennukset.Count; i++)
864        {
865            Z = valitutRakennukset[i].Position;
866         
867        }
868       
869       Z  += new Vector(0, 30);
870       
871        if (TarkistaOnkoRakennustaTarjolla(Z, 40))
872        {
873            Sotilas sotilas = null;
874            foreach (var item in PSotilaat)
875            {
876                if (tag.Equals(item.Tag)) sotilas = item;
877            }
878            if (sotilas == null) return;
879            Sotilas sotilas2 = Sotilas.LuoUusi(sotilas);
880            sotilas2.Position = Z;
881            sotilas2.Image = kuva;
882            Sotilaat.Add(sotilas2);
883            Timer ajastin = new Timer();
884            ajastin.Interval = aika;
885            ajastin.Timeout += delegate { Add(sotilas2); };
886            ajastin.Start(1);
887        }
888
889    }
890    void rakennaT(string tag, Image kuva, double aika, Image valmisKuva)
891    {
892        if (!(ButtonState.Down.Equals(Keyboard.GetKeyState(Key.B)))) return;
893        Vector point = Mouse.PositionOnWorld;
894        if (TarkistaOnkoRakentajaaTarjolla(point, 40))
895        {
896            rakennus rak = null;
897            foreach (var item in Prakennus)
898            {
899                if (tag.Equals(item.Tag)) rak = item;
900            }
901            if (rak == null) return;
902            rakennus uusi = rakennus.LuoUusi(rak);
903            // AddCollisionHandler(uusi, TarkistusRakennusTilasta);
904            uusi.Position = point;
905            Add(uusi);
906            //Soita ääni, jos olio tuhottu esim uusi.Destroyed();
907            if (uusi.IsDestroyed) return;
908            uusi.Image = kuva;
909            rakennuus.Add(uusi);
910            Timer ajastin = new Timer();
911            ajastin.Interval = aika;
912            ajastin.Timeout += delegate { if (!(uusi.IsDestroyed)) uusi.Image = valmisKuva; };
913            ajastin.Start(1);
914        }
915
916        //this.rakenna = false;
917    }
918
919    void TarkistusRakennusTilasta(PhysicsObject rakennus, PhysicsObject kohde)
920    {
921        rakennus.Destroy();
922    }
923
924
925    bool TarkistaOnkoRakentajaaTarjolla(Vector point, double etaisyys)
926    {
927        foreach (var item in valitutTyöläiset)
928        {
929            if (Vector.Distance(item.Position, point) <= etaisyys)
930                return true;
931        }
932        return false;
933    }
934
935    bool TarkistaOnkoRakennustaTarjolla(Vector point, double etaisyys)
936    {
937        foreach (var item in valitutRakennukset)
938        {
939            if (Vector.Distance(item.Position, point) <= etaisyys)
940                return true;
941        }
942        return false;
943    }
944
945
946
947    void sijoitus(int raksa)
948    {
949        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, raksai, "ad", raksa);
950
951    }
952
953    void raksai(int raksa)
954    {
955        PhysicsObject rakentaja = PhysicsObject.CreateStaticObject(20, 20);
956        rakentaja.IgnoresGravity = true;
957        rakentaja.Position = Mouse.PositionOnWorld;
958        rakentaja.Image = DR;
959        Add(rakentaja);
960
961        for (int i = 0; i < Prakennus.Count; i++)
962        {
963
964            if (Prakennus[i].raksaK == raksa)
965            {
966
967                rakenna = false;
968                Timer rajastin = new Timer();
969                Prakennus[i].Position = rakentaja.Position;
970                int ii = i;
971                rajastin.Interval = Prakennus[ii].rakennusaika;
972                rajastin.Timeout += delegate { Add(Prakennus[ii]); };
973
974                rajastin.Timeout += delegate { rakentaja.Destroy(); };
975                rajastin.Start(1);
976
977            }
978        }
979    }
980
981
982    void tarkistaja()
983    {
984        for (int i = 0; i < Prakennus.Count; i++)
985        {
986            if (Prakennus[i].IsAddedToGame)
987            {
988                rakennuus.Add(Prakennus[i]);
989            }
990        }
991    }
992    void valitsekaikki()
993    {
994
995        Valitutsotilaat.Clear();
996        for (int i = 0; i < Sotilaat.Count; i++)
997        {
998            Valitutsotilaat.Add(Sotilaat[i]);
999        }
1000    }
1001
1002    void Liiku(PhysicsObject pelaaja, Vector vektori)
1003    {
1004        pelaaja.Push(vektori);
1005        pelaaja.MaxVelocity = 250;
1006
1007    }
1008    void pysäytä(PhysicsObject pelaaja, Vector vektori)
1009    {
1010        pelaaja.Stop();
1011    }
1012
1013    void Määritäpuolet()
1014    {
1015        if (Rotu.Equals("Human"))
1016        {
1017            AIrotu = RandomGen.SelectOne("felidi", "darkor", "Demoni");
1018
1019
1020
1021
1022        }
1023        else if (Rotu.Equals("darkor"))
1024        {
1025            AIrotu = RandomGen.SelectOne("felidi", "Human", "Demoni");
1026
1027        }
1028        else if (Rotu.Equals("felidi"))
1029        {
1030            AIrotu = RandomGen.SelectOne("Human", "darkor", "Demoni");
1031
1032
1033        }
1034        else if (Rotu.Equals("Demoni"))
1035        {
1036            AIrotu = RandomGen.SelectOne("Human", "darkor", "felidi");
1037        }
1038
1039    }
1040
1041    void Lisätäänyksiköitä()
1042    {
1043        for (int i = 0; i < Ptyöläiset.Count; i++)
1044        {
1045            if (Ptyöläiset[i].Tag.ToString().StartsWith("työläinen"))
1046            { Add(Ptyöläiset[i]); }
1047        }
1048
1049    }
1050    void LisätäänyksiköitäAI()
1051    {
1052        for (int i = 0; i < AItyöläiset.Count; i++)
1053        {
1054            if (AItyöläiset[i].Tag.ToString().StartsWith("työläinen"))
1055            { Add(AItyöläiset[i]); }
1056            {
1057                Vector V = new Vector(100, 0);
1058                if (AIaloituspaikka[i].Tag.ToString().StartsWith("luoja"))
1059                    AItyöläiset[i].Position = AIaloituspaikka[i].Position - V;
1060            }
1061        }
1062
1063    }
1064    void insinoori()
1065    {
1066        työlainen inssi = new työlainen(2, 2);
1067        for (int i = 0; i < Paloituspaikka.Count; i++)
1068        {
1069            Vector V = new Vector(100, 0);
1070            if (Paloituspaikka[i].Tag.Equals("luoja"))
1071                inssi.Position = Paloituspaikka[i].Position - V;
1072        }
1073        humanT.Add(inssi);
1074
1075    }
1076
1077
1078    void spawn()
1079    {
1080        työlainen Spawn = new työlainen(2, 2);
1081        for (int i = 0; i < Paloituspaikka.Count; i++)
1082        {
1083            Vector V = new Vector(100, 0);
1084            if (Paloituspaikka[i].Tag.Equals("luoja"))
1085                Spawn.Position = Paloituspaikka[i].Position - V;
1086
1087        }
1088        Spawn.Image = Spawnk;
1089        darkorT.Add(Spawn);
1090
1091    }
1092    void hevoset(Vector paikka, double leveys, double korkeus)
1093    {
1094        hevonen heppa = new hevonen(20, 20);
1095        heppa.Position = paikka;
1096        heppa.hmaara = 5;
1097        heppa.Tag = "hevonen";
1098        heppa.Image = Heppakuva;
1099        Add(heppa);
1100        AddCollisionHandler<IPhysicsObject, IPhysicsObject>(heppa, "työläinen", hevosia);
1101    }
1102
1103    void kerää_resurssejaM(Resurssi metalli, työlainen kohde)
1104    {
1105
1106    }
1107    void hevosia(IPhysicsObject tormaaj, IPhysicsObject kohd)
1108    {
1109        if (!(tormaaj is hevonen && kohd is työlainen)) return;
1110        hevonen tormaaja = (hevonen)tormaaj;
1111        työlainen kohde = (työlainen)kohd;
1112        kohde.Brain = null;
1113        Timer ajastin = new Timer();
1114        ajastin.Interval = 10;
1115        ajastin.Timeout += delegate { tormaaja.hmaara--; };
1116        ajastin.Timeout += delegate { kohde.hevosmäärä = 1; };
1117        ajastin.Start();
1118    }
1119    void reaper()
1120    {
1121        Sotilas Reaper = new Sotilas(2, 2, 75);
1122        Reaper.range = 20;
1123        Reaper.visibility = 100;
1124        Reaper.vahinko = 10;
1125        Reaper.nopeus = 40;
1126        Reaper.IgnoresGravity = true;
1127        Reaper.Image = Raperkuva;
1128        Reaper.Tag = "peruss";
1129        darkorS.Add(Reaper);
1130
1131    }
1132
1133
1134    void Hyökkää(object lahettajaAivot, EventArgs e, int vahinko)
1135    {
1136
1137    }
1138    void Voidwalker()
1139    {
1140        Sotilas voidwalker = new Sotilas(2, 2, 200);
1141        voidwalker.armor = 5;
1142        voidwalker.vahinko = 50;
1143        voidwalker.visibility = 60;
1144        voidwalker.range = 20;
1145        voidwalker.Tag = "voidwalker";
1146        voidwalker.IgnoresGravity = true;
1147        darkorS.Add(voidwalker);
1148    }
1149
1150    void luoworker()
1151    {
1152        työlainen worker = new työlainen(2, 2);
1153        worker.Tag = "työläinen";
1154        for (int i = 0; i < Paloituspaikka.Count; i++)
1155        {
1156            Vector V = new Vector(100, 0);
1157            if (Paloituspaikka[i].Tag.Equals("luoja"))
1158               worker.Position = Paloituspaikka[i].Position - V;
1159
1160        }
1161        felidiT.Add(worker);
1162    }
1163    void luoparakit()
1164    {
1165        rakennus Barracks = new rakennus(30, 15);
1166        Barracks.Khinta = 0;
1167        Barracks.Mhinta = 150;
1168        Barracks.rakennusaika = 45;
1169        Barracks.Image = parakkikuva;
1170        Barracks.Tag = "kouluttaja";
1171        humanR.Add(Barracks);
1172
1173    }
1174    void voidc()
1175    {
1176        rakennus Voidcore = new rakennus(40, 40);
1177        Voidcore.Mhinta = 200;
1178        Voidcore.Khinta = 150;
1179        Voidcore.rakennusaika = 120;
1180        Voidcore.elämät = 750;
1181        Voidcore.Image = VCIM;
1182        Voidcore.Tag = "ATra";
1183        darkorR.Add(Voidcore);
1184
1185    }
1186    void fortress(Vector paikka, double leveys, double korkeus)
1187    {
1188        tukikohta fortress = new tukikohta(80, 80);
1189        fortress.Position = paikka;
1190        fortress.Tag = "luoja";
1191        Ptukikohdat.Add(fortress);
1192    }
1193
1194    void kata()
1195    {
1196        Sotilas katapultti = new Sotilas(40, 40, 200);
1197        katapultti.vahinko = 60;
1198        katapultti.range = 100;
1199        katapultti.visibility = 80;
1200        katapultti.nopeus = 5;
1201        katapultti.armor = 4;
1202        katapultti.Tag = "Siege";
1203        humanS.Add(katapultti);
1204    }
1205    void drone()
1206    {
1207        työlainen Drone = new työlainen(2, 2);
1208        for (int i = 0; i < Paloituspaikka.Count; i++)
1209        {
1210            Vector V = new Vector(50, 0);
1211            if (Paloituspaikka[i].Tag.Equals("luoja"))
1212                Drone.Position = Paloituspaikka[i].Position - V;
1213        }
1214        Drone.Image = Dronek;
1215        DemoniT.Add(Drone);
1216    }
1217    void kirves()
1218    {
1219        Sotilas kirvesmies = new Sotilas(20, 20, 100);
1220        kirvesmies.vahinko = 20;
1221        kirvesmies.Mhinta = 50;
1222        kirvesmies.visibility = 60;
1223        kirvesmies.nopeus = 30;
1224        kirvesmies.Tag = "peruss";
1225        kirvesmies.range = 20;
1226        kirvesmies.armor = 0;
1227        kirvesmies.koulutusaika = 35;
1228        kirvesmies.Khinta = 0;
1229        kirvesmies.Hhinta = 0;
1230        humanS.Add(kirvesmies);
1231    }
1232    void rakennuspaja()
1233    {
1234        rakennus Työpaja = new rakennus(40, 20);
1235        Työpaja.elämät = 600;
1236        Työpaja.Mhinta = 200;
1237        Työpaja.Khinta = 100;
1238        Työpaja.rakennusaika = 120;
1239        humanR.Add(Työpaja);
1240    }
1241    Image GI = LoadImage("gateway");
1242    Image WP = LoadImage("warpgate");
1243    void warppoint()
1244    {
1245        rakennus warpgate = new rakennus(15, 15);
1246        warpgate.elämät = 500;
1247        warpgate.rakennusaika = 40;
1248        warpgate.Mhinta = 150;
1249        warpgate.Image = WP;
1250        warpgate.Tag = "kouluttaja";
1251        darkorR.Add(warpgate);
1252    }
1253    void maatila()
1254    {
1255        rakennus farm = new rakennus(10, 10);
1256        farm.Tag = "supply";
1257        humanR.Add(farm);
1258    }
1259    void linnan(Vector paikka, double leveys, double korkeus)
1260    {
1261        tukikohta linna = new tukikohta(80, 80);
1262        linna.Position = paikka;
1263        humanTu.Add(linna);
1264    }
1265    void luokristalli(Vector paikka, double leveys, double korkeus)
1266    {
1267        kristalli Kristalli = new kristalli(20, 20);
1268        Kristalli.Position = paikka;
1269
1270        Kristalli.Image = CrystalK;
1271        Add(Kristalli, -2);
1272    }
1273    void valitseyksiköt()
1274    {
1275        Vector null1 = Mouse.PositionOnWorld;
1276        valitsin = new GameObject(0.0, 0.0);
1277        valitsin.Color = new Color(200, 0, 0, 100);
1278        Add(valitsin, 3);
1279        Mouse.ListenMovement(0.0, seuraaHiirta, "o", valitsin, null1);
1280    }
1281    void suoritaValinta()
1282    {
1283        for (int i = 0; i < PSotilaat.Count; i++)
1284        {
1285            if (PSotilaat[i].IsAddedToGame)
1286            {
1287                Sotilaat.Add(PSotilaat[i]);
1288            }
1289
1290        }
1291        for (int i = 0; i < Ptyöläiset.Count; i++)
1292        {
1293            if (Ptyöläiset[i].IsAddedToGame)
1294            {
1295                työläiset.Add(Ptyöläiset[i]);
1296            }
1297
1298        }
1299        Valitutsotilaat.Clear();
1300        for (int i = 0; i < Sotilaat.Count; i++)
1301        {
1302
1303            if (valitsin.IsInside(Sotilaat[i].Position))
1304            {
1305                Valitutsotilaat.Add(Sotilaat[i]);
1306            }
1307        }
1308        valitutTyöläiset.Clear();
1309        for (int i = 0; i < työläiset.Count; i++)
1310        {
1311
1312            if (valitsin.IsInside(työläiset[i].Position))
1313            {
1314                valitutTyöläiset.Add(työläiset[i]);
1315            }
1316
1317        }
1318        valitutRakennukset.Clear();
1319        for (int i = 0; i < rakennuus.Count; i++)
1320        {
1321            if (valitsin.IsInside(rakennuus[i].Position))
1322            {
1323                valitutRakennukset.Add(rakennuus[i]);
1324            }
1325        }
1326        Remove(valitsin);
1327    }
1328    void seuraaHiirta(AnalogState hiirenTila, GameObject obj, Vector v)
1329    {
1330        Vector z = Mouse.PositionOnWorld;
1331        obj.Position = new Vector((v.X + z.X) / 2, (v.Y + z.Y) / 2);
1332        obj.Size = new Vector(Math.Abs(z.X - v.X), Math.Abs(z.Y - v.Y));
1333    }
1334    void Sotilailleliikuntaa(PhysicsObject obj)
1335    {
1336        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, suoritaKomento, "Suorittaa komennon");
1337    }
1338    void suoritaKomento()
1339    {
1340        PhysicsObject valtsinJ = new PhysicsObject(2, 2);
1341        valtsinJ.X = Mouse.PositionOnWorld.X;
1342        valtsinJ.Y = Mouse.PositionOnWorld.Y;
1343        valtsinJ.Shape = Shape.Circle;
1344        valtsinJ.Color = Color.BloodRed;
1345        //PMoverS.Add(valtsinJ.Position);
1346        //PmoverT.Add(valtsinJ.Position);
1347        Add(valtsinJ);
1348        valtsinJ.Destroy();
1349        //Vector paikka = PMoverS[0];
1350        //Vector paikka2 = PmoverT[0];
1351        Vector paikka = valtsinJ.Position;
1352        for (int i = 0; i < Valitutsotilaat.Count; i++)
1353        {
1354            Valitutsotilaat[i].MoveTo(paikka, Valitutsotilaat[i].nopeus);
1355            Vector U = new Vector(Valitutsotilaat[i].X, Valitutsotilaat[i].Y);
1356            Vector suunta2 = new Vector(paikka.X - U.X, paikka.Y - U.Y);
1357            Valitutsotilaat[i].Angle = suunta2.Angle;
1358            Valitutsotilaat[i].Angle = Valitutsotilaat[i].Angle + Angle.FromDegrees(270);
1359            for (int j = 0; j < ISotilaat.Count; j++)
1360            {
1361                if (ISotilaat[i].IsInside(paikka))
1362                {
1363                    Valitutsotilaat[i].Kohde = ISotilaat[i];
1364                   
1365                }
1366            }
1367            for (int j = 0; j < AIaloituspaikka.Count; j++)
1368            {
1369                if (AIaloituspaikka[j].IsInside(paikka))
1370                {
1371                    Valitutsotilaat[i].Kohde = AIaloituspaikka[j];
1372                   
1373                }
1374            }
1375            //PMoverS.Remove(paikka);
1376        }
1377        for (int i = 0; i < valitutTyöläiset.Count; i++)
1378        {
1379            valitutTyöläiset[i].MoveTo(paikka, valitutTyöläiset[i].nopeus);
1380            Vector V = new Vector(valitutTyöläiset[i].X, valitutTyöläiset[i].Y);
1381            Vector suunta = new Vector(paikka.X - V.X, paikka.Y - V.Y);
1382            valitutTyöläiset[i].Angle = suunta.Angle;
1383            valitutTyöläiset[i].Angle = valitutTyöläiset[i].Angle + Angle.FromDegrees(270);
1384            //PmoverT.Remove(paikka2);
1385        }
1386    }
1387    void Rotualustus()
1388    {
1389        switch (Rotu)
1390        {
1391            case "Human":
1392                luoparakit();
1393                kirves();
1394                insinoori();
1395                kata();
1396                rakennuspaja();
1397                for (int i = 0; i < humanR.Count; i++)
1398                {
1399                    Prakennus.Add(humanR[i]);
1400                }
1401                for (int i = 0; i < humanS.Count; i++)
1402                {
1403                    PSotilaat.Add(humanS[i]);
1404                }
1405                for (int i = 0; i < humanT.Count; i++)
1406                {
1407                    Ptyöläiset.Add(humanT[i]);
1408                }
1409                for (int i = 0; i < humanTu.Count; i++)
1410                {
1411                    Ptukikohdat.Add(humanTu[i]);
1412                }
1413                break;
1414            case "darkor":
1415                Luocore();
1416                spawn();
1417                Summoner();
1418                reaper();
1419                voidc();
1420                Voidwalker();
1421                warppoint();
1422                for (int i = 0; i < darkorR.Count; i++)
1423                {
1424                    Prakennus.Add(darkorR[i]);
1425                }
1426                for (int i = 0; i < darkorS.Count; i++)
1427                {
1428                    PSotilaat.Add(darkorS[i]);
1429                }
1430                for (int i = 0; i < darkorT.Count; i++)
1431                {
1432                    Ptyöläiset.Add(darkorT[i]);
1433                }
1434                for (int i = 0; i < darkorTu.Count; i++)
1435                {
1436                    Ptukikohdat.Add(darkorTu[i]);
1437                }
1438                break;
1439            case "felidi":
1440                luoworker();
1441                luoTempelararch();
1442                Luotempelar();
1443                archerf();
1444                luoLeego();
1445                Legionfort();
1446                 for (int i = 0; i < felidiR.Count; i++)
1447                {
1448                    Prakennus.Add(felidiR[i]);
1449                }
1450                for (int i = 0; i < felidiS.Count; i++)
1451                {
1452                    PSotilaat.Add(felidiS[i]);
1453                }
1454                for (int i = 0; i < felidiT.Count; i++)
1455                {
1456                    Ptyöläiset.Add(felidiT[i]);
1457                }
1458                for (int i = 0; i < felidiTu.Count; i++)
1459                {
1460                    Ptukikohdat.Add(felidiTu[i]);
1461                }
1462                break;
1463            case "Demoni":
1464                drone();
1465                cave();
1466                break;
1467            default:
1468                // throw new Exception("Kaatui defaulttiin");
1469                break;
1470        }
1471    }
1472
1473
1474    void Luocore()
1475    {
1476        rakennus core = new rakennus(10, 10);
1477        core.Mhinta = 100;
1478        core.elämät = 250;
1479        core.rakennusaika = 30;
1480        core.Tag = "supply";
1481        core.raksaK = 2;
1482        core.Image = Corek;
1483        darkorR.Add(core);
1484    }
1485    Image Sumk = LoadImage("Summoner");
1486    void Summoner()
1487    {
1488        rakennus summoner = new rakennus(20, 20);
1489        summoner.Mhinta = 200;
1490        summoner.Khinta = 100;
1491        summoner.elämät = 450;
1492        summoner.rakennusaika = 50;
1493        summoner.Tag = "hevostalli";
1494        summoner.Image = Sumk;
1495        darkorR.Add(summoner);
1496    }
1497   
1498   
1499    void cave()
1500    {
1501        rakennus Cave = new rakennus(10, 10);
1502        Cave.Mhinta = 100;
1503        Cave.Tag = "supply";
1504        DemoniR.Add(Cave);
1505
1506    }
1507    void AIalustus()
1508    {
1509        switch (AIrotu)
1510        {
1511            case "Human":
1512                luoparakit();
1513                kirves();
1514                insinoori();
1515                kata();
1516                reaper();
1517                rakennuspaja();
1518                AIhyök();
1519                for (int i = 0; i < humanR.Count; i++)
1520                {
1521                    AIrakennus.Add(humanR[i]);
1522                }
1523                for (int i = 0; i < humanS.Count; i++)
1524                {
1525                    AISotilaat.Add(humanS[i]);
1526                    humanS[i].Brain = ai();
1527                }
1528                for (int i = 0; i < humanT.Count; i++)
1529                {
1530                    AItyöläiset.Add(humanT[i]);
1531                }
1532                for (int i = 0; i < humanTu.Count; i++)
1533                {
1534                    AItukikohdat.Add(humanTu[i]);
1535                }
1536                break;
1537            case "felidi":
1538                luoworker();
1539                Luotempelar();
1540                for (int i = 0; i < felidiR.Count; i++)
1541                {
1542                    AIrakennus.Add(felidiR[i]);
1543                }
1544                for (int i = 0; i < felidiS.Count; i++)
1545                {
1546                    AISotilaat.Add(felidiS[i]);
1547                }
1548                for (int i = 0; i < felidiT.Count; i++)
1549                {
1550                    AItyöläiset.Add(felidiT[i]);
1551                }
1552                for (int i = 0; i < felidiTu.Count; i++)
1553                {
1554                    AItukikohdat.Add(felidiTu[i]);
1555                }
1556                break;
1557            case "Demoni":
1558                cave();
1559                drone();
1560                reaper();
1561                AIhyök();
1562                for (int i = 0; i < DemoniR.Count; i++)
1563                {
1564                    AIrakennus.Add(DemoniR[i]);
1565                }
1566                for (int i = 0; i < DemoniS.Count; i++)
1567                {
1568                    AISotilaat.Add(DemoniS[i]);
1569                    DemoniS[i].Brain = ai();
1570                }
1571                for (int i = 0; i < DemoniT.Count; i++)
1572                {
1573                    AItyöläiset.Add(DemoniT[i]);
1574                }
1575                for (int i = 0; i < DemoniTu.Count; i++)
1576                {
1577                    AItukikohdat.Add(DemoniTu[i]);
1578                }
1579                break;
1580            case "darkor":
1581                Luocore();
1582                spawn();
1583                reaper();
1584                warppoint();
1585                AIhyök();
1586                for (int i = 0; i < darkorR.Count; i++)
1587                {
1588                    AIrakennus.Add(darkorR[i]);
1589                }
1590                for (int i = 0; i < darkorS.Count; i++)
1591                {
1592                    AISotilaat.Add(darkorS[i]);
1593                    darkorS[i].Brain = ai();
1594                }
1595                for (int i = 0; i < darkorT.Count; i++)
1596                {
1597                    AItyöläiset.Add(darkorT[i]);
1598                }
1599                for (int i = 0; i < darkorTu.Count; i++)
1600                {
1601                    AItukikohdat.Add(darkorTu[i]);
1602                }
1603                break;
1604            default:
1605                break;
1606        }
1607
1608    }
1609    Image Tempe = LoadImage("tempelar");
1610    void Luotempelar()
1611    {
1612        Sotilas Tempelar = new Sotilas(4, 4, 150);
1613        Tempelar.vahinko = 50;
1614        Tempelar.armor = 4;
1615        Tempelar.nopeus = 2;
1616        Tempelar.hyökkäysaika = 0.9;
1617        Tempelar.Mhinta = 175;
1618        Tempelar.Khinta = 100;
1619        Tempelar.koulutusaika = 5;
1620        Tempelar.Image = Tempe;
1621        Tempelar.Rotu = "Elf";
1622        Tempelar.Tag = "raskas";
1623        felidiS.Add(Tempelar);
1624    }
1625    Image Temp = LoadImage("tempelar archives");
1626    void luoTempelararch()
1627    {
1628        rakennus TempArchives = new rakennus(30, 30);
1629        TempArchives.Mhinta = 250;
1630        TempArchives.Khinta = 150;
1631        TempArchives.Tag = "ATra";
1632        TempArchives.Rotu = "Elf";
1633        TempArchives.Image = Temp;
1634        TempArchives.rakennusaika = 120;
1635        felidiR.Add(TempArchives);
1636
1637    }
1638    Image leg = LoadImage("legionaire");
1639    void luoLeego()
1640    {
1641        Sotilas leego = new Sotilas(2, 2, 100);
1642        leego.koulutusaika = 1;
1643        leego.armor = 0;
1644        leego.Rotu = "Elf";
1645        leego.nopeus = 5;
1646        leego.range = 20;
1647        leego.vahinko = 200;//TODO: vaihda 7
1648        leego.hyökkäysaika = 1.4;
1649        leego.Tag = "peruss";
1650        leego.Image = leg;
1651        felidiS.Add(leego);
1652    }
1653    Image arckuva = LoadImage("archery range");
1654    void archerf()
1655    {
1656        rakennus arcery = new rakennus(20, 20);
1657        arcery.Tag = "rangedK";
1658        arcery.rakennusaika = 50;
1659        arcery.Mhinta = 150;
1660        arcery.Khinta = 75;
1661        arcery.Image = arckuva;
1662        arcery.Rotu = "Elf";
1663        felidiR.Add(arcery);
1664    }
1665    void LuoELarch()
1666    {
1667        Sotilas ArcherE = new Sotilas(2, 2, 60);
1668        ArcherE.vahinko = 40;
1669        ArcherE.Mhinta = 125;
1670        ArcherE.Khinta = 50;
1671        ArcherE.koulutusaika = 30;
1672    }
1673    Image legf = LoadImage("legfort");
1674    void Legionfort()
1675    {
1676        rakennus legfor = new rakennus(25, 25);
1677        legfor.Tag = "kouluttaja";
1678        legfor.Mhinta = 150;
1679        legfor.rakennusaika = 1;
1680        legfor.Rotu = "Elf";
1681        legfor.Image = legf;
1682        felidiR.Add(legfor);
1683    }
1684    void AIhyök()
1685    {
1686        AIL();
1687    }
1688    Brain ai()
1689    {
1690        //TODO: mikä tagi?
1691        FollowerBrain AI = new FollowerBrain("randomtagi");
1692        AI.Speed = 30;
1693        for (int i = 0; i < Sotilaat.Count; i++)
1694                {
1695            if (Sotilaat[i].IsAddedToGame)
1696            {
1697                AI.ObjectsToFollow.Add(Sotilaat[i]);
1698            }
1699            else if (Sotilaat[i].IsDestroyed)
1700            {
1701                AI.ObjectsToFollow.Remove(Sotilaat[i]);
1702            }
1703                }
1704
1705        return AI;
1706    }
1707    void AIL()
1708    {
1709        for (int i = 0; i < darkorS.Count; i++)
1710        {
1711            for (int j = 0; j < AIaloituspaikka.Count; j++)
1712            {
1713                if (darkorS[i].Tag.Equals("peruss"))
1714                {
1715                    Vector V = new Vector(0, 30);
1716                    darkorS[i].Position = AIaloituspaikka[j].Position + V;
1717                    Add(darkorS[i]);
1718                    ISotilaat.Add(darkorS[i]);
1719                }
1720            }
1721        }
1722    }
1723}
Note: See TracBrowser for help on using the repository browser.