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

Revision 7171, 2.5 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 Auto : Automobile
10{
11    public double Drift { get; set; }
12
13    public Auto(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        IsUpdated = true;
17        Acceleration = 200;
18        BrakeDeceleration = 600;
19        Maneuverability = Angle.FromDegrees(200);
20        AngularDamping = 0.9;
21        Drift = 0.9;
22    }
23
24    public override void Update(Time time)
25    {
26        Vector eteen = Vector.FromAngle(Angle);
27        Vector oikealle = eteen.RightNormal;
28        Vector eteenNopeus = eteen * Vector.DotProduct(Velocity, eteen);
29        Vector oikealleNopeus = oikealle * Vector.DotProduct(Velocity, oikealle);
30        Velocity = eteenNopeus + oikealleNopeus * Drift;
31        base.Update(time);
32    }
33}
34
35public class Autopeli : PhysicsGame
36{
37    public override void Begin()
38    {
39        Vector[] reittiPisteet = new Vector[]
40        {
41            new Vector( -555.0, -324.0 ),
42            new Vector(  -252.0, 231.0 ),
43            new Vector(  301.0,  514.0 ),
44            new Vector(  200, -100)
45        };
46
47        Auto auto = new Auto(50, 30);
48        Add(auto);
49
50        Keyboard.Listen(Key.Up, ButtonState.Down, auto.Accelerate, null);
51        Keyboard.Listen(Key.Down, ButtonState.Down, auto.Reverse, null);
52        Keyboard.Listen(Key.Left, ButtonState.Down, () => auto.Turn(auto.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
53        Keyboard.Listen(Key.Right, ButtonState.Down, () => auto.Turn(-auto.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
54
55        LuoRata(reittiPisteet);
56
57        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
58        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
59    }
60
61    PhysicsObject LuoKaiteenPatka(double width, double height, Shape shape)
62    {
63        PhysicsObject patka = PhysicsObject.CreateStaticObject(width, height, shape);
64        patka.Color = Color.Brown;
65        Add(patka);
66        return patka;
67    }
68
69    void LuoRata(Vector[] reittiPisteet)
70    {
71        RoadMap tie = new RoadMap(reittiPisteet);
72        tie.DefaultWidth = 40.0;
73        tie.Insert();
74
75        RoadMap tie2 = new RoadMap(reittiPisteet);
76        tie2.DefaultWidth = 20.0;
77        tie2.CreateSegmentFunction = LuoKaiteenPatka;
78        tie2.Insert();
79    }
80}
Note: See TracBrowser for help on using the repository browser.