source: 2015/24/ohjaajat/Dungeon/Dungeon/Dungeon/MainMenu.cs @ 6084

Revision 6084, 2.6 KB checked in by sieerinn, 4 years ago (diff)

Alkuvalikko.

Line 
1using System;
2using System.Linq;
3using System.Collections.Generic;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Widgets;
8
9
10public class MainMenu
11{
12    private Dungeon peli;
13
14    private Image ratasKuva = Game.LoadImage("ratas");
15    private Image palaKuva = Game.LoadImage("pala");
16
17    private GameObject pala; // Putoava palkki.
18    private GameObject ratas; // Palkin vieressä pyörivä ratas.
19
20    private const double Gravitaatio = -600.0;
21    private const double Kimmoisuus = -0.4;
22    private double palaNopeus = 0.0;
23
24    public PushButton[] Painikkeet { get; set; }
25
26    public MainMenu(Dungeon peli, params string[] menuNimet)
27    {
28        this.peli = peli;
29        peli.Camera.ZoomFactor = 1.5;
30        peli.Level.Background.CreateGradient(Color.DarkGray, Color.Black);
31        LuoOsat();
32
33        // Luodaan alkuvalikon painikkeet.
34        Painikkeet = new PushButton[menuNimet.Length];
35        for (var i = 0; i < menuNimet.Length; i++)
36        {
37            // TODO: painikkeista vois tehä hienommat.
38            Painikkeet[i] = new PushButton(menuNimet[i]);
39            Painikkeet[i].Right = peli.Camera.WorldToScreen(new Vector(pala.Left + pala.Width * 0.25, 0)).X;
40            peli.Add(Painikkeet[i]);
41        }
42    }
43
44    void LuoOsat()
45    {
46        const int toistoja = 3;
47        pala = new GameObject(30, 200 * toistoja);
48        pala.Position = peli.Camera.ScreenToWorld(new Vector(-200, Game.Screen.Top));
49        pala.Image = palaKuva;
50        pala.TextureWrapSize = new Vector(1, toistoja);
51        peli.Add(pala);
52
53        ratas = new GameObject(130, 130);
54        ratas.Image = ratasKuva;
55        ratas.Position = pala.Position + new Vector(60, 0);
56        peli.Add(ratas);
57
58        pala.Bottom = Game.Screen.Top;
59    }
60
61    public void Update(Time time)
62    {
63        var dt = time.SinceLastUpdate.TotalSeconds;
64        palaNopeus += Gravitaatio * dt;
65        pala.Y += palaNopeus * dt;
66
67        // Menu hyppää takas jos se on loppumaisillaan.
68        if (pala.Top < Game.Screen.Top)
69        {
70            palaNopeus *= Kimmoisuus;
71            pala.Top = Game.Screen.Top;
72        }
73
74        // Päivitetään painikkeiden sijainti.
75        for (var i = 0; i < Painikkeet.Length; i++)
76        {
77            var korkeus = pala.Bottom + (Painikkeet.Length - 1 - i) * Painikkeet[i].Height;
78            Painikkeet[i].Bottom = peli.Camera.WorldToScreen(new Vector(0, korkeus)).Y;
79        }
80
81        // Rattaan kulman säätö.
82        ratas.Angle = Angle.FromDegrees((ratas.Y - pala.Y) * 1.2 + 6.0);
83    }
84}
Note: See TracBrowser for help on using the repository browser.