source: 2017/23/EelisK/Windcaller/Windcaller/Windcaller/Windcaller.cs @ 8451

Revision 8451, 46.4 KB checked in by nupeohje, 3 years ago (diff)

MOI

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10enum GoblinAttackDirection
11{
12    aUP,
13    aDown,
14    aRight,
15    aLeft,
16    nOne
17
18
19}
20enum WraithDirection
21{
22    Up,
23    Down,
24    Right,
25    Left,
26    None
27}
28enum WraithAttackDirection
29{
30    Up,
31    Down,
32    Right,
33    Left,
34    None
35}
36enum GoblinDirection
37{
38    Up,
39    Down,
40    Right,
41    Left,
42    None
43}
44class Skeletor : PhysicsObject
45{
46   
47    private IntMeter HelttiLaskuri = new IntMeter(20, 0, 20);
48    public IntMeter helttiLaskuri { get { return HelttiLaskuri; } }
49    Windcaller peli;
50    public Skeletor(Windcaller peli,double leveys, double korkeus)
51        :base(leveys,korkeus)
52    {
53        this.peli = peli;
54    }
55
56}
57class Goblin : PhysicsObject
58{
59   
60
61
62
63
64    //public int nopeus { get; set; }
65    //public GameObject kuva { get; set; }
66    public GameObject varjo { get; set; }
67    public FollowerBrain goboaivot;
68   // public RandomMoverBrain autismi;
69    //public Vector TargetAutismi;
70    private Vector movementDirection = Vector.Zero;
71    private Vector AttackSuunta;
72    private Vector koko;
73
74    private IntMeter HelttiLaskuri = new IntMeter(2, 0, 2);
75    public IntMeter helttiLaskuri { get { return HelttiLaskuri; } }
76    Windcaller peli;
77
78    public Goblin(Windcaller peli, double leveys, double korkeus, int elamia)
79        : base(leveys, korkeus)
80    {
81        this.peli = peli;
82       // HelttiLaskuri.LowerLimit += delegate { this.Destroy(); };
83
84        goboaivot = new FollowerBrain(Windcaller.player1);
85       
86        LinearDamping = 0.7;
87        movementDirection = RandomGen.NextDirection().GetVector();
88
89        Jypeli.Timer ajastin = new Jypeli.Timer();
90        ajastin.Interval = 3;
91        ajastin.Timeout += () =>
92        {
93            movementDirection = RandomGen.NextDirection().GetVector();
94        };
95
96        ajastin.Start();
97    }
98
99    private double Abs (double d)
100    {
101        return (d < 0 ? -d : d);
102    }
103    private GoblinDirection PreviousDirection = GoblinDirection.None;
104
105    private GoblinAttackDirection AikaisempiSuunta = GoblinAttackDirection.nOne;
106    private bool IsAttacking = false;
107
108    public override void Update(Time time)
109    {
110        base.Update(time);
111
112        if (IsAttacking)
113            return;
114        double Dx = Windcaller.player1.Position.X - X;
115        double Dy = Windcaller.player1.Position.Y - Y;
116       
117        double distance = Windcaller.GetDistance(Windcaller.player1.Position, Position);
118
119        if( distance > 450)
120        {
121            Push(movementDirection * 2500);
122            Brain = null;
123        }
124        else if( distance > 70)
125        {
126
127            Brain = goboaivot;
128
129        }else
130        {
131            Brain = null;
132            GoblinAttackDirection suunta = GoblinAttackDirection.nOne;
133            IsAttacking = true;
134            Jypeli.Timer.SingleShot(0.1, delegate
135            {
136
137
138               
139            });
140            if (Abs(Dx) > Abs(Dy))
141            {
142
143                if (Dx < 0)
144                {
145                    //Attack Vasemmalle
146                    suunta = GoblinAttackDirection.aLeft;
147                    Animation = Windcaller.GoblinAttack_L;
148                    koko = new Vector(50, 20);
149                    AttackSuunta = new Vector(-40, -20);
150
151                }
152                else
153                {
154                    //Attack Oikealle
155                    suunta = GoblinAttackDirection.aRight;
156                    Animation = Windcaller.GoblinAttack_R;
157                    koko = new Vector(50, 20);
158                    AttackSuunta = new Vector(30,-20);
159
160                }
161            }
162            else
163            { 
164                if (Dy < 0)
165                {
166                    //Attack Alaspäin
167                    suunta = GoblinAttackDirection.aDown;
168                    Animation = Windcaller.GoblinAttack_D;
169                    koko = new Vector(20, 50);
170                    AttackSuunta = new Vector(-20, -30);
171                }
172                else
173                {
174                    //Attack ylöspäin
175                    suunta = GoblinAttackDirection.aUP;
176                    Animation = Windcaller.GoblinAttack_U;
177                    koko = new Vector(20, 50);
178                    AttackSuunta = new Vector(30,20);
179                }
180
181               
182            }
183
184            if (suunta != AikaisempiSuunta)
185                Animation.Start();
186            Jypeli.Timer.SingleShot(0.1, delegate{
187
188           
189            PhysicsObject HitBox = new PhysicsObject(koko.X, koko.Y);
190            HitBox.Position = Position + AttackSuunta;
191            peli.Add(HitBox);
192            HitBox.LifetimeLeft = TimeSpan.FromSeconds(0.1);
193            HitBox.IgnoresCollisionResponse = true;
194            //HitBox.Color = Color.Red;
195            HitBox.Tag = "GoblinAttack";
196            HitBox.IsVisible = false;
197            });
198            AikaisempiSuunta = suunta;
199
200            Animation.Played += () =>
201            {
202                IsAttacking = false;
203            };
204
205            return;
206        }
207
208            GoblinDirection direction;
209
210            if (Abs(Dx) > Abs(Dy))
211            {
212                if (Dx < 0)
213                {
214                    //Vasemmalle
215                    Animation = Windcaller.GLeft_anim;
216                    direction = GoblinDirection.Left;
217                }
218                else
219                {
220                    //Oikealle
221                    Animation = Windcaller.GRight_anim;
222                    direction = GoblinDirection.Right;
223                }
224            }
225            else
226            {
227                if (Dy < 0)
228                {
229                    //Alaspäin
230                    Animation = Windcaller.GDown_anim;
231                    direction = GoblinDirection.Down;
232                }
233                else
234                {
235                    //Ylöspäin
236                    Animation = Windcaller.GUp_anim;
237                    direction = GoblinDirection.Up;
238                }
239            }
240
241            if (direction != PreviousDirection)
242                Animation.Start();
243
244            PreviousDirection = direction;
245       
246
247
248
249       
250    }
251
252}
253class Wraith : PhysicsObject
254{
255
256
257
258
259
260    //public int nopeus { get; set; }
261    //public GameObject kuva { get; set; }
262    public GameObject varjo { get; set; }
263    public FollowerBrain wraithaivot;
264    //public Vector TargetAutismi;
265    private Vector movementDirection = Vector.Zero;
266    private Vector AttackSuunta;
267    private Vector koko;
268
269    private IntMeter HelttiLaskuri = new IntMeter(3, 0, 3);
270    public IntMeter helttiWraithLaskuri { get { return HelttiLaskuri; } }
271    Windcaller peli;
272
273    double wanderDistance;
274
275    public Wraith(Windcaller peli, double leveys, double korkeus, int elamia, double wanderDistance = 500)
276        : base(leveys, korkeus)
277    {
278        this.peli = peli;
279        this.wanderDistance = wanderDistance;
280        // HelttiLaskuri.LowerLimit += delegate { this.Destroy(); };
281
282        wraithaivot = new FollowerBrain(Windcaller.player1);
283
284        LinearDamping = 0.7;
285        movementDirection = RandomGen.NextDirection().GetVector();
286
287        Jypeli.Timer ajastin = new Jypeli.Timer();
288        ajastin.Interval = 3;
289        ajastin.Timeout += () =>
290        {
291            movementDirection = RandomGen.NextDirection().GetVector();
292        };
293
294        ajastin.Start();
295    }
296
297    private double Abs(double d)
298    {
299        return (d < 0 ? -d : d);
300    }
301    private WraithDirection PreviousDirection = WraithDirection.None;
302
303    private WraithAttackDirection AikaisempiSuunta = WraithAttackDirection.None;
304    private bool IsAttacking = false;
305
306    public override void Update(Time time)
307    {
308        base.Update(time);
309
310        if (IsAttacking)
311            return;
312        double Dx = Windcaller.player1.Position.X - X;
313        double Dy = Windcaller.player1.Position.Y - Y;
314
315        double distance = Windcaller.GetDistance(Windcaller.player1.Position, Position);
316
317        if (distance > wanderDistance)
318        {
319            Push(movementDirection * 2500);
320            Brain = null;
321        }
322        else if (distance > 90)
323        {
324
325            Brain = wraithaivot;
326
327        }
328        else
329        {
330            Brain = null;
331            WraithAttackDirection suunta = WraithAttackDirection.None;
332            IsAttacking = true;
333            Jypeli.Timer.SingleShot(0.1, delegate
334            {
335
336
337
338            });
339            if (Abs(Dx) > Abs(Dy))
340            {
341
342                if (Dx < 0)
343                {
344                    //Attack Vasemmalle
345                    suunta = WraithAttackDirection.Left;
346                    Animation = Windcaller.Wraith_Attack_Left;
347                    koko = new Vector(40, 100);
348                    AttackSuunta = new Vector(-60, 0);
349
350                }
351                else
352                {
353                    //Attack Oikealle
354                    suunta = WraithAttackDirection.Right;
355                    Animation = Windcaller.Wraith_Attack_Right;
356                    koko = new Vector(40, 100);
357                    AttackSuunta = new Vector(60, 0);
358
359                }
360            }
361            else
362            {
363                if (Dy < 0)
364                {
365                    //Attack Alaspäin
366                    suunta = WraithAttackDirection.Down;
367                    Animation = Windcaller.Wraith_Attack_Down;
368                    koko = new Vector(100, 40);
369                    AttackSuunta = new Vector(0, -60);
370                }
371                else
372                {
373                    //Attack ylöspäin
374                    suunta = WraithAttackDirection.Up;
375                    Animation = Windcaller.Wraith_Attack_Up;
376                    koko = new Vector(100, 40);
377                    AttackSuunta = new Vector(0, 60);
378                }
379
380
381            }
382
383            if (suunta != AikaisempiSuunta)
384                Animation.Start();
385            Jypeli.Timer.SingleShot(0.1, delegate {
386
387
388                PhysicsObject HitBox = new PhysicsObject(koko.X, koko.Y);
389                HitBox.Position = Position + AttackSuunta;
390                peli.Add(HitBox);
391                HitBox.LifetimeLeft = TimeSpan.FromSeconds(0.1);
392                HitBox.IgnoresCollisionResponse = true;
393               // HitBox.Color = Color.Red;
394                HitBox.Tag = "GoblinAttack";
395                HitBox.IsVisible = false;
396            });
397            AikaisempiSuunta = suunta;
398
399            Animation.Played += () =>
400            {
401                IsAttacking = false;
402            };
403
404            return;
405        }
406
407        WraithDirection direction;
408
409        if (Abs(Dx) > Abs(Dy))
410        {
411            if (Dx < 0)
412            {
413                //Vasemmalle
414                Animation = Windcaller.Wraith_Right;
415                direction = WraithDirection.Left;
416            }
417            else
418            {
419                //Oikealle
420                Animation = Windcaller.Wraith_Left;
421                direction = WraithDirection.Right;
422            }
423        }
424        else
425        {
426            if (Dy < 0)
427            {
428                //Alaspäin
429                Animation = Windcaller.Wraith_Down;
430                direction = WraithDirection.Down;
431            }
432            else
433            {
434                //Ylöspäin
435                Animation = Windcaller.Wraith_Up;
436                direction = WraithDirection.Up;
437            }
438        }
439
440        if (direction != PreviousDirection)
441            Animation.Start();
442
443        PreviousDirection = direction;
444
445
446
447
448
449    }
450
451}
452public class Pelaaja1 : PhysicsObject
453{
454
455
456   
457    Windcaller peli;
458    public int nopeus { get; set; }
459    public GameObject kuva { get; set; }
460    public GameObject varjo { get; set; }
461    private IntMeter HelttiLaskuri = new IntMeter(10, 0, 5);
462    public IntMeter PlayerHealth { get { return HelttiLaskuri; } }
463    public Pelaaja1(double leveys, double korkeus, int elamia)
464        : base(leveys, korkeus)
465    {
466
467
468        //this.peli = peli;
469           
470    }
471}
472public class Windcaller : PhysicsGame
473{
474   public static Pelaaja1 player1;
475    //List<Talot> mediumtalot;
476    Vector PlayrStartPoint = new Vector(0, 0);
477
478
479    Image IdleDown = LoadImage("Player/Standing and one shadow/image_stand down_0");
480    Image IdleUp = LoadImage("Player/Standing and one shadow/image_stand up_0");
481    Image IdleRight = LoadImage("Player/Standing and one shadow/image_stand right_0");
482    Image IdleLeft = LoadImage("Player/Standing and one shadow/image_stand left_0");
483    Image Reuna1 = LoadImage("World/Map 1/restricted area 1");
484    Image MediumTalo = LoadImage("Houses/Small House/Small house");
485    Image MediumTaloShadow = LoadImage("Houses/Small House/Small house shadow");
486    Image PLayerShadow = LoadImage("Player/Standing and one shadow/shadow_stand down_0");
487
488    //Goblin
489    Image Fence = LoadImage("Stuff/Fences/fence");
490    Image GDown = LoadImage("Enemies/Goblin/Stand/Down/image_stand down_0");
491    Image GUp = LoadImage("Enemies/Goblin/stand/Up/image_stand up_0");
492    Image GRight = LoadImage("Enemies/Goblin/stand/Right/image_stand right_0");
493    Image GLeft = LoadImage("Enemies/Goblin/stand/Left/image_stand left_0");
494    //  RandomMoverBrain autisti;
495
496    Image Map = LoadImage("Effects/map");
497    Image LoadingScreen = LoadImage("Effects/LOADING SCREEN");
498   
499    public static Animation Wraith_Up;
500    public static Animation Wraith_Down;
501    public static Animation Wraith_Right;
502    public static Animation Wraith_Left;
503
504    public static Animation Wraith_Attack_Up;
505    public static Animation Wraith_Attack_Down;
506    public static Animation Wraith_Attack_Right;
507    public static Animation Wraith_Attack_Left;
508
509
510    public static Animation GUp_anim;
511    public static Animation GDown_anim;
512    public static Animation GRight_anim;
513    public static Animation GLeft_anim;
514
515    public static Animation GoblinAttack_U;
516    public static Animation GoblinAttack_D;
517    public static Animation GoblinAttack_L;
518    public static Animation GoblinAttack_R;
519
520    public static int WraithCount = 0;
521
522    PhysicsObject Kamera;
523    Image BaseLayer = LoadImage("World/Map 1/base");
524    Animation Up;
525    Animation Down;
526    Animation Right;
527    Animation Left;
528    Color Playershadow = new Color(Color.Black, 100 );
529    Image FullHealth = LoadImage("Effects/Healthy free space");
530    Image NoHealth = LoadImage("Effects/Unhealthy free space");
531
532    Animation SkullAttack;
533
534    //WorldImages
535    Image VesiMaaBackgroundImage = LoadImage("World//Water Map/base");
536
537
538    Image SkeltorBackground = LoadImage("Bosses/Skeletor/skull män room");
539    Image SkeletorRestricted = LoadImage("Bosses/Skeletor/skull män room boundaries");
540    Image SkeletorImage = LoadImage("Bosses/Skeletor/skull män head2");
541
542    Vector Ruins = new Vector(1500,1500);
543    Vector Ruins2 = new Vector(1400,1400);
544    Vector RandomPosition2 = RandomGen.NextVector(1000, 1000, 1500, 1800);
545    Image RestrictedArea2 = LoadImage("World/Map 1/restricted area 2 black");
546    Image RestrictedArea1 = LoadImage("World/Map 1/restricted_area_1");
547
548    Image PlayerFullHealth = LoadImage("Player/big helth_Animation 1_0");
549    Image PlayerEmptyHealth = LoadImage("Player/big helth_Animation 1_1");
550
551
552    Animation GoblinDeath;
553    Animation SpectreSpawn;
554    Animation AUp;
555    Animation ADown;
556    Animation ARight;
557    Animation ALeft;
558    Vector TaloSpawnPoint = new Vector(200, 50);
559    FollowerBrain seuraajanAivot;
560   // FollowerBrain goboaivot;
561    bool CanRun = true;
562   
563    string NykyineneMaa;
564
565   
566
567    public static double GetDistance(Vector A, Vector B)
568    {
569        return Math.Sqrt(Math.Pow(A.X - B.X, 2) + Math.Pow(A.Y - B.Y, 2));
570    }
571
572    public override void Begin()
573    {
574        //Movement animations
575        Left = LoadAnimation("Player/Anim/left");
576        Right = LoadAnimation("Player/Anim/right");
577        Up = LoadAnimation("Player/Anim/up");
578        Down = LoadAnimation("Player/Anim/down");
579
580        GoblinAttack_D = LoadAnimation("Enemies/Goblin/Attack/Down");
581        GoblinAttack_U = LoadAnimation("Enemies/Goblin/Attack/Up");
582        GoblinAttack_L = LoadAnimation("Enemies/Goblin/Attack/Left");
583        GoblinAttack_R = LoadAnimation("Enemies/Goblin/Attack/Right");
584
585        GoblinDeath = LoadAnimation("Enemies/Goblin/Death");
586
587        SpectreSpawn = LoadAnimation("Enemies/Wraith/SpawnAnimation");
588
589        Wraith_Up    = LoadAnimation("Enemies/Wraith/walk and stand/up");
590        Wraith_Down  = LoadAnimation("Enemies/Wraith/walk and stand/down");
591        Wraith_Right = LoadAnimation("Enemies/Wraith/walk and stand/left");
592        Wraith_Left = LoadAnimation("Enemies/Wraith/walk and stand/right");
593        Wraith_Attack_Up = LoadAnimation("Enemies/Wraith/attack/up");
594        Wraith_Attack_Down = LoadAnimation("Enemies/Wraith/attack/down");
595        Wraith_Attack_Right = LoadAnimation("Enemies/Wraith/attack/right");
596        Wraith_Attack_Left = LoadAnimation("Enemies/Wraith/attack/left");
597
598
599
600        SkullAttack = LoadAnimation("Bosses/Skeletor/Attack");
601
602
603        GDown_anim = LoadAnimation("Enemies/Goblin/Walk/Down");
604        GUp_anim = LoadAnimation("Enemies/Goblin/Walk/Up");
605        GLeft_anim = LoadAnimation("Enemies/Goblin/Walk/Left");
606        GRight_anim = LoadAnimation("Enemies/Goblin/Walk/Right");
607        //Attack Animations
608        AUp = LoadAnimation("Player/Anim/attack_up");
609        ADown = LoadAnimation("Player/Anim/attack_down");
610        ARight = LoadAnimation("Player/Anim/attack_right");
611        ALeft = LoadAnimation("Player/Anim/attack_left");
612
613        SetWindowSize(1200, 900);
614        SmoothTextures = false;
615        // TODO: Kirjoita ohjelmakoodisi tähän
616       
617       
618        LataaMaa("Starting");
619
620    }
621
622    //Load Rooms
623    void LataaMaa(string nimi)
624    {
625        NykyineneMaa = nimi;
626        Layers[3].RelativeTransition = new Vector(0, 0);
627        Label loadingscreen = new Label(1200,900);
628        loadingscreen.Image = LoadingScreen;
629        Add(loadingscreen, 3);
630
631        Timer.SingleShot(0.1, delegate
632        {
633        ClearAll();
634
635        if (nimi == "Starting") AloitusMaa();
636        if (nimi == "VesiMaa") VesiMaa();
637        if (nimi == "Skeletor") SkeletorBossRoom();
638        });
639
640
641
642
643    }
644
645    //Rooms
646    void VesiMaa()
647    {
648       
649        Level.Width = 2400;
650        Level.Height = 2400;
651        Level.Background.Image = VesiMaaBackgroundImage;
652        Level.Background.Width = 2400;
653        Level.Background.Height = 2400;
654        //   AddTaso1Seina1();
655
656       
657
658        ColorTileMap ruudutt = ColorTileMap.FromLevelAsset("World/Water Map/ground area");
659        ruudutt.SetTileMethod(Color.Black, LuoTaso);
660        ruudutt.Optimize(Color.Black);
661        ruudutt.Execute();
662
663        ColorTileMap ruudut1 = ColorTileMap.FromLevelAsset("World/Water Map/water area");
664        ruudut1.SetTileMethod(Color.Black, LuoTaso);
665        ruudut1.Optimize(Color.Black);
666        ruudut1.Execute();
667
668        AddPlayer(PlayrStartPoint, 60, 60);
669        LevelTeleport(new Vector(-500, -1170), 2000, 40, "Starting", new Vector(-2000, 2100));
670        Camero();
671
672        //Ruins
673        LisaaKivi(new Vector(-200, 1000), 170, 100);
674        LisaaPieniKivi(new Vector(300, 700), 100, 50);
675        LisaaIsoPylvas(new Vector(54, 950), 310, 280);
676        LisaaPieniPylvas(new Vector(-100, 900), 250, 200);
677        LisaaPieniPylvas(new Vector(-500, 600), 250, 200);
678        LisaaIsoPylvas(new Vector(430, 370), 310, 280);
679        LisaaKivi(new Vector(600, 500), 170, 100);
680        LisaaTeltta1(new Vector(-500, -300));
681        LisaaTeltta2(new Vector(-170, -290));
682        Boat1(new Vector(-700, -100));
683        WrathSpawner();
684
685        LisaaKartta();
686        Camera.Follow(Kamera);
687        Camera.StayInLevel = true;
688
689        Level.CreateBorders();
690    }
691
692    void AloitusMaa()
693    {
694
695
696       
697        Level.Width = 4800;
698        Level.Height = 4800;
699        Level.Background.Image = BaseLayer;
700        Level.Background.Width = 4800;
701        Level.Background.Height = 4800;
702        AddTaso1Seina1();
703       
704        ColorTileMap ruudut2 = ColorTileMap.FromLevelAsset("World/Map 1/restricted area 2");
705        ruudut2.SetTileMethod(Color.Black, LuoTaso);
706        ruudut2.Optimize(Color.Black);
707        ruudut2.Execute();
708       
709
710        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("World/Map 1/restricted area 1");
711
712        ruudut.SetTileMethod(Color.Black, LuoTaso);
713        ruudut.Optimize(Color.Black);
714        ruudut.Execute();
715
716
717
718        //Talot
719        Houset(new Vector(-500, -1000),370, 390);
720        Houset(TaloSpawnPoint,570,350);
721        Houset(new Vector(-500,-400), 570, 350);
722        SignPost(new Vector(-600, -650), 100, 120);
723
724        //Player
725        AddPlayer(PlayrStartPoint, 60, 60);
726
727        Fense(new Vector(-650,-450));
728        Fense(new Vector(-150, -850));
729        //Enemies
730        gobliin(new Vector(500, -1000), 140, 140);
731        gobliin(new Vector(400, -1000), 140, 140);
732        gobliin(new Vector(300, -1000), 140, 140);
733        LisaaWraith(new Vector(1000, 1000), 24, 24);
734
735        //Ruins
736        LisaaKivi(new Vector(1000, 300), 170, 100);
737        LisaaIsoPylvas(Ruins, 310, 280);
738        LisaaKivi(new Vector(2000, 1000), 170, 100);
739        LisaaIsoPylvas(Ruins2, 310, 280);
740        LisaaPieniPylvas(new Vector(1900,1500), 250, 200);
741        LisaaPieniKivi(new Vector(1000, 500), 100, 50);
742        LisaaPieniKivi(new Vector(1400, 660), 100, 50);
743
744        //Teleport
745        LevelTeleport(new Vector(-2000,2570),1000,400,"VesiMaa",new Vector(-600,-1000));
746        LevelTeleport(new Vector(2500, -2000), 400, 4000, "Skeletor", new Vector(0, -500));
747
748
749        Camero();
750
751        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
752        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
753        Camera.Follow(Kamera);
754        Camera.StayInLevel = true;
755        LisaaKartta();
756
757        Level.CreateBorders();
758
759    }
760    void SkeletorBossRoom()
761    {
762        Level.Width = 1200;
763        Level.Height = 1200;
764        Level.Background.Image = SkeltorBackground;
765        Level.Background.Width = 1200;
766        Level.Background.Height = 1200;
767        AddPlayer(PlayrStartPoint, 60, 60);
768        ColorTileMap ruudutt = ColorTileMap.FromLevelAsset("Bosses/Skeletor/skull män room boundaries");
769        ruudutt.SetTileMethod(Color.Black, LuoTaso);
770        ruudutt.Optimize(Color.Black);
771        ruudutt.Execute();
772
773       
774
775
776        Timer.SingleShot(5, delegate
777        {
778            Skeletor(new Vector(0, 350),1200, 1200);
779
780        });
781
782
783        Camero();
784        LisaaKartta();
785        Camera.Follow(Kamera);
786        Camera.StayInLevel = true;
787        //CameraShake(100, 0.02);
788        Level.CreateBorders();
789    }
790
791    //Walls and the creator
792    void LuoTaso(Vector paikka, double leveys, double korkeus)
793    {
794       
795        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
796        taso.Position = paikka;
797         //taso.Color = RandomGen.NextColor();
798        taso.Color = Color.Transparent;
799        Add(taso);
800
801    }
802    void AddTaso1Seina1()
803    {
804        GameObject Seinat = new GameObject(4800, 4800);
805       Seinat.Image = RestrictedArea1;
806
807        Seinat.Position = new Vector(0, 0);
808        Add(Seinat);
809
810        GameObject Seinat2 = new GameObject(4800, 4800);
811        Seinat2.Image = RestrictedArea2;
812
813        Seinat2.Position = new Vector(0, 0);
814        Add(Seinat2);
815
816    }
817    //Player
818    void AddPlayer(Vector paikka, double leveys, double korkeus)
819
820    {
821
822        player1 = new Pelaaja1(40, 60, 5);
823
824        player1.kuva = new GameObject(160, 140);
825        player1.kuva.Y = 10;
826        player1.Add(player1.kuva);
827        player1.Color = Color.Transparent;
828        player1.kuva.Image = IdleDown;
829       
830        player1.CollisionIgnoreGroup = 1;
831        player1.varjo = new GameObject(160, 140);
832        player1.varjo.Y = 10;
833        // player1.Shape = Shape.FromImage(IdleDown);
834
835        player1.Add(player1.varjo);
836        player1.varjo.Image = PLayerShadow;
837        //player1.varjo.Image = Image.Color(PLayerShadow,100);
838        player1.Position = paikka;
839        player1.nopeus = 20000;
840        player1.LinearDamping = 0.1;
841        player1.CanRotate = false;
842        player1.MaxAngularVelocity = 0;
843        //player1.Shape = Shape.FromImage(IdleDown);
844        player1.AngularDamping = 0.1;
845        player1.AbsoluteAngle = Angle.FromDegrees(0);
846        PlayerControlls();
847
848        AddCollisionHandler(player1, "GoblinAttack", PlayerhurtState);
849
850        AddCollisionHandler(player1, "SkullAttack", PlayerSkullhurtState);
851
852        ProgressBar elamaPalkki = new ProgressBar(300, 50);
853        elamaPalkki.X = Screen.Left + 150;
854        elamaPalkki.Y = Screen.Top - 80;
855        elamaPalkki.BarImage = PlayerFullHealth;
856        elamaPalkki.Image = PlayerEmptyHealth;
857        elamaPalkki.BindTo(player1.PlayerHealth);
858        elamaPalkki.TextureWrapSize = new Vector(5, 1);
859        Add(elamaPalkki);
860        //player1.Add(elamaPalkki);
861
862        player1.Destroyed += delegate
863        {
864            LataaMaa(NykyineneMaa);
865
866
867        };
868
869
870        Add(player1);
871
872
873
874
875
876    }
877    void PlayerSkullhurtState(PhysicsObject pel, PhysicsObject HitBox)
878    {
879        Vector suunta = player1.Position - HitBox.Position;
880        suunta.Y = 0;
881        suunta.Normalize();
882        CameraShake(60.0, 0.3);
883        player1.PlayerHealth.Value--;
884        player1.Hit(suunta * 50);
885        Jypeli.Timer.SingleShot(0.3, delegate {
886
887            if (player1.PlayerHealth.Value < 1)
888            {
889                player1.Destroy();
890
891                Camera.StopFollowing();
892            }
893
894            player1.LinearDamping = 0.1;
895            CanRun = true;
896        });
897        player1.LinearDamping = 0.8;
898        CanRun = false;
899        HitBox.Destroy();
900
901        // player1.Destroy();
902
903
904    }
905    void PlayerhurtState(PhysicsObject pel, PhysicsObject HitBox)
906    { 
907        Vector suunta = player1.Position - HitBox.Position;
908        suunta.Normalize();
909        CameraShake(60.0, 0.3);
910        player1.PlayerHealth.Value--;
911        player1.Hit(suunta * 80);
912        Jypeli.Timer.SingleShot(0.3, delegate {
913           
914                if (player1.PlayerHealth.Value < 1)
915                {
916                    player1.Destroy();
917
918                Camera.StopFollowing();
919                }
920           
921            player1.LinearDamping = 0.1;
922            CanRun = true;
923        });
924        player1.LinearDamping = 0.8;
925        CanRun= false;
926        HitBox.Destroy();
927
928       // player1.Destroy();
929
930
931    }
932    void PlayerControlls()
933    {
934
935        Keyboard.Listen(Key.Up, ButtonState.Down, MovePlayer, null, new Vector(0, player1.nopeus), Up);
936        Keyboard.Listen(Key.Down, ButtonState.Down, MovePlayer, null, new Vector(0, -player1.nopeus), Down);
937        Keyboard.Listen(Key.Left, ButtonState.Down, MovePlayer, null, new Vector(-player1.nopeus, 0), Left);
938        Keyboard.Listen(Key.Right, ButtonState.Down, MovePlayer, null, new Vector(player1.nopeus, 0), Right);
939
940        //Keyboard.Listen(Key.Space, ButtonState.Pressed, CameraShake, null,20.0, 0.3);
941
942        Keyboard.Listen(Key.D, ButtonState.Down, Attack, null, ARight, IdleRight,new Vector(50,0), new Vector(10.0,50.0));
943        Keyboard.Listen(Key.A, ButtonState.Down, Attack, null, ALeft, IdleLeft,new Vector(-50,0), new Vector(10.0,50.0));
944        Keyboard.Listen(Key.W, ButtonState.Down, Attack, null, AUp, IdleUp,new Vector (0,50), new Vector(50.0,10.0));
945        Keyboard.Listen(Key.S, ButtonState.Down, Attack, null, ADown, IdleDown, new Vector(0,-50), new Vector(50.0,10.0));
946
947
948
949        Keyboard.Listen(Key.Up, ButtonState.Released, () =>
950        {
951            if(CanRun)
952                player1.kuva.Animation = IdleUp;
953
954        }, null);
955
956
957        Keyboard.Listen(Key.Down, ButtonState.Released, () =>
958        {
959            if (CanRun)
960                player1.kuva.Animation = IdleDown;
961        }, null);
962
963
964        Keyboard.Listen(Key.Right, ButtonState.Released, () =>
965        {
966            if (CanRun)
967                player1.kuva.Animation = IdleRight;
968        }, null);
969
970
971        Keyboard.Listen(Key.Left, ButtonState.Released, () =>
972        {
973            if (CanRun)
974                player1.kuva.Animation = IdleLeft;
975        }, null);
976
977
978
979
980    }
981    void MovePlayer(Vector vektori, Animation suunta)
982    {
983        if (CanRun == true)
984        {
985            player1.kuva.Animation = suunta;
986            player1.kuva.Animation.FPS = 7;
987            if (player1.kuva.Animation.IsPlaying == false)
988            {
989                player1.kuva.Animation.Start();
990
991
992            }
993           
994                player1.Push(vektori);
995           
996
997        }
998
999    }
1000    void Attack(Animation attack, Image Idle,Vector suunta,Vector koko)
1001    {
1002        CanRun = false;
1003        player1.kuva.Animation = attack;
1004        player1.kuva.Animation.FPS = 15;
1005        CameraShake(5, 0.5);
1006        if (player1.kuva.Animation.IsPlaying == false)
1007        {
1008
1009            Jypeli.Timer.SingleShot(0.1, delegate
1010            {
1011
1012
1013                PhysicsObject HitBox = new PhysicsObject(koko.X, koko.Y);
1014                HitBox.Position = player1.Position + suunta;
1015                Add(HitBox);
1016                HitBox.LifetimeLeft = TimeSpan.FromSeconds(0.1);
1017                HitBox.IgnoresCollisionResponse = true;
1018                HitBox.Color = Color.Red;
1019                HitBox.Tag = "PlayerAttack";
1020                //HitBox.IsVisible = false;
1021            });
1022            player1.kuva.Animation.Start(1);
1023            player1.kuva.Animation.Played += delegate
1024            {
1025                CanRun = true;
1026                player1.kuva.Animation.Stop();
1027                player1.kuva.Animation = new Animation(Idle);
1028
1029            };
1030
1031
1032
1033        }
1034
1035
1036
1037
1038    }
1039
1040    //Camera and the camera shake
1041    void Camero()
1042    {
1043        Kamera = new PhysicsObject(1, 1);
1044        Add(Kamera);
1045        Kamera.Position = player1.Position;
1046        seuraajanAivot = new FollowerBrain(player1);
1047        Kamera.IgnoresCollisionResponse = true;
1048        seuraajanAivot.Speed = 400;
1049
1050        Kamera.Brain = seuraajanAivot;
1051        seuraajanAivot.Active = true;
1052    }
1053    void CameraShake(double shakeAmount, double vaimennus)
1054    {
1055        Timer shake = new Timer();
1056        shake.Interval = 0.05;
1057        shake.Timeout += delegate
1058        {
1059            Kamera.Position += RandomGen.NextVector(0, shakeAmount);
1060
1061            shakeAmount += -shakeAmount * vaimennus;
1062            if (shakeAmount < 0.1)
1063            {
1064                shake.Stop();
1065            }
1066        };
1067        shake.Start();
1068
1069
1070    }
1071
1072    //Bosses
1073    void Skeletor(Vector paikka, double leveys, double korkeus)
1074    {
1075        GameObject skelePoint = new GameObject(10, 10);
1076        skelePoint.IsVisible = false;
1077        skelePoint.Position = paikka;
1078        Add(skelePoint);
1079
1080        Skeletor skele = new Skeletor(this, 470, 520);
1081        skele.IgnoresCollisionResponse = true;
1082        skele.Image = SkeletorImage;
1083        skele.Position = paikka;
1084       // Image skeleShape = LoadImage("Bosses/Skeletor/skull män headShape");
1085        //skele.Shape = Shape.FromImage(SkeletorImage);
1086       
1087        skele.CanRotate = false;
1088        skele.LinearDamping = 0.7;
1089      FollowerBrain skeleAivot = new FollowerBrain(skelePoint);
1090        skeleAivot.Speed = 400;
1091        skele.Brain = skeleAivot;
1092        skeleAivot.Active = true;
1093       
1094       
1095
1096        AddCollisionHandler<Skeletor, PhysicsObject>(skele, "PlayerAttack", SkeletorHurt);
1097
1098        ProgressBar BossHealth = new ProgressBar(800, 30);
1099        BossHealth.X = Screen.Right - 400;
1100        BossHealth.Y = Screen.Bottom + 80;
1101        BossHealth.BarImage = FullHealth;
1102        BossHealth.Image = NoHealth;
1103        BossHealth.BindTo(skele.helttiLaskuri);
1104        BossHealth.TextureWrapSize = new Vector(20, 1);
1105       Add(BossHealth);
1106
1107        Add(skele);
1108
1109
1110        Timer BossFight = new Timer();
1111        BossFight.Interval = 1;
1112        BossFight.Start();
1113
1114        BossFight.Timeout += delegate
1115        {
1116            BossFight.Interval = 10;
1117            Timer.SingleShot(1, delegate
1118            {
1119
1120                SkullAttackLaser(skele);
1121
1122
1123
1124
1125
1126            });
1127            //BossFight.Interval = 25;
1128
1129
1130
1131            Timer.SingleShot(5, delegate
1132             {
1133
1134                 int maara = GetObjectsWithTag("Wraith").Count;
1135                 if (maara < 1)
1136                 {
1137                     LisaaWraith(new Vector(-300, 0), 240, 240,10000);
1138
1139
1140                 }
1141                 if (maara < 2)
1142                 {
1143                     LisaaWraith(new Vector(300, 0), 240, 240,10000);
1144
1145
1146                 }
1147                 if (maara < 3)
1148                 {
1149                     LisaaWraith(new Vector(-300, -200), 240, 240,100000);
1150
1151
1152                 }
1153                 if (maara < 4)
1154                 {
1155                     LisaaWraith(new Vector(300, -200), 240, 240,10000);
1156
1157
1158                 }
1159 
1160
1161             });
1162
1163
1164
1165
1166         
1167
1168        };
1169
1170        skele.Destroyed += BossFight.Stop;
1171     
1172
1173
1174
1175
1176    }
1177    void SkullAttackLaser (Skeletor skele)
1178    {
1179
1180        GameObject Attack = new GameObject(1200, 1200);
1181        Attack.Animation = new Animation (SkullAttack);
1182        Attack.Animation.Start();
1183        Attack.Y = -450;
1184        PhysicsObject HitBox = null;
1185        PhysicsObject HitBox2 = null;
1186        Timer.SingleShot(0.3, delegate
1187         {
1188;
1189             HitBox = Laaser(new Vector(100, -450),skele);
1190             HitBox2 = Laaser(new Vector(-130, -450), skele);
1191         });
1192       
1193
1194        //Attack.Position = HeadPosition + new Vector(0, -450);
1195        skele.Add(Attack);
1196
1197        Attack.Animation.Played += delegate
1198        {
1199            Attack.Destroy();
1200            HitBox.Destroy();
1201            HitBox2.Destroy();
1202
1203        };
1204
1205
1206
1207    }
1208    PhysicsObject Laaser(Vector paikka,Skeletor skele)
1209    {
1210       PhysicsObject HitBox = new PhysicsObject(100, 900);
1211        HitBox.Position = paikka;
1212        skele.Add(HitBox);
1213        HitBox.IgnoresCollisionResponse = true;
1214        HitBox.Color = Color.Red;
1215        HitBox.IsVisible = false;
1216        HitBox.Tag = "SkullAttack";
1217
1218        return HitBox;
1219
1220    }
1221    void SkeletorHurt(Skeletor skeleton, PhysicsObject HitBox)
1222    {
1223        Vector suunta = skeleton.Position - player1.Position;
1224        suunta.Normalize();
1225        skeleton.helttiLaskuri.Value--;
1226        Jypeli.Timer.SingleShot(0.3, delegate {
1227            if (skeleton.helttiLaskuri.Value < 1)
1228            {
1229
1230                skeleton.Destroy();
1231               
1232            }
1233           
1234           
1235        });
1236       
1237
1238        skeleton.Hit(suunta * 40);
1239        HitBox.Destroy();
1240
1241    }
1242
1243    void WrathSpawner()
1244
1245    {
1246        Timer spawner = new Timer();
1247        spawner.Interval = 6;
1248
1249        Vector TaloSpawnPoint = RandomGen.NextVector(-300, 500, 300, 900);
1250
1251        spawner.Timeout += delegate
1252        {
1253            if (WraithCount < 2)
1254                LisaaWraith(TaloSpawnPoint, 240, 240);
1255
1256        };
1257        spawner.Start();
1258     
1259
1260    }
1261    void Houset(Vector paikka, double leveys, double korkeus)
1262    {
1263
1264
1265        PhysicsObject mediumtalot = new PhysicsObject(360, 390);
1266
1267        mediumtalot.Image = MediumTalo;
1268        //mediumtalot.Shape = Shape.FromImage(MediumTalo);
1269        mediumtalot.Position = paikka;
1270        mediumtalot.IgnoresCollisionResponse = true;
1271
1272        PhysicsObject seinät = new PhysicsObject(240, 200);
1273        seinät.Position = mediumtalot.Position;
1274        seinät.X += 45;
1275        seinät.Y -= 100;
1276
1277        GameObject shadow = new GameObject(360, 390);
1278        shadow.Image = MediumTaloShadow;
1279        seinät.MakeStatic();
1280        //seina.MakeStatic();
1281        //meduimtaloo.talonsena = new PhysicsObject(400,200);
1282        seinät.IsVisible = false;
1283        // meduimtaloo.talonsena.Color = Color.Transparent;
1284        shadow.Position = mediumtalot.Position;
1285       
1286        Add(shadow, -1);
1287
1288        // seina2.MakeStatic();
1289        Add(seinät);
1290
1291        //meduimtaloo.talonsena.Color = Color.Transparent;
1292        Add(mediumtalot,2);
1293     
1294       
1295
1296    }
1297    void LisaaWraith(Vector paikka, double leveys, double korkeus, double wanderDistance = 500)
1298    {
1299
1300        GameObject WraithSpawn = new GameObject(240, 240);
1301        WraithSpawn.Animation = SpectreSpawn;
1302        WraithSpawn.Animation.Start();
1303        Add(WraithSpawn);
1304        WraithSpawn.Position = paikka;
1305       
1306
1307        Wraith wraiith = new Wraith(this, 240, 240, 3, wanderDistance);
1308        wraiith.CollisionIgnoreGroup = 1;
1309        wraiith.IgnoresCollisionResponse = true;
1310        wraiith.Position = paikka;
1311        WraithCount++;
1312        GameObject shadow = new GameObject(240, 240);
1313        Image wraithshadow = LoadImage("Enemies/Wraith/wraith shadow_shadow_0");
1314        shadow.Image = wraithshadow;
1315        //shadow.Y = -10;
1316
1317        wraiith.Tag = "Wraith";
1318
1319        AddCollisionHandler<Wraith, PhysicsObject>(wraiith, "PlayerAttack", WraithHurtState);
1320
1321        wraiith.CanRotate = false;
1322        wraiith.wraithaivot.Speed = 400;
1323        wraiith.wraithaivot.Active = true;
1324
1325
1326
1327        ProgressBar elamaPalkki = new ProgressBar(120, 30);
1328        elamaPalkki.Y = 80;
1329        elamaPalkki.BarImage = FullHealth;
1330        elamaPalkki.Image = NoHealth;
1331        elamaPalkki.BindTo(wraiith.helttiWraithLaskuri);
1332        elamaPalkki.TextureWrapSize = new Vector(3, 1);
1333       // wraiith.Add(elamaPalkki);
1334
1335        wraiith.IsUpdated = true;
1336        Timer.SingleShot(1/12.0*8,delegate
1337        {
1338            Add(wraiith, 2);
1339            WraithSpawn.IsVisible = false;
1340            wraiith.Add(elamaPalkki);
1341            wraiith.Add(shadow);
1342            WraithSpawn.Destroy();
1343           
1344           
1345
1346           
1347        });
1348
1349   
1350
1351
1352    }
1353    void WraithHurtState(Wraith wraiith, PhysicsObject HitBox)
1354    {
1355        Vector suunta = wraiith.Position - player1.Position;
1356        suunta.Normalize();
1357        wraiith.helttiWraithLaskuri.Value--;
1358        Jypeli.Timer.SingleShot(0.3, delegate {
1359            if (wraiith.helttiWraithLaskuri.Value < 1)
1360            {
1361
1362                wraiith.Destroy();
1363                WraithCount--;
1364            }
1365            wraiith.LinearDamping = 0.7;
1366            wraiith.Animation.Start();
1367        });
1368        wraiith.LinearDamping = 0.8;
1369        wraiith.Animation.Stop();
1370        wraiith.Hit(suunta * 70);
1371        HitBox.Destroy();
1372
1373    }
1374    void gobliin (Vector paikka, double leveys, double korkeus)
1375    {
1376
1377        Goblin gobo = new Goblin(this, 140, 140,2);
1378       
1379        gobo.CollisionIgnoreGroup = 1;
1380        gobo.Position = paikka;
1381        gobo.Image = GDown;
1382        Add(gobo);
1383
1384        GameObject shadow = new GameObject(140, 140);
1385
1386        Image rockshadow = LoadImage("Enemies/Goblin/goblin shadow");
1387        shadow.Image = rockshadow;
1388       //shadow.Y = -10;
1389
1390        gobo.Add(shadow);
1391
1392
1393
1394
1395        AddCollisionHandler<Goblin, PhysicsObject>(gobo, "PlayerAttack", HurtState);
1396
1397        gobo.CanRotate = false;
1398        gobo.goboaivot.Speed = 300;
1399       gobo.goboaivot.Active = true;
1400
1401        gobo.IsUpdated = true;
1402
1403
1404        ProgressBar elamaPalkki = new ProgressBar(80, 30);
1405        elamaPalkki.Y = 60;
1406        elamaPalkki.BarImage = FullHealth;
1407        elamaPalkki.Image = NoHealth;
1408        elamaPalkki.BindTo(gobo.helttiLaskuri);
1409        elamaPalkki.TextureWrapSize = new Vector(2, 1);
1410        gobo.Add(elamaPalkki);
1411
1412
1413
1414
1415
1416    }
1417    void HurtState(Goblin gobo, PhysicsObject Hitbox)
1418    {
1419        // gobo.Destroy();
1420        bool GoblinIsDestroyed = false;
1421        Vector suunta = gobo.Position - player1.Position;
1422        suunta.Normalize();
1423        gobo.helttiLaskuri.Value--;
1424        if (gobo.helttiLaskuri.Value < 1)
1425        {
1426            gobo.Destroy();
1427            GoblinIsDestroyed = true;
1428            goboKuolee(gobo);
1429        }
1430        Jypeli.Timer.SingleShot(0.3, delegate {
1431           
1432            gobo.LinearDamping = 0.7;
1433            gobo.Animation.Start();
1434        });
1435        gobo.LinearDamping = 0.8;
1436        gobo.Animation.Stop();
1437
1438        if (GoblinIsDestroyed == false)
1439        {
1440            gobo.Hit(suunta * 70);
1441        }
1442       
1443        Hitbox.Destroy();
1444
1445    }
1446
1447    void goboKuolee(Goblin gobo)
1448    {
1449       
1450        gobo.Destroy();
1451        GameObject goboDeath = new GameObject(140, 140);
1452        goboDeath.Animation = GoblinDeath;
1453        goboDeath.Position = gobo.Position;
1454        goboDeath.Animation.StopOnLastFrame = true;
1455        goboDeath.Animation.FPS = 12;
1456       
1457        Add(goboDeath);
1458       
1459        goboDeath.Animation.Played += delegate
1460        {
1461            goboDeath.IsVisible = false;
1462            goboDeath.Destroy();
1463        } ;
1464
1465        goboDeath.Animation.Start();
1466
1467
1468
1469
1470    }
1471    void LisaaKivi(Vector paikka, double leveys, double korkeus)
1472    {
1473        PhysicsObject isokivi = new PhysicsObject(170,100);
1474        isokivi.MakeStatic();
1475        Image BigRock = LoadImage("Stuff/Ruins/large stone");
1476        isokivi.Image = BigRock;
1477        isokivi.Position = paikka;
1478        GameObject shadow = new GameObject(170,100);
1479
1480        Image rockshadow = LoadImage("Stuff/Ruins/large stone shadow");
1481        shadow.Image = rockshadow;
1482        //shadow.Y = 10;
1483
1484        isokivi.Add(shadow);
1485
1486        Add(isokivi);
1487
1488
1489
1490    }
1491    void LisaaPieniKivi(Vector paikka, double leveys, double korkeus)
1492    {
1493        PhysicsObject pienikivi = new PhysicsObject(100, 50);
1494        pienikivi.MakeStatic();
1495        Image BigRock = LoadImage("Stuff/Ruins/small stone");
1496        pienikivi.Image = BigRock;
1497        pienikivi.Position = paikka;
1498        GameObject shadow = new GameObject(100, 50);
1499
1500        Image rockshadow = LoadImage("Stuff/Ruins/small stone shadow");
1501        shadow.Image = rockshadow;
1502        //shadow.Y = 10;
1503
1504        pienikivi.Add(shadow);
1505
1506        Add(pienikivi);
1507
1508
1509
1510    }
1511    void LisaaIsoPylvas(Vector paikka, double leveys, double korkeus)
1512    {
1513        PhysicsObject IsoPylvas = new PhysicsObject(310, 280);
1514        IsoPylvas.MakeStatic();
1515        IsoPylvas.Position = paikka;
1516        Image IsoPylvasImg = LoadImage("Stuff/Ruins/medium pillar");
1517        IsoPylvas.Image = IsoPylvasImg;
1518        IsoPylvas.Shape = Shape.FromImage(IsoPylvasImg);
1519        GameObject shadow = new GameObject(310, 280);
1520        Image PylvasShadow = LoadImage("Stuff/Ruins/medium pillar shadow");
1521        shadow.Image = PylvasShadow;
1522
1523        shadow.Position = IsoPylvas.Position;
1524
1525        Add(shadow,-1);
1526       
1527        Add(IsoPylvas,1);
1528
1529
1530    }
1531    void LisaaPieniPylvas(Vector paikka, double leveys, double korkeus)
1532    {
1533        PhysicsObject PieniPylvas = new PhysicsObject(250, 200);
1534        PieniPylvas.MakeStatic();
1535        PieniPylvas.Position = paikka;
1536        Image IsoPylvasImg = LoadImage("Stuff/Ruins/small pillar");
1537        PieniPylvas.Image = IsoPylvasImg;
1538        PieniPylvas.Shape = Shape.FromImage(IsoPylvasImg);
1539        GameObject shadow = new GameObject(250, 200);
1540        Image PylvasShadow = LoadImage("Stuff/Ruins/small pillar shadow");
1541        shadow.Image = PylvasShadow;
1542
1543        shadow.Position = PieniPylvas.Position;
1544
1545        Add(shadow, -1);
1546
1547        Add(PieniPylvas, 1);
1548
1549
1550    }
1551
1552    void SignPost(Vector paikka, double korkeu, double leveys)
1553    {
1554        PhysicsObject sign = new PhysicsObject(100, 120);
1555        sign.Position = paikka;
1556        Image signImage = LoadImage("Stuff/SignPost/Sign post");
1557        sign.Shape = Shape.FromImage(signImage);
1558        sign.Image = signImage;
1559        sign.MakeStatic();
1560        GameObject shadow = new GameObject(100, 120);
1561        Image shadowImg = LoadImage("Stuff/SignPost/Sign post shadow");
1562        shadow.Image = shadowImg;
1563        shadow.Position = sign.Position;
1564
1565        Add(shadow, -1);
1566        Add(sign, 1);
1567       
1568
1569    }
1570    void LevelTeleport(Vector paikka, double korkeus, double leveys, string uusipaikka, Vector Tulopaikka)
1571    {
1572        PhysicsObject tp = new PhysicsObject(korkeus, leveys);
1573        //AddCollisionHandler(player1);
1574        AddCollisionHandler(tp, player1, delegate(PhysicsObject a, PhysicsObject b)
1575        {
1576            PlayrStartPoint = Tulopaikka;
1577            LataaMaa(uusipaikka);
1578        });
1579
1580        tp.IgnoresCollisionResponse = true;
1581        tp.MakeStatic();
1582        tp.Position = paikka;
1583
1584        Add(tp);
1585
1586    }
1587    void LisaaKartta()
1588    {
1589        Keyboard.Listen(Key.M, ButtonState.Pressed, Kartta, null);
1590
1591
1592
1593
1594    }
1595    void Kartta()
1596    {
1597        Label kartta = new Label (1200, 900);
1598
1599        kartta.Image = PlayerEmptyHealth;
1600       
1601        Add(kartta,3);
1602        Layers[3].RelativeTransition = new Vector(0, 0); 
1603
1604        Keyboard.Listen(Key.M, ButtonState.Released, () =>
1605        {
1606            kartta.Destroy();
1607        }, null);
1608
1609
1610
1611    }
1612    void LisaaTeltta1(Vector paikka)
1613
1614    {
1615        PhysicsObject teltta = new PhysicsObject(290, 190);
1616        teltta.Position = paikka;
1617        Image telttaright = LoadImage("Stuff/Teltat/tent facing down right");
1618        teltta.Image = telttaright;
1619        teltta.MakeStatic();
1620        teltta.Shape = Shape.FromImage(telttaright);
1621        Add(teltta);
1622
1623
1624
1625    }
1626    void LisaaTeltta2(Vector paikka)
1627
1628    {
1629        PhysicsObject teltta1 = new PhysicsObject(300, 180);
1630        teltta1.Position = paikka;
1631        Image telttaleft = LoadImage("Stuff/Teltat/tent facing down left");
1632        teltta1.Image = telttaleft;
1633        teltta1.MakeStatic();
1634        teltta1.Shape = Shape.FromImage(telttaleft);
1635        Add(teltta1);
1636
1637
1638
1639    }
1640    void Boat1(Vector paikka)
1641    {
1642        PhysicsObject boat = new PhysicsObject(170, 110);
1643        boat.Position = paikka;
1644        Image boatimage = LoadImage("Stuff/Teltat/boat facing up left");
1645        boat.Image = boatimage;
1646        boat.MakeStatic();
1647        boat.Shape = Shape.FromImage(boatimage);
1648        Add(boat);
1649
1650
1651
1652    }
1653    void Fense(Vector paikka)
1654    {
1655        PhysicsObject Fencee = new PhysicsObject(280, 190);
1656        Fencee.Position = paikka;
1657        Fencee.Image = Fence;
1658        Fencee.MakeStatic();
1659        Fencee.Shape = Shape.FromImage(Fence);
1660        Add(Fencee);
1661
1662
1663    }
1664}
Note: See TracBrowser for help on using the repository browser.