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

Revision 6092, 6.1 KB checked in by empaheik, 4 years ago (diff)

Taustamusiikki, maksullinen kaivaminen ja mainmenun otsikon 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        const int toistoja = 3;
81        pala = new GameObject(30, 200 * toistoja);
82        pala.Position = peli.Camera.ScreenToWorld(new Vector(-200, Game.Screen.Top));
83        pala.Image = palaKuva;
84        pala.TextureWrapSize = new Vector(1, toistoja);
85        peli.Add(pala, 2);
86
87        ratas = new GameObject(130, 130);
88        ratas.Image = ratasKuva;
89        ratas.Position = pala.Position + new Vector(60, 0);
90        peli.Add(ratas, 2);
91
92        pala.Bottom = Game.Screen.Top; // Pala putoaa ikkunan yläreunasta.
93
94        // Aukon pohjavalo.
95        pohjaAukko = new GameObject(200, 100);
96        pohjaAukko.Image = aukkoPohjaKuva;
97        pohjaAukko.Left = peli.Camera.ScreenToWorld(new Vector(Game.Screen.Left, 0)).X;
98        pohjaAukko.Bottom = peli.Camera.ScreenToWorld(new Vector(0, Game.Screen.Bottom)).Y;
99        peli.Add(pohjaAukko, -1);
100
101        // Päällä näkyvä osittain väpinäkyvä valo.
102        var aukkoValo = new GameObject(pohjaAukko.Width, pohjaAukko.Height);
103        aukkoValo.Image = aukkoKuva;
104        aukkoValo.Position = pohjaAukko.Position;
105        peli.Add(aukkoValo, 1);
106
107        double w = peli.Camera.ScreenToWorld(new Vector(Game.Screen.Width, 0)).X;
108        double h = peli.Camera.ScreenToWorld(new Vector(0, Game.Screen.Height)).Y;
109        var pimeys = new GameObject(w, h);
110        pimeys.Image = pimeysKuva;
111        peli.Add(pimeys, 1);
112
113        var otsikko = new GameObject(400, 100);
114        otsikko.Image = otsikkoKuva;
115        //otsikko.Right = peli.Camera.ScreenToWorld(new Vector(Game.Screen.Right, 0)).X ;    //Tämä heitti miulla otsikon puoliksi näkymättömiin.
116        otsikko.Left = peli.Camera.ScreenToWorld(new Vector(pala.Right, 0)).X;
117        otsikko.Top = peli.Camera.ScreenToWorld(new Vector(0, Game.Screen.Top - ratas.Height)).Y;
118        peli.Add(otsikko, 3);
119    }
120
121    public void Update(Time time)
122    {
123        var dt = time.SinceLastUpdate.TotalSeconds;
124        palaNopeus += Gravitaatio * dt;
125        pala.Y += palaNopeus * dt;
126
127        // Soitetaan ääni kun pala on liikkunut tarpeeksi.
128        palaSiirtyma += palaNopeus * dt;
129        if (Math.Abs(palaSiirtyma) > 20.0 && Math.Abs(palaNopeus) > 10.0)
130        {
131            ratasAani.Play();
132            palaSiirtyma = 0.0;
133        }
134
135        // Menu hyppää takas jos se on loppumaisillaan.
136        if (pala.Top < Game.Screen.Top)
137        {
138            palaNopeus *= Kimmoisuus;
139            pala.Top = Game.Screen.Top;
140
141            if (Math.Abs(palaNopeus) > 10.0)
142                ratasAani.Play();
143        }
144
145        // Päivitetään painikkeiden sijainti.
146        for (var i = 0; i < Painikkeet.Length; i++)
147        {
148            var korkeus = pala.Bottom + (Painikkeet.Length - 1 - i) * Painikkeet[i].Height;
149            Painikkeet[i].Bottom = peli.Camera.WorldToScreen(new Vector(0, korkeus)).Y;
150        }
151
152        // Päivitetään barbaareja.
153        foreach (var barbaari in barbaarit)
154        {
155            barbaari.X += BarbaarinNopeus * dt;
156            if (barbaari.Left > peli.Camera.ScreenToWorld(new Vector(Game.Screen.Right, 0)).X)
157                barbaari.Destroy();
158        }
159
160        // Poistetaan listalta tuhoutuneet barbaarit.
161        barbaarit.RemoveAll(b => b.IsDestroyed);
162
163        // Rattaan kulman säätö.
164        ratas.Angle = Angle.FromDegrees((ratas.Y - pala.Y) * 1.2 + 6.0);
165    }
166}
Note: See TracBrowser for help on using the repository browser.