source: 2013/anlakane/Tiernapojat/Tiernapojat/Tiernapojat.cs @ 4794

Revision 4794, 5.9 KB checked in by anlakane, 8 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 Tiernapoika : PlatformCharacter
10{
11    public KaantyvaOsa liikkuvaOsa;
12    public AxleJoint kiinnitysVartaloon;
13
14    public Tiernapoika(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17
18    }
19}
20
21/// @author  Vesa Lappalainen
22/// @version 16.10.2011
23/// <summary>
24/// Osa, jolle voidaan asettaa suunta johon se pyrkii.
25/// </summary>
26public class KaantyvaOsa : PhysicsObject
27{
28    /// <summary>
29    /// Tavoitekulma, johon maila pyrkii osoittamaan
30    /// </summary>
31    public Angle Tavoite { get { return tavoite; } set { tavoite = value; saavutettu = false; } }
32    private Angle tavoite;
33    private bool saavutettu = true;
34
35    public KaantyvaOsa(double width, double height)
36        : base(width, height)
37    {
38        // MakeStatic();
39        Mass = 10000;
40        IgnoresGravity = true;
41        IsUpdated = true;
42    }
43
44
45    /// <summary>
46    /// Uusi versio Update-metodista, jossa nyt käännetään mailaa kohti tavoitekulmaa.
47    /// </summary>
48    /// <param name="time">Peliaika</param>
49    public override void Update(Time time)
50    {
51        if (saavutettu) { base.Update(time); return; }
52        Angle diff = Tavoite - Angle;
53        double suunta = diff.Degrees;
54        double d = 2;
55        if (Math.Abs(suunta) > d)
56        {
57            this.StopAngular();
58            this.ApplyTorque(10000000 * 35.0 * suunta); // kokeiltu hihavakio
59        }
60        else
61        {
62            Stop();
63            saavutettu = true;
64        }
65        base.Update(time);
66    }
67}
68
69public class Tiernapojat : PhysicsGame
70{
71    const double nopeus = 200;
72    const double hyppyNopeus = 750;
73    const int RUUDUN_KOKO = 40;
74
75    Tiernapoika poika1;
76
77    //Image pelaajanKuva = LoadImage("norsu");
78    Image tahtiKuva = LoadImage("tahti");
79
80    SoundEffect maaliAani = LoadSoundEffect("maali");
81
82    public override void Begin()
83    {
84        Gravity = new Vector(0, -1000);
85
86        LuoKentta();
87        LisaaNappaimet();
88
89        Camera.Follow(poika1);
90        Camera.ZoomFactor = 1.2;
91        Camera.StayInLevel = true;
92    }
93
94    void LuoKentta()
95    {
96        TileMap kentta = TileMap.FromLevelAsset("kentta1");
97        kentta.SetTileMethod('#', LisaaTaso);
98        kentta.SetTileMethod('*', LisaaTahti);
99        kentta.SetTileMethod('N', LisaaPelaaja);
100        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
101        Level.CreateBorders();
102        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
103    }
104
105    void LisaaTaso(Vector paikka, double leveys, double korkeus)
106    {
107        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
108        taso.Position = paikka;
109        taso.Color = Color.Green;
110        Add(taso);
111    }
112
113    void LisaaTahti(Vector paikka, double leveys, double korkeus)
114    {
115        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
116        tahti.IgnoresCollisionResponse = true;
117        tahti.Position = paikka;
118        tahti.Image = tahtiKuva;
119        tahti.Tag = "tahti";
120        Add(tahti);
121    }
122
123    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
124    {
125        poika1 = new Tiernapoika(leveys, korkeus);
126        poika1.Position = paikka;
127        poika1.Color = Color.Red;
128        poika1.Mass = 4.0;
129
130        // Pojan oikea käsi
131        poika1.liikkuvaOsa = new KaantyvaOsa(poika1.Height, poika1.Height / 4);
132        poika1.liikkuvaOsa.Left = poika1.Right - poika1.Width / 10;
133        poika1.liikkuvaOsa.Y = poika1.Top - poika1.Height / 4;
134        poika1.liikkuvaOsa.Color = Color.Gray;
135        Add(poika1.liikkuvaOsa);
136
137        poika1.kiinnitysVartaloon = new AxleJoint(poika1, poika1.liikkuvaOsa, new Vector(poika1.Right, poika1.liikkuvaOsa.Y));
138        poika1.kiinnitysVartaloon.Softness = 0.01;
139        Add(poika1.kiinnitysVartaloon);
140        // Poika ja käsi eivät saa törmätä toisiinsa
141        poika1.CollisionIgnoreGroup = 1;
142        poika1.liikkuvaOsa.CollisionIgnoreGroup = 1;
143
144        // pelaaja1.Image = pelaajanKuva;
145        AddCollisionHandler(poika1, "tahti", TormaaTahteen);
146        Add(poika1);
147    }
148
149    void LisaaNappaimet()
150    {
151        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
152        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
153
154        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", poika1, -nopeus);
155        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", poika1, nopeus);
156        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", poika1, hyppyNopeus);
157
158        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
159        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", poika1, -nopeus);
160        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", poika1, nopeus);
161        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", poika1, hyppyNopeus);
162
163        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, LiikutaKatta, "Liikuta kättä", poika1);
164
165        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
166    }
167
168    void LiikutaKatta(AnalogState a, Tiernapoika poika)
169    {
170        double kulma = a.StateVector.Y * 90;
171        poika.liikkuvaOsa.Tavoite = Angle.FromDegrees(kulma);
172    }
173
174    void Liikuta(PlatformCharacter hahmo, double nopeus)
175    {
176        hahmo.Walk(nopeus);
177    }
178
179    void Hyppaa(PlatformCharacter hahmo, double nopeus)
180    {
181        hahmo.Jump(nopeus);
182    }
183
184    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
185    {
186        maaliAani.Play();
187        MessageDisplay.Add("Keräsit tähden!");
188        tahti.Destroy();
189    }
190}
Note: See TracBrowser for help on using the repository browser.