source: 2013/23/OsamaA/Magneta/Magneta/Magneta/Tukikohta.cs @ 4039

Revision 4039, 5.4 KB checked in by osomalab, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6
7namespace MagnetaNS
8{
9    public class Tukikohta : GameObject
10    {
11        public Timer Spawneri { get; set; }
12        private int tick;
13        private const int MAX_TICK = 20;
14        private Image tekstuuriKunPelaajan;
15        private Image tekstuuriKunVihun;
16        private Image VKtekstuuriKunPelaajan;
17        private Image VKtekstuuriKunVihun;
18        private bool _onkoPelaajan;
19        public Vector minionitTanne { get; set; }
20        public bool OnkoPelaajan
21        {
22            get { return this._onkoPelaajan; }
23            set
24            {
25                this._onkoPelaajan = value;
26                if (this._onkoPelaajan)
27                {
28                    this.Image = tekstuuriKunPelaajan;
29                    this.Valtauskentta.Image = VKtekstuuriKunPelaajan;
30                }
31                else
32                {
33                    this.Image = tekstuuriKunVihun;
34                    this.Valtauskentta.Image = VKtekstuuriKunVihun;
35                }
36            }
37        }
38        public double ValtausAika { get; set; }
39        public double SpawnausAika { get; set; }
40
41        public Seurattava Valtauskentta { get; set; }
42
43        private Action tapahtuuSpawnatessa;
44        public Action TapahtuuSpawnatessa
45        {
46            get { return this.tapahtuuSpawnatessa; }
47            set
48            {
49                Spawneri.Stop();
50                Spawneri = new Timer();
51                Game.DoNextUpdate(delegate
52                {
53                    Spawneri.Interval = this.SpawnausAika;
54                    Spawneri.Timeout += value;
55                    Spawneri.Start();
56                });
57            }
58        }
59
60        public Tukikohta(
61            double x, double y, double spawnausAika, 
62            bool onkoPelaajan, Action tapahtuuSpawnatessa,
63            Vector paikkaSuhteessaTukikohtaan, double valtausAika, 
64            Image tekstuuriKunPelaajan, 
65            Image tekstuuriKunVihun, 
66            Image VKtekstuuriKunPelaajan, 
67            Image VKtekstuuriKunVihun)
68            : this(
69            new Vector(x, y), spawnausAika, onkoPelaajan, tapahtuuSpawnatessa, 
70            paikkaSuhteessaTukikohtaan, valtausAika, tekstuuriKunPelaajan, tekstuuriKunVihun, 
71            VKtekstuuriKunPelaajan, VKtekstuuriKunVihun)
72        {
73        }
74
75        public Tukikohta(Vector tukikohta, double spawnausAika, bool onkoPelaajan, 
76            Action tapahtuuSpawnatessa, Vector paikkaSuhteessaTukikohtaan, 
77            double valtausAika, Image tekstuuriKunPelaajan, 
78            Image tekstuuriKunVihun, Image VKtekstuuriKunPelaajan, Image VKtekstuuriKunVihun) : base(30, 30)
79        {
80            this.Position = tukikohta;
81            this.tekstuuriKunPelaajan = tekstuuriKunPelaajan;
82            this.tekstuuriKunVihun = tekstuuriKunVihun;
83            this.VKtekstuuriKunPelaajan = VKtekstuuriKunPelaajan;
84            this.VKtekstuuriKunVihun = VKtekstuuriKunVihun;
85            Spawneri = new Timer();
86            this.tick = 0;
87            ValtausAika = valtausAika;
88            SpawnausAika = spawnausAika;
89            this.tapahtuuSpawnatessa = tapahtuuSpawnatessa;
90            Spawneri.Timeout += tapahtuuSpawnatessa;
91            Spawneri.Start();
92            luoValtauskentta(paikkaSuhteessaTukikohtaan);
93            this.OnkoPelaajan = onkoPelaajan;
94        }
95
96        public void luoValtauskentta(Vector v)
97        {
98            Valtauskentta = new Seurattava(50, 50, 1);
99            Valtauskentta.Position = this.Position + v;
100            Valtauskentta.IgnoresCollisionResponse = true;
101            Game.Add(Valtauskentta, -2);
102        }
103
104
105        /// <summary>
106        /// Antaa listan niistä kavereista jotka on tyyppiä T
107        /// ja on tukikohdans isällä. Kutsu tätä näin:
108        /// List<Seuraaja> ketaSisalla = tukikohta.KetaOnSisalla<Seuraaja>(GetObjects(x => true));
109        /// </summary>
110        /// <typeparam name="T">Mitä tyyppiä kaverin pitää olla että se otetaan listaan mukaan</typeparam>
111        /// <param name="oliot">Kaikki tutkittavat oliot</param>
112        /// <returns>Oliot jotka on tyyppiä T ja tukikohdan siällä</returns>
113        public List<T> KetaOnSisalla<T>(List<GameObject> oliot) where T : GameObject
114        {
115            return oliot.FindAll(x => this.Valtauskentta.IsInside(x.Position) && x is T) //typeof(T).IsAssignableFrom(x.GetType()))
116                .ConvertAll<T>(delegate(GameObject o) { return (T)o; });
117        }
118
119        public bool AloitaValtaus(Seurattava obj)
120        {
121
122            if ((obj.Tag.ToString() == "pelaaja" && ! this.OnkoPelaajan) ||
123                (obj.Tag.ToString() == "hirvio" && this.OnkoPelaajan))
124            {
125                tick++;
126                // Olio on ollut tarpeeksi kauan tukikohdan valtausalueella vallatakseen sen.
127                if (tick >= MAX_TICK)
128                {
129                    Spawneri.Stop();
130                    Spawneri = new Timer();
131                    Valtaa();
132                    return true;
133                }
134                return false;
135            }
136            tick = 0;
137            return false;
138        }
139
140        public void Valtaa()
141        {
142            if (this.OnkoPelaajan) this.OnkoPelaajan = false;
143            else this.OnkoPelaajan = true;
144            this.tick = 0;
145        }
146    }
147}
Note: See TracBrowser for help on using the repository browser.