1 | using System; |
---|
2 | using System.Collections.Generic; |
---|
3 | using Jypeli; |
---|
4 | using Jypeli.Assets; |
---|
5 | using Jypeli.Controls; |
---|
6 | using Jypeli.Effects; |
---|
7 | using Jypeli.Widgets; |
---|
8 | |
---|
9 | public 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 | } |
---|