source: 2016/24/JesseS/Hyva/Hyva/Hyva/Hyva.cs @ 7333

Revision 7333, 7.2 KB checked in by karkaite, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Hyva : PhysicsGame
10{
11    Auto Pelaaja1;
12    Auto Pelaaja2;
13    Auto Pelaaja3;
14
15    Image taustakuva = LoadImage("kentta1");
16
17    public override void Begin()
18    {
19        alkuvalikko();
20    }
21
22    void alkuvalikko()
23    {
24        ClearAll();
25        MultiSelectWindow alkuValikko = new MultiSelectWindow("Autot 2000", "Aloita peli", "Lopeta");
26        Add(alkuValikko);
27        alkuValikko.AddItemHandler(0, aloitapeli);
28        alkuValikko.AddItemHandler(1, Exit);
29    }
30
31    void aloitapeli()
32       
33    {
34        ClearAll();
35        //IsFullScreen = true; 
36        SmoothTextures = false;
37
38        //Level.Background.Color = Color.FromHexCode("20FF02");
39        //Level.Background.Image = taustakuva;
40        //Level.Background.FitToLevel();
41
42        LuoKentta();
43
44        LuoPalkit();
45
46
47        Keyboard.Listen(Key.Up, ButtonState.Down, Pelaaja1.Accelerate, null);
48        Keyboard.Listen(Key.Down, ButtonState.Down, Pelaaja1.Reverse, null);
49        Keyboard.Listen(Key.Left, ButtonState.Down, () => Pelaaja1.Turn(Pelaaja1.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
50        Keyboard.Listen(Key.Right, ButtonState.Down, () => Pelaaja1.Turn(-Pelaaja1.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
51
52        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, kaasu, null, Pelaaja1);
53        ControllerOne.ListenAnalog(AnalogControl.LeftTrigger, 0.1, jarru, null, Pelaaja1);
54        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, käänny, null, Pelaaja1);
55        ControllerOne.Listen(Button.A, ButtonState.Down, nitro, null, Pelaaja1);
56        ControllerTwo.Listen(Button.A, ButtonState.Down, nitro, null, Pelaaja2);
57        ControllerThree.Listen(Button.A, ButtonState.Down, nitro, null, Pelaaja3);
58        ControllerOne.Listen(Button.Start, ButtonState.Pressed, alkuvalikko, null);
59
60        ControllerTwo.ListenAnalog(AnalogControl.RightTrigger, 0.1, kaasu, null, Pelaaja2);
61        ControllerTwo.ListenAnalog(AnalogControl.LeftTrigger, 0.1, jarru, null, Pelaaja2);
62        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, käänny, null, Pelaaja2);
63
64        ControllerThree.ListenAnalog(AnalogControl.RightTrigger, 0.1, kaasu, null, Pelaaja3);
65        ControllerThree.ListenAnalog(AnalogControl.LeftTrigger, 0.1, jarru, null, Pelaaja3);
66        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1, käänny, null, Pelaaja3);
67
68        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
69        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
70    }
71
72    void LuoKentta()
73    {
74        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
75        ruudut.SetTileMethod(new Color(255, 0, 0), LuoPelaaja1);
76        ruudut.SetTileMethod(new Color(0, 255, 0), LuoPelaaja2);
77        ruudut.SetTileMethod(new Color(0, 0, 255), LuoPelaaja3);
78        ruudut.SetTileMethod(new Color(0, 255, 255), LuoMaali);
79        ruudut.SetTileMethod(new Color(255, 255, 0), LuoValipiste);
80        ruudut.SetTileMethod(Color.Black, LuoTaso);
81        ruudut.Execute(30, 30);
82
83        Level.Background.Color = Color.White;
84    }
85
86    void LuoTaso(Vector paikka, double leveys, double korkeus)
87    {
88        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
89        taso.Position = paikka;
90        taso.CollisionIgnoreGroup = 1;
91        taso.Color = Color.Black;
92
93        Add(taso);
94    }
95
96    void LuoMaali(Vector paikka, double leveys, double korkeus)
97    {
98        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus*5);
99        taso.Position = paikka;
100        taso.IgnoresCollisionResponse = true;
101        taso.Color = Color.Green;
102        Add(taso);
103    }
104
105    void LuoValipiste(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus*7);
108        taso.Position = paikka;
109        taso.IgnoresCollisionResponse = true;
110        taso.Color = Color.Red;
111        Add(taso);
112    }
113
114    Auto LuoPelaaja(Vector paikka, double leveys, double korkeus)
115    {
116        Auto Pelaaja = new Auto(50, 30);
117        Pelaaja.Position = paikka;
118        Pelaaja.Angle = Angle.FromDegrees(180);
119        Add(Pelaaja);
120
121        Timer ajastin = new Timer();
122        ajastin.Interval = 3;
123        ajastin.Timeout += () => Pelaaja.nitrometer.Value += 30;
124        ajastin.Start();
125
126        return Pelaaja;
127    }
128
129    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
130    {
131        Pelaaja1 = LuoPelaaja(paikka, leveys, korkeus);
132    }
133
134    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
135    {
136        Pelaaja2 = LuoPelaaja(paikka, leveys, korkeus);
137    }
138
139    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
140    {
141        Pelaaja3 = LuoPelaaja(paikka, leveys, korkeus);
142    }
143
144    void kaasu(AnalogState trigger, Auto pelaaja)
145    {
146        pelaaja.Accelerate();
147    }
148
149    void jarru(AnalogState trigger, Auto pelaaja)
150    {
151        pelaaja.Reverse();
152    }
153
154    void käänny(AnalogState tatti, Auto pelaaja)
155    {
156        pelaaja.Turn(Pelaaja1.Maneuverability * -tatti.StateVector.X, Time.SinceLastUpdate.TotalSeconds);
157    }
158
159    void nitro(Auto pelaaja)
160    {
161        if (pelaaja.nitrometer.Value > 0)
162        {
163            Vector suunta = pelaaja.Angle.GetVector();
164            pelaaja.Push(suunta * 500);
165            pelaaja.nitrometer.Value -= 1;
166        }
167    }
168
169    void LuoPalkit()
170    {
171        ProgressBar elamaPalkki1 = new ProgressBar(150, 20);
172        elamaPalkki1.X = Screen.Right - 150;
173        elamaPalkki1.Y = Screen.Top - 20;
174        elamaPalkki1.BindTo(Pelaaja1.nitrometer);
175        Add(elamaPalkki1);
176
177        ProgressBar elamaPalkki2 = new ProgressBar(150, 20);
178        elamaPalkki2.X = Screen.Right - 150;
179        elamaPalkki2.Y = Screen.Top - 60;
180        elamaPalkki2.BindTo(Pelaaja2.nitrometer);
181        Add(elamaPalkki2);
182
183        ProgressBar elamaPalkki3 = new ProgressBar(150, 20);
184        elamaPalkki3.X = Screen.Right - 150;
185        elamaPalkki3.Y = Screen.Top - 100;
186        elamaPalkki3.BindTo(Pelaaja3.nitrometer);
187        Add(elamaPalkki3);
188    }
189}
190
191class Auto : Automobile
192{
193    public double Drift { get; set; }
194    public DoubleMeter nitrometer { get; set; }
195
196    public IntMeter kierrosmittari { get; set; }
197
198    public Auto(double leveys, double korkeus)
199        : base(leveys, korkeus)
200    {
201        IsUpdated = true;
202        AngularDamping = 0.9;
203        Acceleration = 155;
204        BrakeDeceleration = 525;
205        Maneuverability = Angle.FromDegrees(200);
206        Drift = 0.9;
207        nitrometer = new DoubleMeter(100, 0, 100);
208    }
209
210    public override void Update(Time time)
211    {
212        Vector eteen = Vector.FromAngle(Angle)
213            ;
214        Vector oikealle = eteen.RightNormal;
215        Vector eteenNopeus = eteen * Vector.DotProduct(Velocity, eteen);
216        Vector oikealleNopeus = oikealle * Vector.DotProduct(Velocity, oikealle);
217        Velocity = eteenNopeus + oikealleNopeus * Drift;
218        base.Update(time);
219    }
220}
Note: See TracBrowser for help on using the repository browser.