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

Revision 6113, 6.0 KB checked in by sieerinn, 4 years ago (diff)

Kaikenlaista pientä säätöä.

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    private Image aukkoPohjaKuva = Game.LoadImage("aukko");
17    private Image aukkoKuva = Game.LoadImage("aukko2");
18    private Image otsikkoKuva = Game.LoadImage("title");
19    private Image pimeysKuva = Game.LoadImage("pimeys");
20
21    private SoundEffect ratasAani = Game.LoadSoundEffect("gear");
22
23    private GameObject pala; // Putoava palkki.
24    private GameObject ratas; // Palkin vieressä pyörivä ratas.
25    private GameObject pohjaAukko; // Aukko josta tulee ulos barbaareja.
26
27    private const double BarbaarinNopeus = 40.0;
28    private const double Gravitaatio = -600.0;
29    private const double Kimmoisuus = -0.4;
30    private double palaNopeus = 0.0;
31    private double palaSiirtyma; // Ääni soitetaan jos pala on siirtynyt tarpeeksi.
32
33    public PushButton[] Painikkeet { get; set; }
34
35    private List<GameObject> barbaarit;
36
37    public MainMenu(Dungeon peli, params string[] menuNimet)
38    {
39        barbaarit = new List<GameObject>();
40        this.peli = peli;
41        peli.Camera.ZoomFactor = 1.5;
42        peli.Level.Background.CreateGradient(Color.DarkGray, Color.Black);
43        LuoOsat();
44
45        // Luodaan alkuvalikon painikkeet.
46        Painikkeet = new PushButton[menuNimet.Length];
47        for (var i = 0; i < menuNimet.Length; i++)
48        {
49            // TODO: painikkeista vois tehä hienommat.
50            Painikkeet[i] = new PushButton(menuNimet[i]);
51            Painikkeet[i].Right = peli.Camera.WorldToScreen(new Vector(pala.Left + pala.Width * 0.25, 0)).X;
52            peli.Add(Painikkeet[i]);
53        }
54
55        var barbaariAjastin = new Timer();
56        barbaariAjastin.Interval = 3.0;
57        barbaariAjastin.Timeout += delegate
58        {
59            LuoBarbaari();
60            barbaariAjastin.Interval = RandomGen.NextDouble(2.0, 5.0);
61        };
62        barbaariAjastin.Start();
63    }
64
65    private void LuoBarbaari()
66    {
67        var barbaari = new GameObject(50, 80);
68        barbaari.Size *= 0.75;
69        barbaari.X = pohjaAukko.X - pohjaAukko.Width/3;
70        barbaari.Bottom = peli.Camera.ScreenToWorld(new Vector(0, Game.Screen.Bottom)).Y; // + RandomGen.NextDouble(0, 32);
71        barbaari.Image = peli.vihuKuvat[0];
72        barbaari.Animation = new Animation(RandomGen.SelectOne(peli.vihuKuvat, peli.kirvesVihuKuvat)) { FPS = 10 };
73        barbaari.Animation.Start();
74        peli.Add(barbaari);
75        barbaarit.Add(barbaari);
76    }
77
78    void LuoOsat()
79    {
80        double w = peli.Camera.ScreenToWorld(new Vector(Game.Screen.Width, 0)).X;
81        double h = peli.Camera.ScreenToWorld(new Vector(0, Game.Screen.Height)).Y;
82        double left = peli.Camera.ScreenToWorld(new Vector(-Game.Window.Width / 2.0, 0)).X;
83        double top = peli.Camera.ScreenToWorld(new Vector(0, Game.Window.Height / 2.0)).Y;
84        double bottom = peli.Camera.ScreenToWorld(new Vector(0, -Game.Window.Height / 2.0)).Y;
85
86        const int toistoja = 3;
87        pala = new GameObject(30, 200 * toistoja);
88        pala.Position = peli.Camera.ScreenToWorld(new Vector(-200, 0)) + new Vector(0, top);
89        pala.Image = palaKuva;
90        pala.TextureWrapSize = new Vector(1, toistoja);
91        peli.Add(pala, 2);
92
93        ratas = new GameObject(130, 130);
94        ratas.Image = ratasKuva;
95        ratas.Position = pala.Position + new Vector(60, 0);
96        peli.Add(ratas, 2);
97
98        pala.Bottom = top; // Pala putoaa ikkunan yläreunasta.
99
100        // Aukon pohjavalo.
101        pohjaAukko = new GameObject(200, 100);
102        pohjaAukko.Image = aukkoPohjaKuva;
103        pohjaAukko.Left = left;
104        pohjaAukko.Bottom = bottom;
105        peli.Add(pohjaAukko, -1);
106
107        // Päällä näkyvä osittain väpinäkyvä valo.
108        var aukkoValo = new GameObject(pohjaAukko.Width, pohjaAukko.Height);
109        aukkoValo.Image = aukkoKuva;
110        aukkoValo.Position = pohjaAukko.Position;
111        peli.Add(aukkoValo, 1);
112
113        var pimeys = new GameObject(w, h);
114        pimeys.Image = pimeysKuva;
115        peli.Add(pimeys, 1);
116
117        var otsikko = new GameObject(400, 100);
118        otsikko.Image = otsikkoKuva;
119        otsikko.Left = pala.Right;
120        otsikko.Top = top - ratas.Height;
121        peli.Add(otsikko, 3);
122    }
123
124    public void Update(Time time)
125    {
126        var dt = time.SinceLastUpdate.TotalSeconds;
127        palaNopeus += Gravitaatio * dt;
128        pala.Y += palaNopeus * dt;
129
130        // Soitetaan ääni kun pala on liikkunut tarpeeksi.
131        palaSiirtyma += palaNopeus * dt;
132        if (Math.Abs(palaSiirtyma) > 20.0 && Math.Abs(palaNopeus) > 10.0)
133        {
134            ratasAani.Play();
135            palaSiirtyma = 0.0;
136        }
137
138        // Menu hyppää takas jos se on loppumaisillaan.
139        if (pala.Top < Game.Screen.Top)
140        {
141            palaNopeus *= Kimmoisuus;
142            pala.Top = Game.Screen.Top;
143
144            if (Math.Abs(palaNopeus) > 10.0)
145                ratasAani.Play();
146        }
147
148        // Päivitetään painikkeiden sijainti.
149        for (var i = 0; i < Painikkeet.Length; i++)
150        {
151            var korkeus = pala.Bottom + (Painikkeet.Length - 1 - i) * Painikkeet[i].Height;
152            Painikkeet[i].Bottom = peli.Camera.WorldToScreen(new Vector(0, korkeus)).Y;
153        }
154
155        // Päivitetään barbaareja.
156        foreach (var barbaari in barbaarit)
157        {
158            barbaari.X += BarbaarinNopeus * dt;
159            if (barbaari.Left > peli.Camera.ScreenToWorld(new Vector(Game.Window.Width / 2.0, 0)).X)
160                barbaari.Destroy();
161        }
162
163        // Poistetaan listalta tuhoutuneet barbaarit.
164        barbaarit.RemoveAll(b => b.IsDestroyed);
165
166        // Rattaan kulman säätö.
167        ratas.Angle = Angle.FromDegrees((ratas.Y - pala.Y) * 1.2 + 6.0);
168    }
169}
Note: See TracBrowser for help on using the repository browser.