source: 2014/koodauskerho/38/PietuR/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 7071

Revision 7071, 5.3 KB checked in by sieerinn, 4 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
9class Pelaaja : PhysicsObject
10{
11    public double nopeus = 3000;
12
13    public bool liikeAnimaatio = true; // Saako kävelyanimaatioon koskea
14
15    public bool Juoksu = false; 
16
17    public Animation Walk;
18    public Animation Run;
19    public Animation Hit;
20
21    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
22    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
23
24    public Pelaaja(double leveys, double korkeus)
25        : base(leveys, korkeus)
26    {
27        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
28    }
29}
30
31public class FysiikkaPeli1 : PhysicsGame
32{
33    double Kavelynopeus = 3000;
34    double Juoksunopeus = 8000;
35
36    Image fighter = LoadImage("Fighter");
37
38    Animation FighterWalk;
39    Animation FighterRun;
40    Animation FighterHit;
41
42    Pelaaja Tyyppi1;
43    Pelaaja Tyyppi2;
44
45    public override void Begin()
46    {
47        FighterWalk = LoadAnimation("FighterWalk");
48        FighterRun = LoadAnimation("FighterRun");
49        FighterHit = LoadAnimation("FighterHit");
50
51        Tyyppi1 = LuoPelaaja(100, 0);
52        Tyyppi2 = LuoPelaaja(-100, 0);
53
54        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Up);
55        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Down);
56        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Left);
57        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi1, Direction.Right);
58
59        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, Juokse, "Liikuttaa pelaajaa1", Tyyppi1, Juoksunopeus, true);
60        Keyboard.Listen(Key.RightControl, ButtonState.Released, Juokse, "Liikuttaa pelaajaa1", Tyyppi1, Kavelynopeus, false);
61        Keyboard.Listen(Key.NumPad8, ButtonState.Pressed, Lyo, "Liikuttaa pelaajaa1", Tyyppi1);
62
63        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi2, Direction.Up);
64        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi2, Direction.Down);
65        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi2, Direction.Left);
66        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikuttaa pelaajaa1", Tyyppi2, Direction.Right);
67
68        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, Juokse, "Liikuttaa pelaajaa1", Tyyppi2, Juoksunopeus, true);
69        Keyboard.Listen(Key.LeftControl, ButtonState.Released, Juokse, "Liikuttaa pelaajaa1", Tyyppi2, Kavelynopeus, false);
70        Keyboard.Listen(Key.T, ButtonState.Pressed, Lyo, "Liikuttaa pelaajaa1", Tyyppi2);
71
72
73        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
74        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
75    }
76
77    Pelaaja LuoPelaaja(double X, double Y)
78    {
79        Pelaaja Tyyppi = new Pelaaja(30, 30);
80        Tyyppi.LinearDamping = 0.5;
81        Tyyppi.AngularDamping = 0.7;
82        Tyyppi.Position = new Vector(X, Y);
83        Tyyppi.Image = fighter;
84        Tyyppi.Shape = Shape.Circle;
85        Tyyppi.Tag = "Tyyppi";
86        Tyyppi.Walk = new Animation(FighterWalk);
87        Tyyppi.Run = new Animation(FighterRun);
88        Tyyppi.Hit = new Animation(FighterHit);
89        Tyyppi.Hit.Played += delegate
90        {
91            Tyyppi.liikeAnimaatio = true;
92        };
93        Add(Tyyppi, 3);
94
95        Timer ajastin = new Timer();
96        ajastin.Interval = 0.1;
97        ajastin.Timeout += () => AnimaationOhjaus(Tyyppi);
98        ajastin.Start();
99
100        return Tyyppi;
101    }
102
103    void Lyo(Pelaaja Tyyppi)
104    {
105        Tyyppi.Animation = Tyyppi.Hit;
106        Tyyppi.Animation.FPS = 10;
107        Tyyppi.Animation.Start();
108        Tyyppi.liikeAnimaatio = false;
109    }
110
111    void AnimaationOhjaus(Pelaaja Tyyppi)
112    {
113        if (Tyyppi.liikeAnimaatio)
114        {
115            if (Tyyppi.Animation != Tyyppi.Walk && Tyyppi.Animation != Tyyppi.Run)
116            {
117                LaitaKavelyAnimaatio(Tyyppi);
118            }
119
120            if (!Tyyppi.Animation.IsPlaying && Tyyppi.Velocity.Magnitude > 10)
121            {
122                Tyyppi.Animation.Start();
123            }
124
125            if (Tyyppi.Animation.IsPlaying && Tyyppi.Velocity.Magnitude < 10)
126            {
127                Tyyppi.Animation.Stop();
128            }
129        }
130    }
131
132    void Juokse(Pelaaja Tyyppi, double uusinopeus, bool juoksu)
133    {
134        Tyyppi.Juoksu = juoksu;
135        Tyyppi.nopeus = uusinopeus;
136        LaitaKavelyAnimaatio(Tyyppi);
137    }
138
139    void LaitaKavelyAnimaatio(Pelaaja Tyyppi)
140    { 
141        if (Tyyppi.liikeAnimaatio)
142        {
143            if (Tyyppi.Juoksu)
144            {
145                Tyyppi.Animation = Tyyppi.Run;
146                Tyyppi.Animation.FPS = 6;
147            }
148            else
149            {
150                Tyyppi.Animation = Tyyppi.Walk;
151                Tyyppi.Animation.FPS = 4;
152            }
153        }
154    }
155
156    void Liikuta(Pelaaja Tyyppi, Direction Suunta)
157    {
158        Tyyppi.Push(Suunta.GetVector() * Tyyppi.nopeus);
159        Tyyppi.Angle = Tyyppi.Velocity.Angle;
160    }
161}
Note: See TracBrowser for help on using the repository browser.