source: 2013/anlakane/Tiernapojat/Tiernapojat/Tiernapojat/Tiernapoika.cs @ 4823

Revision 4823, 7.2 KB checked in by vesal, 6 years ago (diff)

Kommentit.

Line 
1using System;
2using Jypeli;
3
4/// <summary>
5/// "Taulukko" tiernapojan kuville
6/// </summary>
7public struct TiernapojanKuvat
8{
9    public Image vartalo;
10    public Image vartaloTakaa;
11    public Image polvillaan;
12    public Image kasi;
13    public Image miekka;
14    public Image kahva;
15    public Image paa;
16    public Image paaTakaa;
17    public Image suuAuki;
18}
19
20
21
22/// <summary>
23/// Tiernapoika joka osaa heiluttaa kättä, päätä ja suuta.
24/// Kädessä voi olla miekka tai miekan voi laittaa tuppeen.
25/// </summary>
26public class Tiernapoika : PlatformCharacter
27{
28    // Tiernapojan osat
29    private KaantyvaOsa paa;
30    private KaantyvaOsa kasi;
31    private PhysicsObject miekka;
32    private PhysicsObject miekankahva;
33
34
35    // Alkuperäiset koot
36    private Vector koko;
37    private Vector paanKoko;
38    private Vector kadenKoko;
39    private Vector miekanKoko;
40    private Vector miekanKahvanKoko;
41
42    private TiernapojanKuvat kuvat;
43
44    private Direction suunta;
45
46    private PhysicsGame peli;
47
48    public KaantyvaOsa Kasi
49    {
50        get { return kasi; }
51    }
52
53    public PhysicsObject Miekka
54    {
55        get { return miekka; }
56    }
57
58
59    public Tiernapoika(PhysicsGame peli, double leveys, double korkeus, TiernapojanKuvat kuvat)
60        : base(leveys, korkeus)
61    {
62        this.kuvat = kuvat;
63        double suhde = korkeus / leveys; // olion kuvasuhde
64        Image = kuvat.vartalo;
65        Height = Width * Image.Height / Image.Width * suhde; // tekstuurin kuvasuhde
66        koko = Size;
67        CollisionIgnoreGroup = 1;
68        Mass = 5000.0;
69        suunta = Direction.Right;
70        DirectionChanged += new Action<Direction>(Kaantyi);
71
72        // Pojan pää
73        paa = new KaantyvaOsa(1, 1);
74        paa.Image = kuvat.paa;
75        paa.Height = paa.Image.Height * Size.Y / Image.Height;
76        paa.Width = paa.Image.Width * Size.X / Image.Width;
77        paa.IgnoresGravity = true;
78        paa.CollisionIgnoreGroup = 1;
79        paanKoko = paa.Size;
80        paa.Mass = 10000;
81        paa.Suunta = Direction.Left;
82        Add(paa);
83
84        // Pojan oikea käsi
85        kasi = new KaantyvaOsa(Height, Height);
86        kasi.Image = kuvat.kasi;
87        kasi.Height = kasi.Image.Height * Height / Image.Height / suhde;
88        kasi.Width = kasi.Height / kasi.Image.Height * kasi.Image.Width * suhde;
89        // Poika ja käsi eivät saa törmätä toisiinsa
90        kasi.CollisionIgnoreGroup = 1;
91        kadenKoko = kasi.Size;
92        kasi.Mass = 2000;
93        Add(kasi);
94
95
96        miekka = new PhysicsObject(Height * 0.7, 1);
97        miekka.Image = kuvat.miekka;
98        miekka.Height = miekka.Width * miekka.Image.Height / miekka.Image.Width;
99        miekka.IgnoresGravity = true;
100        miekka.CollisionIgnoreGroup = 1;
101        miekanKoko = miekka.Size;
102        miekka.Angle = Angle.FromDegrees(10);
103        kasi.Add(miekka);
104
105        miekankahva = new PhysicsObject(Height * 0.7, 1);
106        miekankahva.Image = kuvat.kahva;
107        miekankahva.Height = miekankahva.Image.Height * miekanKoko.Y / miekka.Image.Height;
108        miekankahva.Width = miekankahva.Image.Width * miekanKoko.X / miekka.Image.Width;
109        miekankahva.IgnoresGravity = true;
110        miekankahva.CollisionIgnoreGroup = 1;
111        miekanKahvanKoko = miekankahva.Size;
112        miekankahva.Angle = Angle.FromDegrees(-20);
113        Add(miekankahva);
114
115        peli.Add(this, 1);
116        this.peli = peli;
117        MiekkaEsiin();
118        SaadaKoko(koko);
119    }
120
121    private void Kaantyi(Direction suunta)
122    {
123        double suuntakerroin = 1;
124        miekka.StopAngular();
125        if (suunta == Direction.Left) suuntakerroin = -1;
126        miekka.Angle = Angle.FromDegrees(10 * suuntakerroin);
127        miekankahva.Angle = Angle.FromDegrees(-20 * suuntakerroin);
128        kasi.Suunta = suunta;
129        // paa.Suunta = suunta;
130        this.suunta = suunta;
131        paa.Tavoite = Angle.FromDegrees(suuntakerroin * 20);
132
133        kasi.Position = new Vector(Width / 2 * 0.85 * suuntakerroin, Height * 0.27);
134        paa.Position = new Vector(Width * 0.1 * suuntakerroin, Height * 0.3);
135        miekankahva.Position = new Vector(0, Height * 0.1);
136        miekka.Position = new Vector(kasi.Width / 2 - 10, 0);
137    }
138
139
140    private void SaadaKoko(Vector uusikoko, bool myosMuut = true)
141    {
142        Size = uusikoko;
143        if (myosMuut)
144        {
145            double kerroin = Size.Y / koko.Y;
146            kasi.Size = kadenKoko * kerroin;
147            miekka.Size = miekanKoko * kerroin;
148            miekankahva.Size = miekanKahvanKoko * kerroin;
149            paa.Size = paanKoko * kerroin;
150        }
151        Kaantyi(suunta);
152    }
153
154
155    public void Flip()
156    {
157        if (suunta == Direction.Left) Walk(0.1);
158        else Walk(-0.1);
159    }
160
161
162    public void Nouse(double nopeus)
163    {
164        SaadaKoko(koko);
165        Kaantyi(suunta);
166        Image = kuvat.vartalo;
167        paa.Image = kuvat.paa;
168    }
169
170    public void Polvistu(double nopeus)
171    {
172        SaadaKoko(new Vector(Width, koko.Y / 2), false);
173        MiekkaTuppeen();
174        Image = kuvat.polvillaan;
175    }
176
177    public void Pois(double nopeus)
178    {
179        if (Height < koko.Y / 2) return;
180        if (Image == kuvat.polvillaan) Nouse(1);
181        SaadaKoko(Size * 0.99);
182        //  peli.Remove(this);
183        //  peli.Add(this, -1);
184        if (Image != kuvat.vartaloTakaa)
185        {
186            Image = kuvat.vartaloTakaa;
187            paa.Image = kuvat.paaTakaa;
188            Flip();
189            miekankahva.IsVisible = false;
190        }
191    }
192
193    public void Takaisin(double nopeus)
194    {
195        if (Height > koko.Y) Nouse(nopeus);
196        SaadaKoko(Size * 1.01);
197        // peli.Remove(this);
198        // peli.Add(this, 1);
199        if (Image != kuvat.vartalo)
200        {
201            Image = kuvat.vartalo;
202            paa.Image = kuvat.paa;
203            Flip();
204            if (!miekka.IsVisible) miekankahva.IsVisible = true;
205        }
206    }
207
208    public void MiekkaTuppeen()
209    {
210        miekka.IsVisible = false;
211        miekankahva.IsVisible = true;
212        Osoita(-125);
213    }
214
215    public void MiekkaEsiin()
216    {
217        Osoita(-110);
218        miekka.IsVisible = true;
219        miekankahva.IsVisible = false;
220    }
221
222    public void Pyorita()
223    {
224        miekka.ApplyTorque(100000);
225    }
226
227    public void MiekkaSwap()
228    {
229        if (miekka.IsVisible) MiekkaTuppeen(); else MiekkaEsiin();
230    }
231
232    public void KyykyynYlos(double nopeus)
233    {
234        if (Height < koko.Y * 0.6) Nouse(nopeus); else Polvistu(nopeus);
235    }
236
237    public void Osoita(double kulma)
238    {
239        miekka.StopAngular();
240        Kasi.Tavoite = Angle.FromDegrees(kulma);
241    }
242
243    public void KaannaPaa(double kulma)
244    {
245        paa.Tavoite = Angle.FromDegrees(kulma);
246    }
247
248    public void AvaaSuu()
249    {
250        if (paa.Image == kuvat.paa) paa.Image = kuvat.suuAuki;
251    }
252
253    public void SuljeSuu()
254    {
255        if (paa.Image == kuvat.suuAuki) paa.Image = kuvat.paa;
256    }
257
258    public void Suu(double kulma)
259    {
260        if (kulma <= 20) SuljeSuu(); else AvaaSuu();
261    }
262
263    public void Liiku(double speed)
264    {
265        Walk(speed);
266    }
267}
268
269
Note: See TracBrowser for help on using the repository browser.