source: 2018/26/OttoJ/SplitScreen/SplitScreen/SplitScreen.cs @ 9821

Revision 9821, 7.0 KB checked in by paritala, 10 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8public class SplitScreen : PhysicsGame
9{
10    const double nopeus = 200;
11    const double hyppyNopeus = 750;
12    const int RUUDUN_KOKO = 40;
13
14    PlatformCharacter pelaaja1;
15    PlatformCharacter pelaaja2;
16   
17    Image pelaajanKuva = LoadImage("norsu");
18    Image tahtiKuva = LoadImage("tahti");
19    DoubleMeter ajastinHaivytin = new DoubleMeter(0.01,0.01,10);
20
21    SoundEffect maaliAani = LoadSoundEffect("maali");
22
23    bool vuoro = true;
24    bool yhdessa = true;
25    GameObject peitto;
26    GameObject jakaja;
27    Color perusvari = Color.DarkBrown;
28    double kiriMatka = 0.01;
29    const double JAKAJA_MIN_LEVEYS = 0.01;
30    const double JAKAJA_MAX_LEVEYS = 5;
31    const double JAKAJAN_KASVATUS = 0.1;
32
33    public override void Begin()
34    {
35        Gravity = new Vector(0, -1000);
36        Camera.Follow(pelaaja1);
37        Camera.ZoomFactor = 1.9;
38        peitto = new GameObject(Screen.Width, Screen.Height);
39        peitto.Color = perusvari;
40        jakaja = new GameObject(0.01, Screen.Height);
41        jakaja.Color = Color.Black;
42        peitto.Left = jakaja.X;
43        peitto.Y = jakaja.Y;
44        jakaja.Add(peitto);
45        Add(jakaja, 3);
46       
47        LuoKentta();
48        peitto.IsVisible = false;
49        jakaja.IsVisible = false;
50        LisaaNappaimet();
51        Level.Background.Color = perusvari;
52        Camera.Position = (pelaaja1.Position + pelaaja2.Position) / 2;
53        ajastinHaivytin.LowerLimit += delegate { jakaja.IsVisible = false; };
54
55        //IsFixedTimeStep = false;
56        //Camera.StayInLevel = true;
57
58    }
59
60    TimeSpan t = TimeSpan.Zero;
61    protected override void Update(Time time)
62    {
63        //t += time.SinceLastUpdate;
64        //if (t < TimeSpan.FromMilliseconds(100)) return;
65        //else t = TimeSpan.Zero;
66        vuoro = !vuoro;
67        base.Update(time);
68
69        Vector valimatka = pelaaja1.Position - pelaaja2.Position;
70        double minEt = Screen.Width / 4;
71        if (valimatka.Magnitude > minEt)
72        {
73            yhdessa = false;
74            peitto.IsVisible = jakaja.IsVisible = true;
75
76            var p = vuoro ? pelaaja1 : pelaaja2;
77            var p2 = vuoro ? pelaaja1 : pelaaja2;
78
79            Vector cameraPos = p.Position;
80            //Vector peittoPos = p2.Position;
81
82            int kerroin = (vuoro ? -1 : 1);
83            double d = kerroin * Screen.Width / 4 / Camera.ZoomFactor;
84            //cameraPos = new Vector(cameraPos.X + d, cameraPos.Y);
85            cameraPos = p.Position + kerroin*valimatka.Normalize() * Screen.Height / 6;
86            //peittoPos = new Vector(peittoPos.X + d * 3, peittoPos.Y);
87            jakaja.Angle = valimatka.Angle + Angle.RightAngle - kerroin*Angle.RightAngle;
88            Camera.Position = cameraPos;
89            jakaja.Position = Camera.Position;
90            //peitto.Right = jakaja.Left;
91            //if (jakaja.Width < JAKAJA_MAX_LEVEYS) jakaja.Width += JAKAJAN_KASVATUS;
92        }
93        else
94        {
95            jakaja.Angle = Angle.RightAngle;
96            jakaja.Top = Screen.Bottom;
97            peitto.IsVisible = vuoro;
98            Camera.Position = (pelaaja1.Position + pelaaja2.Position)/ 2;
99            //if (jakaja.Width > JAKAJAN_KASVATUS * 2) jakaja.Width -= JAKAJAN_KASVATUS;
100            //else jakaja.IsVisible = false;
101        }
102        double jakajanLeveys = valimatka.Magnitude - minEt;
103        if (jakajanLeveys > 0 && jakajanLeveys < 50) jakaja.Width = jakajanLeveys/10;
104    }
105
106    void LuoKentta()
107    {
108        TileMap kentta = TileMap.FromLevelAsset("kentta1");
109        kentta.SetTileMethod('#', LisaaTaso);
110        kentta.SetTileMethod('*', LisaaTahti);
111        kentta.SetTileMethod('N', LisaaPelaaja);
112        kentta.SetTileMethod('P', LisaaPelaaja2);
113
114        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
115        Level.CreateBorders(false);
116        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
117    }
118
119    void LisaaTaso(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        taso.Position = paikka;
123        taso.Color = Color.DarkGray;
124        Add(taso);
125    }
126
127    void LisaaTahti(Vector paikka, double leveys, double korkeus)
128    {
129        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
130        tahti.IgnoresCollisionResponse = true;
131        tahti.Position = paikka;
132        //tahti.Image = tahtiKuva;
133        tahti.Color = Color.DarkOrange;
134        tahti.Tag = "tahti";
135        Add(tahti);
136    }
137
138    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
139    {
140        pelaaja1 = new PlatformCharacter(leveys, korkeus);
141        pelaaja1.Position = paikka;
142        pelaaja1.Mass = 4.0;
143        pelaaja1.Image = pelaajanKuva;
144        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
145        Add(pelaaja1);
146    }
147
148    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
149    {
150        pelaaja2 = new PlatformCharacter(leveys, korkeus);
151        pelaaja2.Position = paikka;
152        pelaaja2.Mass = 4.0;
153        //pelaaja2.Image = pelaajanKuva;
154        pelaaja2.Color = Color.Red;
155        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
156        Add(pelaaja2);
157    }
158
159    void LisaaNappaimet()
160    {
161        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
162        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
163
164        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
165        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
166        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
167
168        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
169
170        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
171        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
172        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
173
174
175        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
176        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
177        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
178
179        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
180    }
181
182    void Liikuta(PlatformCharacter hahmo, double nopeus)
183    {
184        hahmo.Walk(nopeus);
185    }
186
187    void Hyppaa(PlatformCharacter hahmo, double nopeus)
188    {
189        hahmo.Jump(nopeus);
190    }
191
192    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
193    {
194        maaliAani.Play();
195        MessageDisplay.Add("Keräsit tähden!");
196        tahti.Destroy();
197    }
198}
Note: See TracBrowser for help on using the repository browser.