source: 2014/30/AleksiK/TToDHS/TToDHS/TToDHS/TToDHS.cs @ 5538

Revision 5538, 8.1 KB checked in by iimlart, 9 years ago (diff)

Alku - Cutscene 1.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class TToDHS : PhysicsGame
10{
11    PhysicsObject stein;
12    //VAIHDA NIMI NAISESTA NIMEKSI
13    PhysicsObject nainen;
14    double ruutuNelionSivu;
15
16    List<Label> alkuKohdat;
17    Label luetDocua;
18
19    //TO DO: Asioiden tutkiminen, Vitriini + SteinAse, Inventory, Nainen + MustaTakit, TutorialBattle + Stats + Party, Tarinaa ->, muut huoneet, itemit, battlet
20
21    public override void Begin()
22    {
23        //IsFullScreen = true;
24        ruutuNelionSivu = Screen.Height / 20;
25        AlkuValikko();
26
27        Level.Background.Color = Color.Black;
28    }
29
30    void AlkuValikko()
31    {
32        Mouse.IsCursorVisible = true;
33
34        Label otsikko = new Label("The Tale of Dr Harvard Stein");
35        otsikko.Position = new Vector(0, 140);
36        otsikko.Font = Font.DefaultLargeBold;
37        otsikko.TextColor = Color.BrightGreen;
38        Add(otsikko);
39
40        alkuKohdat = new List<Label>();
41
42        Label alku1 = new Label("New Game");
43        alku1.Position = new Vector(0, 80);
44        alku1.Font = Font.DefaultLarge;
45        alkuKohdat.Add(alku1);
46
47        Label alku2 = new Label("Exit");
48        alku2.Position = new Vector(0, 30);
49        alku2.Font = Font.DefaultLarge;
50        alkuKohdat.Add(alku2);
51
52
53        foreach (Label alkuKohta in alkuKohdat)
54        {
55            Add(alkuKohta);
56        }
57
58        Mouse.ListenOn(alku1, MouseButton.Left, ButtonState.Pressed, LuoLabra, null);
59        Mouse.ListenOn(alku2, MouseButton.Left, ButtonState.Pressed, Exit, null);
60        Mouse.ListenMovement(1.0, AlkuKohtaHiiri, null);
61    }
62
63    void AlkuKohtaHiiri(AnalogState hiiri)
64    {
65        foreach (Label alkuKohta in alkuKohdat)
66        {
67            if (Mouse.IsCursorOn(alkuKohta))
68            {
69                alkuKohta.TextColor = Color.Red;
70            }
71
72            else
73            {
74                alkuKohta.TextColor = Color.Blue;
75            }
76        }
77    }
78
79    void LuoLabra()
80    {
81        ClearAll();
82        Level.Background.Color = Color.Black;
83        TileMap labHuone = TileMap.FromLevelAsset("Labrahuone");
84        labHuone.SetTileMethod('X', LuoSeina);
85        labHuone.SetTileMethod('S', LuoStein);
86        labHuone.SetTileMethod('D', LuoDoc);
87        labHuone.SetTileMethod('V', LuoVitriini);
88        labHuone.SetTileMethod('A', LuoAse);
89        labHuone.Execute(ruutuNelionSivu, ruutuNelionSivu);
90        Camera.Follow(stein);
91        Camera.Zoom(0.5);
92    }
93
94    void LuoSeina(Vector paikka, double leveys, double korkeus)
95    {
96        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
97        seina.Position = paikka;
98        seina.Color = Color.Gray;
99        seina.CollisionIgnoreGroup = 1;
100        seina.Restitution = 0;
101        AddCollisionHandler(seina, "stein", PalautaStein);
102        Add(seina);
103    }
104
105    void LuoStein(Vector paikka, double leveys, double korkeus)
106    {
107        stein = new PhysicsObject(leveys * 0.8, korkeus * 0.8);
108        stein.Position = paikka;
109        stein.Color = Color.Green;
110        stein.Restitution = 0;
111        stein.CanRotate = false;
112        stein.Tag = "stein";
113        Add(stein);
114
115        SteinKontrollit(0);
116    }
117
118    void SteinKontrollit(int x)
119    {
120        if (x == 1)
121        {
122            luetDocua.Destroy();
123        }
124
125        ClearControls();
126
127        //Jos muutat nopeutta, moni Timer.Singleshot menee väärään aikaan, mm. PalautaStein, SteinNopeus ja LuetDoc
128        Keyboard.Listen(Key.D, ButtonState.Down, AsiaNopeus, null, stein, ruutuNelionSivu * 5, 0.0);
129        Keyboard.Listen(Key.A, ButtonState.Down, AsiaNopeus, null, stein, -ruutuNelionSivu * 5, 0.0);
130        Keyboard.Listen(Key.W, ButtonState.Down, AsiaNopeus, null, stein, 0.0, ruutuNelionSivu * 5);
131        Keyboard.Listen(Key.S, ButtonState.Down, AsiaNopeus, null, stein, 0.0, -ruutuNelionSivu * 5);
132    }
133
134    void AsiaNopeus(PhysicsObject liikkuja, double x, double y)
135    {
136        liikkuja.Velocity = new Vector(x, y);
137
138        if ((x + 1 ) * (y + 1) > 1)
139        {
140            ClearControls();
141            Timer.SingleShot(0.2, delegate { AsiaNopeus(liikkuja, 0, 0); });
142        }
143
144        else if ((x + 1) * (y + 1) < 1)
145        {
146            ClearControls();
147            Timer.SingleShot(0.2, delegate { AsiaNopeus(liikkuja, 0, 0); });
148        }
149
150        else
151        {
152            SteinKontrollit(0);
153        }
154    }
155
156    void PalautaStein(PhysicsObject wall, PhysicsObject dr)
157    {
158        dr.Velocity = dr.Velocity * -1;
159        //Määritetty Steinin koosta ja nopeudesta
160        Timer.SingleShot( 0.04, delegate { AsiaNopeus(dr, 0, 0); });
161    }
162
163    void LuoDoc(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject doc = PhysicsObject.CreateStaticObject(leveys, korkeus);
166        doc.Position = paikka;
167        doc.Color = Color.White;
168        doc.CollisionIgnoreGroup = 1;
169        doc.Restitution = 0;
170        AddCollisionHandler(doc, "stein", PalautaStein);
171        AddCollisionHandler(doc, "stein", LuetDoc);
172        Add(doc);
173    }
174
175    //Selvitä miksi toisen LuetDocun jälkeen kontrollit eivät lähde
176
177    void LuetDoc(PhysicsObject doku, PhysicsObject dr)
178    {
179        luetDocua = new Label("It's full of complicated calculations. Better leave it alone.");
180        luetDocua.Y = Screen.Bottom + 100;
181        luetDocua.Font = Font.DefaultLarge;
182        luetDocua.TextColor = Color.Green;
183        luetDocua.Color = Color.DarkGray;
184        luetDocua.BorderColor = Color.Gray;
185        Add(luetDocua);
186
187        ClearControls();
188        Timer.SingleShot(0.042, delegate { ClearControls(); });
189        Timer.SingleShot(0.161, delegate { ClearControls(); });
190
191        Timer.SingleShot(1, delegate { Keyboard.Listen(Key.Space, ButtonState.Pressed, SteinKontrollit, null, 1); });
192    }
193
194    void LuoVitriini(Vector paikka, double leveys, double korkeus)
195    {
196        PhysicsObject vitriini = PhysicsObject.CreateStaticObject(leveys * 3, korkeus);
197        vitriini.Position = paikka;
198        vitriini.CollisionIgnoreGroup = 1;
199        vitriini.Restitution = 0;
200        AddCollisionHandler(vitriini, "stein", PalautaStein);
201        Add(vitriini);
202    }
203
204    void LuoAse(Vector paikka, double leveys, double korkeus)
205    {
206        PhysicsObject ase = PhysicsObject.CreateStaticObject(leveys, korkeus);
207        ase.Position = paikka;
208        ase.Color = Color.Red;
209        ase.IgnoresCollisionResponse = true;
210        AddCollisionHandler(ase, "stein", SaitAseen);
211        Add(ase);
212    }
213
214    void SaitAseen(PhysicsObject esine, PhysicsObject dr)
215    {
216        esine.Destroy();
217
218        Timer.SingleShot(2, Cutscene1);
219    }
220
221    void Cutscene1()
222    {
223        LuoNainen(new Vector(-ruutuNelionSivu * 12, -ruutuNelionSivu * 1), ruutuNelionSivu, ruutuNelionSivu);
224        nainen.Velocity = new Vector(ruutuNelionSivu * 5, 0);
225        Timer.SingleShot(1, delegate { AsiaNopeus(nainen, 0, 0); });
226        Timer.SingleShot(1, delegate { nainen.Velocity = new Vector(0, -ruutuNelionSivu * 5); });
227        Timer.SingleShot(1.8, delegate { AsiaNopeus(nainen, 0, 0); });
228        Timer.SingleShot(1.8, delegate { nainen.Velocity = new Vector(ruutuNelionSivu * 5, 0); });
229        Timer.SingleShot(3.2, delegate { AsiaNopeus(nainen, 0, 0); });
230    }
231
232    //Vaihda nimi Luo[NaisenNimi]
233    //Muista parametrit!
234
235    void LuoNainen(Vector paikka, double leveys, double korkeus)
236    {
237        nainen = new PhysicsObject(leveys, korkeus);
238        nainen.Position = paikka;
239        nainen.Color = Color.Red;
240        nainen.Restitution = 0;
241        nainen.CanRotate = false;
242        Add(nainen);
243    }
244
245    //Muista parametrit!
246
247    void LuoMustaTakki(Vector paikka, double leveys, double korkeus)
248    {
249        PhysicsObject mustaTakki = new PhysicsObject(leveys, korkeus);
250        mustaTakki.Position = paikka;
251        mustaTakki.Color = Color.DarkGray;
252        mustaTakki.Restitution = 0;
253        mustaTakki.CanRotate = false;
254        Add(mustaTakki);
255    }
256}
Note: See TracBrowser for help on using the repository browser.