source: 2014/30/MitjaK/Attack to Agora/Attack to Agora/Attack to Agora/Attack to Agora/Attack_to_Agora.cs @ 6237

Revision 6237, 5.2 KB checked in by anlakane, 6 years ago (diff)

Miskan ebin haxeja

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Attack_to_Agora : PhysicsGame
10{
11    private Animation chuckinkavely;
12
13    /// <summary>
14    /// Vakiot kannattaa merkitä constiksi (ei voi muuttaa). Tällöin ne kirjoitetaan isolla.
15    /// </summary>
16    const double NOPEUS = 250;
17    const double HYPPYVOIMA = 1500;
18
19    Image level1 = LoadImage("kentta1");
20    Image taistelijanvarjo = LoadImage("varjo");
21
22    Image taistelijaOlio = LoadImage("olio");
23    PlatformCharacter taistelija;
24
25    int kenttaNro = 5;
26
27    public override void Begin()
28    {
29        LataaContent();
30        LuoKentta();
31        AsetaOhjaimet();
32    }
33
34    void Liikuta(PlatformCharacter pelaaja, double suunta)
35    {
36        pelaaja.Walk(suunta);
37
38        if (!pelaaja.Animation.IsPlaying)
39            pelaaja.Animation.Resume();
40    }
41
42    void LiikutaYlos(PlatformCharacter pelaaja)
43    {
44        pelaaja.Jump(HYPPYVOIMA);
45    }
46
47    void LataaContent()
48    {
49        chuckinkavely = LoadAnimation("pelaajaliikkuu");
50    }
51
52    void LuoKentta()
53    {
54        SmoothTextures = false;
55        // IsFullScreen = true;
56        Gravity = new Vector(0, -2500);
57
58        SetWindowSize(1920, 1080);
59        // Synkataan taustakuvan ja colortilemapin pikselit
60        Level.Background.Image = LoadImage("kentta" + kenttaNro.ToString());
61
62        Level.Width = Screen.Width;
63        double kerroin = (double)Level.Background.Image.Width / Level.Background.Image.Height;
64        Level.Height = Level.Width / kerroin;
65        Level.Background.FitToLevel();
66
67        Image pohjaLevynKuva = LoadImage("kentta" + kenttaNro.ToString() + "pohja");
68
69        ColorTileMap pohjaLevy = new ColorTileMap(pohjaLevynKuva);
70        pohjaLevy.SetTileMethod(Color.Gold, LuoPohja);
71        pohjaLevy.SetTileMethod(Color.Cyan, Luotaistelija);
72        pohjaLevy.Optimize(Color.Gold);
73
74        // oletuksena 1 pikseli = 1 unit
75        const double BASE_SIZE = 1.0;
76        double widthMultiplier = Level.Width / pohjaLevynKuva.Width;
77        double heightMultiplier = Level.Height / pohjaLevynKuva.Height;
78        pohjaLevy.Execute(BASE_SIZE * widthMultiplier, BASE_SIZE * heightMultiplier);
79
80        // PhysicsObject pohja = Level.CreateBottomBorder();
81        // pohja.Y = Level.Bottom + 100;
82        //pohja.IsVisible = false;
83        PhysicsObject vasenreuna = Level.CreateLeftBorder();
84        vasenreuna.X -= 75;
85        vasenreuna.Tag = "vasenreuna";
86        //PhysicsObject oikeareuna = Level.CreateRightBorder();
87        //oikeareuna.X += 75;
88        //oikeareuna.Tag = "oikeareuna";
89
90        Varjo();
91    }
92
93    void Luotaistelija(Vector paikka, double leveys, double korkeus)
94    {
95
96        taistelija = new PlatformCharacter(75, 75);
97        taistelija.Shape = Shape.Rectangle;
98        taistelija.Animation = new Animation(chuckinkavely);
99        taistelija.Animation.Start();
100        taistelija.Position = paikka;
101
102        AddCollisionHandler(taistelija, "vasenreuna", SeuraavaKentta);
103
104        taistelija.Mass = 10.0;
105        Add(taistelija);
106        Camera.Follow(taistelija);
107        Camera.StayInLevel = true;
108    }
109
110    void Varjo()
111    {
112        GameObject varjo = new GameObject(70, 30);
113        varjo.Image = taistelijanvarjo;
114        Add(varjo, -1);
115
116        Timer ajastin = new Timer();
117        ajastin.Interval = 0.01;
118        ajastin.Timeout += delegate
119        {
120            varjo.X = taistelija.X;
121            varjo.Y = EtsiVarjonY();
122        };
123        ajastin.Start();
124    }
125
126    /// <summary>
127    /// Etsii pelaajaa lähimpänä pelaajan alla olevan lattiapalikan huipun Y-koordinaatin.
128    /// </summary>
129    /// <returns></returns>
130    double EtsiVarjonY()
131    {
132        List<GameObject> possibleFloorPieces = GetObjects(x => x.Left < taistelija.X && x.Right > taistelija.X);
133
134        double highestY = double.MinValue;
135        int highestIndex = -1;
136
137        for (int i = 0; i < possibleFloorPieces.Count; i++)
138        {
139            double currentY = possibleFloorPieces[i].Y;
140
141            if (currentY > highestY && currentY < taistelija.Bottom) 
142            {
143                highestY = currentY;
144                highestIndex = i;
145            }
146        }
147
148        return possibleFloorPieces[highestIndex].Top;
149    }
150
151    void SeuraavaKentta(PhysicsObject tormaaja, PhysicsObject tormatty)
152    {
153        ClearAll();
154        kenttaNro++;
155        LuoKentta();
156    }
157
158    void LuoPohja(Vector paikka, double leveys, double korkeus)
159    {
160        PhysicsObject pala = PhysicsObject.CreateStaticObject(leveys, korkeus);
161        pala.Position = paikka;
162        pala.IsVisible = false;
163        Add(pala);
164    }
165
166    /// <summary>
167    /// Asetetaan pelaajalle ohjaimet.
168    /// </summary>
169    void AsetaOhjaimet()
170    {
171        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, null, taistelija, -NOPEUS);
172        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, null, taistelija, NOPEUS);
173        Keyboard.Listen(Key.Space, ButtonState.Pressed, LiikutaYlos, null, taistelija);
174        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
175    }
176}
Note: See TracBrowser for help on using the repository browser.