1 | using System; |
---|
2 | using Jypeli; |
---|
3 | using Jypeli.ScreenObjects; |
---|
4 | using Jypeli.Assets; |
---|
5 | |
---|
6 | public class Peli : PhysicsGame |
---|
7 | { |
---|
8 | const double KavelyNopeus = 10; |
---|
9 | const bool Gore = false; // K-18 |
---|
10 | |
---|
11 | Image[] laskuvarjonKuvat; |
---|
12 | PhysicsObject maasto; |
---|
13 | PlatformCharacter pelaaja; |
---|
14 | GameObject laskuvarjo; |
---|
15 | double keinumisSuunta = 1.0; |
---|
16 | |
---|
17 | protected override void Begin() |
---|
18 | { |
---|
19 | laskuvarjonKuvat = LoadImages( |
---|
20 | "laskuvarjo1", |
---|
21 | "laskuvarjo2", |
---|
22 | "laskuvarjo3", |
---|
23 | "laskuvarjo4", |
---|
24 | "laskuvarjo5", |
---|
25 | "laskuvarjo6", |
---|
26 | "laskuvarjo7" |
---|
27 | ); |
---|
28 | |
---|
29 | Gravity = new Vector( 0, -500 ); |
---|
30 | |
---|
31 | Level.Width = 3000; |
---|
32 | Level.Height = 10000; |
---|
33 | Level.BackgroundColor = Color.LightBlue; |
---|
34 | |
---|
35 | PhysicsObject leftBorder = Level.CreateLeftBorder(); |
---|
36 | PhysicsObject rightBorder = Level.CreateRightBorder(); |
---|
37 | leftBorder.IsVisible = false; |
---|
38 | rightBorder.IsVisible = false; |
---|
39 | |
---|
40 | LuoMaasto(); |
---|
41 | LisaaPilvet(); |
---|
42 | |
---|
43 | pelaaja = new PlatformCharacter( 20, 30 ); |
---|
44 | pelaaja.CanMoveOnAir = false; |
---|
45 | pelaaja.Mass = 80; |
---|
46 | pelaaja.Image = LoadImage( "hahmo" ); |
---|
47 | pelaaja.Color = Color.Black; |
---|
48 | pelaaja.LinearDamping = 0.99; |
---|
49 | pelaaja.X = 0; |
---|
50 | pelaaja.Y = Level.Top - 6000; |
---|
51 | Add( pelaaja ); |
---|
52 | |
---|
53 | AddCollisionHandler( pelaaja, PelaajaOsuu ); |
---|
54 | |
---|
55 | laskuvarjo = new GameObject( 50, 50 ); |
---|
56 | laskuvarjo.IsVisible = false; |
---|
57 | laskuvarjo.X = 0; |
---|
58 | laskuvarjo.Y = 20; |
---|
59 | laskuvarjo.Animation = new Animation( laskuvarjonKuvat ); |
---|
60 | laskuvarjo.Animation.StopOnLastFrame = true; |
---|
61 | pelaaja.Add( laskuvarjo ); |
---|
62 | |
---|
63 | Camera.Follow( pelaaja ); |
---|
64 | |
---|
65 | Timer korkeusAjastin = new Timer(); |
---|
66 | korkeusAjastin.Interval = 1; |
---|
67 | korkeusAjastin.Trigger += NaytaKorkeus; |
---|
68 | Add( korkeusAjastin ); |
---|
69 | korkeusAjastin.Start(); |
---|
70 | |
---|
71 | AsetaOhjaimet(); |
---|
72 | } |
---|
73 | |
---|
74 | void NaytaKorkeus( Timer sender ) |
---|
75 | { |
---|
76 | double korkeus = pelaaja.Y - Level.Bottom; |
---|
77 | MessageDisplay.Add( "Korkeus: " + korkeus.ToString( "F0" ) ); |
---|
78 | |
---|
79 | if ( korkeus < 100 ) |
---|
80 | { |
---|
81 | sender.Stop(); |
---|
82 | } |
---|
83 | } |
---|
84 | |
---|
85 | void PelaajaOsuu( PhysicsObject pelaaja, PhysicsObject toinen ) |
---|
86 | { |
---|
87 | if ( toinen == maasto ) |
---|
88 | { |
---|
89 | SuljeLaskuvarjo(); |
---|
90 | |
---|
91 | MessageDisplay.Add( "nopeus: " + pelaaja.Velocity.Y ); |
---|
92 | |
---|
93 | if ( Math.Abs(pelaaja.Velocity.Y) > 200 ) |
---|
94 | { |
---|
95 | // auts... |
---|
96 | if (Gore) |
---|
97 | { |
---|
98 | for (int i = 0; i < 100; i++) |
---|
99 | { |
---|
100 | PhysicsObject jama = new PhysicsObject(RandomGen.NextInt(1, 5), RandomGen.NextInt(1, 5)); |
---|
101 | jama.X = pelaaja.X; |
---|
102 | jama.Y = pelaaja.Y; |
---|
103 | Vector maiskeenlento = Vector.FromLengthAndAngle(RandomGen.NextDouble(0, 1000), RandomGen.NextAngle()); |
---|
104 | jama.KineticFriction = 0.5; |
---|
105 | jama.LinearDamping = 0.99; |
---|
106 | jama.Color = RandomGen.NextColor(Color.Red, Color.Brown); |
---|
107 | //jama.Color = Color.Red; |
---|
108 | jama.Hit(maiskeenlento); |
---|
109 | Add(jama); |
---|
110 | } |
---|
111 | } |
---|
112 | // Vector maiskeenlento = new Vector(); |
---|
113 | |
---|
114 | |
---|
115 | |
---|
116 | |
---|
117 | pelaaja.Image = null; |
---|
118 | pelaaja.Color = Color.Black; |
---|
119 | pelaaja.Size = new Vector( 20, 5 ); |
---|
120 | } |
---|
121 | } |
---|
122 | } |
---|
123 | |
---|
124 | void LisaaPilvet() |
---|
125 | { |
---|
126 | for ( int i = 0; i < 100; i++ ) |
---|
127 | { |
---|
128 | double leveys = RandomGen.NextDouble( 100, 600 ); |
---|
129 | double korkeus = RandomGen.NextDouble( 100, 500 ); |
---|
130 | GameObject pilvi = new GameObject( leveys, korkeus, Shapes.Circle ); |
---|
131 | pilvi.X = RandomGen.NextDouble( Level.Left, Level.Right ); |
---|
132 | pilvi.Y = RandomGen.NextDouble( Level.Bottom + 1000, Level.Top ); |
---|
133 | pilvi.Color = Color.White; |
---|
134 | Add( pilvi ); |
---|
135 | } |
---|
136 | } |
---|
137 | |
---|
138 | void LuoMaasto() |
---|
139 | { |
---|
140 | maasto = PhysicsObject.CreateStaticObject( Level.Width, 1000, Shapes.Rectangle ); |
---|
141 | maasto.X = 0; |
---|
142 | maasto.Y = Level.Bottom - maasto.Height / 2; |
---|
143 | maasto.Color = Color.Green; |
---|
144 | Add( maasto ); |
---|
145 | |
---|
146 | // TODO: jotain taustaa että näkee käveleekö. |
---|
147 | } |
---|
148 | |
---|
149 | void SuljeLaskuvarjo() |
---|
150 | { |
---|
151 | laskuvarjo.Animation.Stop(); |
---|
152 | laskuvarjo.IsVisible = false; |
---|
153 | pelaaja.Angle = Angle.Zero; |
---|
154 | } |
---|
155 | |
---|
156 | void AsetaOhjaimet() |
---|
157 | { |
---|
158 | Keyboard.Listen( Key.Escape, ButtonState.Pressed, Exit, null ); |
---|
159 | Keyboard.Listen( Key.Space, ButtonState.Pressed, AukaiseLaskuvarjo, "Aukaise laskuvarjo" ); |
---|
160 | Keyboard.Listen( Key.Left, ButtonState.Down, pelaaja.Walk, null, -KavelyNopeus ); |
---|
161 | Keyboard.Listen( Key.Right, ButtonState.Down, pelaaja.Walk, null, KavelyNopeus ); |
---|
162 | } |
---|
163 | |
---|
164 | void AukaiseLaskuvarjo() |
---|
165 | { |
---|
166 | if ( !laskuvarjo.IsVisible ) |
---|
167 | { |
---|
168 | laskuvarjo.IsVisible = true; |
---|
169 | laskuvarjo.Animation.Start( 1 ); |
---|
170 | } |
---|
171 | } |
---|
172 | |
---|
173 | protected override void Update( Time time ) |
---|
174 | { |
---|
175 | if ( laskuvarjo.IsVisible ) |
---|
176 | { |
---|
177 | Vector nostoVoima = new Vector( 0, 32000 ); |
---|
178 | pelaaja.Push( nostoVoima ); |
---|
179 | |
---|
180 | Angle asteitaSekunnissa = Angle.Degrees( 5 ); |
---|
181 | pelaaja.Angle += keinumisSuunta * asteitaSekunnissa * time.SinceLastUpdate.TotalSeconds; |
---|
182 | |
---|
183 | if ( pelaaja.Angle.Degree > 10 ) |
---|
184 | { |
---|
185 | keinumisSuunta = -1.0; |
---|
186 | } |
---|
187 | else if ( pelaaja.Angle.Degree < -5 ) |
---|
188 | { |
---|
189 | keinumisSuunta = 1.0; |
---|
190 | } |
---|
191 | } |
---|
192 | |
---|
193 | base.Update( time ); |
---|
194 | } |
---|
195 | } |
---|