source: 2013/30/MiskaK/MW2(My Warfare 2)/MW2(My Warfare 2)/MW2(My Warfare 2)/Escape.cs @ 4677

Revision 4677, 3.5 KB checked in by anlakane, 8 years ago (diff)

Korjattu kopteri. Tehty uutta Escape-pelimuotoa ja lisätty sille valikko. Lisätty deathmatchiin vaihtoehtoinen teema.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Widgets;
7
8/// <summary>
9/// Pelimuoto, jossa on tarkoituksena päästä kentän toiselle laidalle kopterin laskeutumispaikalle,
10/// tyhjentää laskeutumisalue zombeista ja puolustaa kopteria nousuun asti.
11/// </summary>
12public class Escape : Infinite
13{
14    /// <summary>
15    /// Tämänhetkinen peli.
16    /// </summary>
17    public static Escape Peli { get; set; }
18
19    /// <summary>
20    /// Mihin kopteri laskeutuu. Muokkaa muualta vain LuoKentta-kohdassa.
21    /// </summary>
22    public Vector LaskeutumisPaikka { get; set; }
23
24    public const double LASKEUTUMISEEN_VAADITTAVAN_VAPAAN_ALUEEN_HALKAISIJA = 250.0;
25
26    private List<Pelaaja> PelaajatPelissa { get; set; }
27
28    /// <summary>
29    /// Helikopterin puolustusaika maassa.
30    /// </summary>
31    private Timer PuolustusAjastin { get; set; }
32
33    private Timer OnkoLaskeutumisAlueTyhjaTarkistus { get; set; }
34
35    public DoubleMeter PuolustetutSekunnit { get; private set; }
36
37    public ProgressBar PuolustusAikaPalkki { get; private set; }
38
39    public Helikopteri Kopteri { get; set; }
40
41    public Escape(int respaustenMaara, double puolustettavaAika, List<Pelaaja> pelaajat)
42        : base(respaustenMaara)
43    {
44        //LaskeutumisPaikka = landingPosition;
45        PelaajatPelissa = pelaajat;
46
47        PuolustetutSekunnit = new DoubleMeter(0, 0, puolustettavaAika);
48
49        PuolustusAjastin = new Timer();
50        PuolustusAjastin.Interval = 1;
51        PuolustusAjastin.Timeout += delegate { PuolustetutSekunnit.Value++; };
52
53        PuolustusAikaPalkki = new ProgressBar(150, 10);
54        PuolustusAikaPalkki.Color = Color.Blue;
55        PuolustusAikaPalkki.BindTo(PuolustetutSekunnit);
56        PuolustusAikaPalkki.BorderColor = Color.White;
57        PuolustusAikaPalkki.Position = new Vector(LaskeutumisPaikka.X, LaskeutumisPaikka.Y + 150);
58
59        OnkoLaskeutumisAlueTyhjaTarkistus = new Timer();
60        OnkoLaskeutumisAlueTyhjaTarkistus.Interval = 1;
61        OnkoLaskeutumisAlueTyhjaTarkistus.Timeout += OnkoLaskeutumisAlueVapaa;
62        OnkoLaskeutumisAlueTyhjaTarkistus.Start();
63
64        Kopteri = new Helikopteri(233, 73, 50, false); // 211, 171
65        //Kopteri.Position =
66
67    }
68
69    /// <summary>
70    /// Nostetaan kopteri ilmaan, poistetaan pelaajat, lennetään pois ja voitetaan peli.
71    /// </summary>
72    void LastausValmis()
73    {
74        Kopteri.NouseIlmaan();
75    }
76
77    void OnkoLaskeutumisAlueVapaa()
78    {
79        foreach (Pelaaja p in PelaajatPelissa)
80            if (!OnkoLaskeutumisAlueenSisapuolella(p.Position)) return;
81
82        foreach (Vihollinen v in VihollisetKentalla)
83            if (OnkoLaskeutumisAlueenSisapuolella(v.Position)) return;
84
85        // Kopteri voi saapua
86
87    }
88
89    /// <summary>
90    /// Onko jokin piste laskeutumisalueen sisäpuolella.
91    /// </summary>
92    /// <param name="paikka">Tarkistettava piste.</param>
93    /// <returns>Onko sisäpuolella.</returns>
94    bool OnkoLaskeutumisAlueenSisapuolella(Vector paikka)
95    {
96        if (paikka.X < LaskeutumisPaikka.X - LASKEUTUMISEEN_VAADITTAVAN_VAPAAN_ALUEEN_HALKAISIJA / 2 || paikka.X > LaskeutumisPaikka.X + LASKEUTUMISEEN_VAADITTAVAN_VAPAAN_ALUEEN_HALKAISIJA / 2)
97            return false;
98        if (paikka.Y < LaskeutumisPaikka.Y - LASKEUTUMISEEN_VAADITTAVAN_VAPAAN_ALUEEN_HALKAISIJA / 2 || paikka.Y > LaskeutumisPaikka.Y + LASKEUTUMISEEN_VAADITTAVAN_VAPAAN_ALUEEN_HALKAISIJA / 2)
99            return false;
100        return true;
101    }
102}
Note: See TracBrowser for help on using the repository browser.