source: 2014/30/MitjaK/Attack to Agora/Attack to Agora/Attack to Agora/Attack to Agora/Attack_to_Agora_mitja.cs @ 6434

Revision 6434, 6.8 KB checked in by anlakane, 4 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using Microsoft.Xna.Framework.Content;
9
10/// <summary>
11/// "Mitjan" (miskan) koodit tänne
12/// </summary>
13public partial class Attack_to_Agora : PhysicsGame
14{
15    Image jouniBoss = LoadImage("jouniboss1");
16    Animation jounibossArrive;
17
18    Image anttijussiboss = LoadImage("anttijussiboss");
19
20    Elava currentBoss;
21    AssaultRifle currentBossWeapon;
22    ProgressBar bossHealthBar;
23    const double JOUNI_DMG = 12.5;
24
25    bool paaseekoSeuraavaanKenttaan = true;
26
27    Animation asemiesLiikkuu;
28
29    // Attribuutit
30    void LuoAmpuvaVihollinen(Vector paikka, double leveys, double korkeus)
31    {
32        Elava vihollinen = new Elava(200, 200, 1000);
33        vihollinen.Animation = asemiesLiikkuu;
34        vihollinen.Animation.Start();
35       
36        vihollinen.Position = paikka;
37        vihollinen.Tag = "vihollinen";
38        GameObject varjo = Varjo(vihollinen);
39
40        vihollinen.Kuoli += delegate {
41            VihollinenKuoli(vihollinen);
42            varjo.Destroy();
43        };
44
45        if (taistelija == null || taistelija.IsAddedToGame == false)
46            Timer.SingleShot(1.0 / 60.0, delegate { LuoAmpumisAivot(vihollinen); });
47        else LuoAmpumisAivot(vihollinen);
48
49    }
50
51    void LuoTormaavaVihollinen(Vector paikka, double leveys, double korkeus)
52    {
53        Elava Tormaavavihollinen = new Elava(200, 200, 200);
54        Tormaavavihollinen.Image = tormaavavihollinen;
55        Tormaavavihollinen.Tag = "vihollinen";
56        Tormaavavihollinen.Position = paikka;
57        GameObject varjo = Varjo(Tormaavavihollinen);
58
59        Tormaavavihollinen.Kuoli += delegate {
60            VihollinenKuoli(Tormaavavihollinen);
61            varjo.Destroy();
62        };
63
64        if (taistelija == null || taistelija.IsAddedToGame == false)
65            Timer.SingleShot(1.0 / 60.0, delegate { LuoHyokkaysAivot(Tormaavavihollinen); });
66        else LuoHyokkaysAivot(Tormaavavihollinen);
67
68
69        Add(Tormaavavihollinen);
70    }
71
72    void LuoAmpumisAivot(Elava vihollinen)
73    {
74        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
75        seuraajanAivot.Speed = 250;
76        seuraajanAivot.Active = true;
77        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
78        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
79
80        vihollinen.Brain = seuraajanAivot;
81    }
82
83    void LuoHyokkaysAivot(Elava vihollinen)
84    {
85        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
86        seuraajanAivot.Speed = 250;
87
88        seuraajanAivot.Active = true;
89        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
90        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
91
92        vihollinen.Brain = seuraajanAivot;
93    }
94
95
96    /// <summary>
97    /// Vihollinen kuoli, 'nuff said.
98    /// </summary>
99    /// <param name="vihollinen"></param>
100    void VihollinenKuoli(Elava vihollinen)
101    {
102        vihollinen.Destroy();
103    }
104
105    void LuoJouniBoss(Vector luomisPaikka, double pysahtymisX)
106    {
107        controlsActive = false;
108
109        Elava jouni = new Elava(jouniBoss, 5.0); // 10000
110        jouni.Kuoli += JouniDefeated;
111        jouni.Position = luomisPaikka;
112        jouni.Shape = Shape.FromImage(jouniBoss);
113        jouni.Tag = "jouni";
114        jouni.CollisionIgnoreGroup = 1;
115        jouni.IgnoresGravity = true;
116        jouni.IgnoresCollisionWith(taistelija);
117        Add(jouni);
118
119        GameObject varjo = Varjo(jouni);
120        jouni.Kuoli += delegate { varjo.Destroy(); };
121
122        currentBoss = jouni;
123        paaseekoSeuraavaanKenttaan = false;
124
125        jouni.NeedsUpdateCall = true;
126        jouni.IsUpdated = true;
127        jouni.Updated += delegate(PhysicsObject j)
128        {
129            Elava jP = j as Elava;
130
131            if (jP.X > pysahtymisX)
132            {
133                ActivateJouni(jP);
134                jouni.IsUpdated = false;
135                jouni.NeedsUpdateCall = false;
136            }
137            else jP.Velocity = new Vector(100.0, 0.0);
138        };
139    }
140
141    void ActivateJouni(Elava jouni)
142    {
143        controlsActive = true;
144
145        jouni.Animation = jounibossArrive;
146        jouni.Animation.Start(1);
147        jouni.Animation.FPS = 0.5;
148        jouni.Animation.StopOnLastFrame = true;
149
150        jouni.MakeStatic();
151        jouni.Stop();
152
153        AssaultRifle jouninAse = new AssaultRifle(20, 10);
154        jouninAse.IsVisible = false;
155        jouninAse.InfiniteAmmo = true;
156        jouninAse.Power.Value = 200.0;
157        jouninAse.Power.DefaultValue = 200.0;
158        jouninAse.Tag = "jouninase";
159        Add(jouninAse);
160        jouninAse.Position = jouni.Position + new Vector(jouni.Width / 3, -25);
161        currentBossWeapon = jouninAse;
162
163        Timer ampumisAjastin = new Timer();
164        ampumisAjastin.Interval = 0.75;
165        ampumisAjastin.Timeout += delegate
166        {
167            if (jouninAse == null)
168                return;
169            jouninAse.AbsoluteAngle = (taistelija.Position - jouninAse.AbsolutePosition).Angle;
170
171            PhysicsObject ammus = jouninAse.Shoot();
172
173            if (ammus == null)
174                return;
175
176            ammus.IgnoresGravity = true;
177            ammus.IsVisible = false;
178            ammus.IsUpdated = true;
179            ammus.NeedsUpdateCall = true;
180            ammus.Updated += delegate(PhysicsObject a) { DrawTracers(a, Color.Red, 0.3, 2); };
181
182            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject p) {
183                if ((string)p.Tag == "jouni" || (string)p.Tag == "trigger") return;
184
185                a.Destroy();
186
187                // p.IsVisible = true; // collisionboxit näkyviin?
188                Elava e = p as Elava;
189
190                if (e == null) return;
191                e.Damagea(JOUNI_DMG);
192            });
193        };
194
195        ampumisAjastin.Start();
196
197        jouni.Kuoli += ampumisAjastin.Stop;
198    }
199
200    void JouniDefeated()
201    {
202        currentBoss.Destroy();
203        currentBoss = null;
204        jounihaviaa.Play();
205        if (currentBossWeapon != null)
206            currentBossWeapon.Destroy();
207        currentBossWeapon = null;
208
209        Timer.SingleShot(jounihaviaa.Duration.Seconds, delegate 
210        {
211            voititjounin.Play();
212            Timer.SingleShot(voititjounin.Duration.Seconds, delegate
213            {
214                paaseekoSeuraavaanKenttaan = true;
215            });
216        });
217    }
218
219    void LuoAnttiJussi(Vector paikka, Double korkeus, Double leveys)
220    {
221        Elava anttiJussi = new Elava(42, 42, 100); //hp 10000?
222        anttiJussi.Image = anttijussiboss;
223        Add(anttiJussi);
224    }
225    // Aliohjelmat
226}
Note: See TracBrowser for help on using the repository browser.