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

Revision 6088, 5.6 KB checked in by sieerinn, 5 years ago (diff)

Pimeyttä alkuvalikkoon.

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