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

Revision 6086, 4.0 KB checked in by sieerinn, 4 years ago (diff)
Line 
1using System;
2using System.Linq;
3using System.Collections.Generic;
4using System.Diagnostics;
5using System.Security.Cryptography;
6using Jypeli;
7using Jypeli.Assets;
8using Jypeli.Controls;
9using Jypeli.Widgets;
10
11
12public class MainMenu
13{
14    private Dungeon peli;
15
16    private Image ratasKuva = Game.LoadImage("ratas");
17    private Image palaKuva = Game.LoadImage("pala");
18
19    private GameObject pala; // Putoava palkki.
20    private GameObject ratas; // Palkin vieressä pyörivä ratas.
21
22    private const double Gravitaatio = -600.0;
23    private const double Kimmoisuus = -0.4;
24    private double palaNopeus = 0.0;
25
26    public PushButton[] Painikkeet { get; set; }
27
28    const double BarbaarinNopeus = 40.0;
29    private List<GameObject> barbaarit;
30
31    public MainMenu(Dungeon peli, params string[] menuNimet)
32    {
33        barbaarit = new List<GameObject>();
34        this.peli = peli;
35        peli.Camera.ZoomFactor = 1.5;
36        peli.Level.Background.CreateGradient(Color.DarkGray, Color.Black);
37        LuoOsat();
38
39        // Luodaan alkuvalikon painikkeet.
40        Painikkeet = new PushButton[menuNimet.Length];
41        for (var i = 0; i < menuNimet.Length; i++)
42        {
43            // TODO: painikkeista vois tehä hienommat.
44            Painikkeet[i] = new PushButton(menuNimet[i]);
45            Painikkeet[i].Right = peli.Camera.WorldToScreen(new Vector(pala.Left + pala.Width * 0.25, 0)).X;
46            peli.Add(Painikkeet[i]);
47        }
48
49        var barbaariAjastin = new Timer();
50        barbaariAjastin.Interval = 3.0;
51        barbaariAjastin.Timeout += delegate
52        {
53            LuoBarbaari();
54            barbaariAjastin.Interval = RandomGen.NextDouble(2.0, 5.0);
55        };
56        barbaariAjastin.Start();
57    }
58
59    private void LuoBarbaari()
60    {
61        var barbaari = new GameObject(64, 64);
62        barbaari.Right = peli.Camera.ScreenToWorld(new Vector(Game.Screen.Left, 0)).X;
63        barbaari.Bottom = peli.Camera.ScreenToWorld(new Vector(0, Game.Screen.Bottom)).Y + RandomGen.NextDouble(0, 32);
64        barbaari.Image = peli.vihuKuvat[0];
65        barbaari.Animation = new Animation(peli.vihuKuvat) { FPS = 10 };
66        barbaari.Animation.Start();
67        peli.Add(barbaari);
68        barbaarit.Add(barbaari);
69    }
70
71    void LuoOsat()
72    {
73        const int toistoja = 3;
74        pala = new GameObject(30, 200 * toistoja);
75        pala.Position = peli.Camera.ScreenToWorld(new Vector(-200, Game.Screen.Top));
76        pala.Image = palaKuva;
77        pala.TextureWrapSize = new Vector(1, toistoja);
78        peli.Add(pala);
79
80        ratas = new GameObject(130, 130);
81        ratas.Image = ratasKuva;
82        ratas.Position = pala.Position + new Vector(60, 0);
83        peli.Add(ratas);
84
85        pala.Bottom = Game.Screen.Top;
86    }
87
88    public void Update(Time time)
89    {
90        var dt = time.SinceLastUpdate.TotalSeconds;
91        palaNopeus += Gravitaatio * dt;
92        pala.Y += palaNopeus * dt;
93
94        // Menu hyppää takas jos se on loppumaisillaan.
95        if (pala.Top < Game.Screen.Top)
96        {
97            palaNopeus *= Kimmoisuus;
98            pala.Top = Game.Screen.Top;
99        }
100
101        // Päivitetään painikkeiden sijainti.
102        for (var i = 0; i < Painikkeet.Length; i++)
103        {
104            var korkeus = pala.Bottom + (Painikkeet.Length - 1 - i) * Painikkeet[i].Height;
105            Painikkeet[i].Bottom = peli.Camera.WorldToScreen(new Vector(0, korkeus)).Y;
106        }
107
108        // Päivitetään barbaareja.
109        foreach (var barbaari in barbaarit)
110        {
111            barbaari.X += BarbaarinNopeus * dt;
112            if (barbaari.Left > peli.Camera.ScreenToWorld(new Vector(Game.Screen.Right, 0)).X)
113                barbaari.Destroy();
114        }
115
116        // Poistetaan listalta tuhoutuneet barbaarit.
117        barbaarit.RemoveAll(b => b.IsDestroyed);
118
119        // Rattaan kulman säätö.
120        ratas.Angle = Angle.FromDegrees((ratas.Y - pala.Y) * 1.2 + 6.0);
121    }
122}
Note: See TracBrowser for help on using the repository browser.