source: 2015/koodauskerho/sieerinn/Autopeli/Autopeli/Autopeli/Autopeli.cs @ 7156

Revision 7156, 2.8 KB checked in by sieerinn, 3 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 Auto : PhysicsObject
10{
11    public double Drift { get; set; }
12
13    public Auto(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        Drift = 0.2f;
17    }
18}
19
20public class Autopeli : PhysicsGame
21{
22    public override void Begin()
23    {
24        Vector[] reittiPisteet = new Vector[]
25        {
26            new Vector( -555.0, -324.0 ),
27            new Vector(  -252.0, 231.0 ),
28            new Vector(  301.0,  514.0 ),
29            new Vector(  200, -100)
30        };
31
32        Auto auto = LuoAuto();
33        Add(auto);
34
35        Keyboard.Listen(Key.Up, ButtonState.Down, Kiihdyta, null, auto, 200.0);
36        Keyboard.Listen(Key.Down, ButtonState.Down, Kiihdyta, null, auto, -200.0);
37        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanny, null, auto, 5000.0);
38        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanny, null, auto, -5000.0);
39
40        LuoRata(reittiPisteet);
41
42        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
43        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
44    }
45
46    Auto LuoAuto()
47    {
48        Auto auto = new Auto(50, 30);
49        auto.AngularDamping = 0.9;
50
51        Timer paivitysAjastin = new Timer();
52        paivitysAjastin.Interval = 0.01;
53        paivitysAjastin.Timeout += delegate
54        {
55            Vector eteen = Vector.FromAngle(auto.Angle);
56            Vector oikealle = Vector.FromAngle(auto.Angle + Angle.RightAngle);
57            Vector eteenNopeus = eteen * Vector.DotProduct(auto.Velocity, eteen);
58            Vector oikealleNopeus = oikealle * Vector.DotProduct(auto.Velocity, oikealle);
59            auto.Velocity = eteenNopeus + oikealleNopeus * auto.Drift;
60        };
61        paivitysAjastin.Start();
62
63        return auto;
64    }
65
66    void Kiihdyta(Auto auto, double nopeus)
67    {
68        auto.Push(auto.Angle.GetVector() * nopeus);
69    }
70
71    void Kaanny(Auto auto, double suunta)
72    {
73        bool peruuttaa = Vector.DotProduct(auto.Velocity, auto.Angle.GetVector()) < 0;
74        if (peruuttaa) suunta *= -1;
75        auto.ApplyTorque(suunta);
76    }
77
78    PhysicsObject LuoKaiteenPatka(double width, double height, Shape shape)
79    {
80        PhysicsObject patka = PhysicsObject.CreateStaticObject(width, height, shape);
81        patka.Color = Color.Brown;
82        Add(patka);
83        return patka;
84    }
85
86    void LuoRata(Vector[] reittiPisteet)
87    {
88        RoadMap tie = new RoadMap(reittiPisteet);
89        tie.DefaultWidth = 40.0;
90        tie.Insert();
91
92        RoadMap tie2 = new RoadMap(reittiPisteet);
93        tie2.DefaultWidth = 20.0;
94        tie2.CreateSegmentFunction = LuoKaiteenPatka;
95        tie2.Insert();
96    }
97}
Note: See TracBrowser for help on using the repository browser.