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

Revision 6446, 9.3 KB checked in by misakana, 5 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    Image jouniHealthbarEmpty = LoadImage("jouniheathbarempty");
17    Image jouniHealthbarFull = LoadImage("jouniheathbarfull");
18    Animation jounibossArrive;
19
20    Image anttijussiboss = LoadImage("anttijussiboss");
21    Image ajHBarEmpty = LoadImage("ajheathbarempty");
22    Image ajHBarFull = LoadImage("ajheathbarfull");
23    Animation tuliAnimaatio;
24
25    Elava currentBoss;
26    AssaultRifle currentBossWeapon;
27    ProgressBar bossHealthBar;
28    const double JOUNI_DMG = 12.5;
29
30    bool paaseekoSeuraavaanKenttaan = true;
31
32    Animation asemiesLiikkuu;
33
34    // Attribuutit
35    void LuoAmpuvaVihollinen(Vector paikka, double leveys, double korkeus)
36    {
37        Elava vihollinen = new Elava(200, 200, 100);
38        vihollinen.Animation = asemiesLiikkuu;
39        vihollinen.Animation.Start();
40       
41        vihollinen.Position = paikka;
42        vihollinen.Tag = "vihollinen";
43        Add(vihollinen);
44        GameObject varjo = Varjo(vihollinen);
45
46        vihollinen.Kuoli += delegate {
47            VihollinenKuoli(vihollinen);
48            varjo.Destroy();
49        };
50
51        if (taistelija == null || taistelija.IsAddedToGame == false)
52            Timer.SingleShot(1.0 / 60.0, delegate { LuoAmpumisAivot(vihollinen); });
53        else LuoAmpumisAivot(vihollinen);
54
55    }
56
57    void LuoTormaavaVihollinen(Vector paikka, double leveys, double korkeus)
58    {
59        Elava Tormaavavihollinen = new Elava(200, 200, 200);
60        Tormaavavihollinen.Image = tormaavavihollinen;
61        Tormaavavihollinen.Tag = "vihollinen";
62        Tormaavavihollinen.Position = paikka;
63        GameObject varjo = Varjo(Tormaavavihollinen);
64
65        Tormaavavihollinen.Kuoli += delegate {
66            VihollinenKuoli(Tormaavavihollinen);
67            varjo.Destroy();
68        };
69
70        if (taistelija == null || taistelija.IsAddedToGame == false)
71            Timer.SingleShot(1.0 / 60.0, delegate { LuoHyokkaysAivot(Tormaavavihollinen); });
72        else LuoHyokkaysAivot(Tormaavavihollinen);
73
74
75        Add(Tormaavavihollinen);
76    }
77
78    void LuoAmpumisAivot(Elava vihollinen)
79    {
80        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
81        seuraajanAivot.Speed = 250;
82        seuraajanAivot.Active = true;
83        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
84        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
85
86        vihollinen.Brain = seuraajanAivot;
87    }
88
89    void LuoHyokkaysAivot(Elava vihollinen)
90    {
91        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
92        seuraajanAivot.Speed = 250;
93
94        seuraajanAivot.Active = true;
95        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
96        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
97
98        vihollinen.Brain = seuraajanAivot;
99    }
100
101
102    /// <summary>
103    /// Vihollinen kuoli, 'nuff said.
104    /// </summary>
105    /// <param name="vihollinen"></param>
106    void VihollinenKuoli(Elava vihollinen)
107    {
108        vihollinen.Destroy();
109    }
110
111    void LuoJouniBoss(Vector luomisPaikka, double pysahtymisX)
112    {
113        controlsActive = false;
114
115        Elava jouni = new Elava(jouniBoss, 10000); // 10000
116        jouni.Kuoli += JouniDefeated;
117        jouni.Position = luomisPaikka;
118        // jouni.Shape = Shape.FromImage(jouniBoss);
119        jouni.Tag = "jouni";
120        jouni.CollisionIgnoreGroup = 1;
121        jouni.IgnoresGravity = true;
122        jouni.IgnoresCollisionWith(taistelija);
123        Add(jouni);
124
125        GameObject varjo = Varjo(jouni);
126        jouni.Kuoli += delegate { varjo.Destroy(); };
127
128        currentBoss = jouni;
129        paaseekoSeuraavaanKenttaan = false;
130
131        bossHealthBar = new ProgressBar(jouniHealthbarEmpty.Width / 2, jouniHealthbarEmpty.Height / 2);
132        bossHealthBar.Position = new Vector(Screen.Right - bossHealthBar.Width / 2, Screen.Top - bossHealthBar.Height / 2);
133        bossHealthBar.BindTo(jouni.Elamat);
134        bossHealthBar.Image = jouniHealthbarEmpty;
135        bossHealthBar.BarImage = jouniHealthbarFull;
136        Add(bossHealthBar);
137
138        jouni.NeedsUpdateCall = true;
139        jouni.IsUpdated = true;
140        jouni.Updated += delegate(PhysicsObject j)
141        {
142            Elava jP = j as Elava;
143
144            if (jP.X > pysahtymisX)
145            {
146                ActivateJouni(jP);
147                jouni.IsUpdated = false;
148                jouni.NeedsUpdateCall = false;
149            }
150            else jP.Velocity = new Vector(100.0, 0.0);
151        };
152    }
153
154    void ActivateJouni(Elava jouni)
155    {
156        controlsActive = true;
157
158        jouni.Animation = jounibossArrive;
159        jouni.Animation.Start(1);
160        jouni.Animation.FPS = 0.5;
161        jouni.Animation.StopOnLastFrame = true;
162
163        jouni.MakeStatic();
164        jouni.Stop();
165
166        AssaultRifle jouninAse = new AssaultRifle(20, 10);
167        jouninAse.IsVisible = false;
168        jouninAse.InfiniteAmmo = true;
169        jouninAse.Power.Value = 200.0;
170        jouninAse.Power.DefaultValue = 200.0;
171        jouninAse.Tag = "jouninase";
172        Add(jouninAse);
173        jouninAse.Position = jouni.Position + new Vector(jouni.Width / 3, -25);
174        currentBossWeapon = jouninAse;
175
176        Timer ampumisAjastin = new Timer();
177        ampumisAjastin.Interval = 0.75;
178        ampumisAjastin.Timeout += delegate
179        {
180            if (jouninAse == null)
181                return;
182            jouninAse.AbsoluteAngle = (taistelija.Position - jouninAse.AbsolutePosition).Angle;
183
184            PhysicsObject ammus = jouninAse.Shoot();
185
186            if (ammus == null)
187                return;
188
189            ammus.IgnoresGravity = true;
190            ammus.IsVisible = false;
191            ammus.IsUpdated = true;
192            ammus.NeedsUpdateCall = true;
193            ammus.Updated += delegate(PhysicsObject a) { DrawTracers(a, Color.Red, 0.3, 2); };
194
195            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject p) {
196                if ((string)p.Tag == "jouni" || (string)p.Tag == "trigger") return;
197
198                a.Destroy();
199
200                // p.IsVisible = true; // collisionboxit näkyviin?
201                Elava e = p as Elava;
202
203                if (e == null) return;
204                e.Damagea(JOUNI_DMG);
205            });
206        };
207
208        ampumisAjastin.Start();
209
210        jouni.Kuoli += ampumisAjastin.Stop;
211    }
212
213    void JouniDefeated()
214    {
215        currentBoss.Destroy();
216        currentBoss = null;
217        jounihaviaa.Play();
218        if (currentBossWeapon != null)
219            currentBossWeapon.Destroy();
220        currentBossWeapon = null;
221
222        bossHealthBar.Destroy();
223
224        Timer.SingleShot(jounihaviaa.Duration.Seconds, delegate 
225        {
226            voititjounin.Play();
227            Timer.SingleShot(voititjounin.Duration.Seconds, delegate
228            {
229                paaseekoSeuraavaanKenttaan = true;
230            });
231        });
232    }
233
234    void LuoAnttiJussi(Vector paikka)
235    {
236        Elava anttiJussi = new Elava(anttijussiboss, 1000); //hp 10000?
237        anttiJussi.Kuoli += AJDefeated;
238        anttiJussi.Size *= 0.2;
239        anttiJussi.Position = paikka;
240        anttiJussi.Tag = "anttijussi";
241        Add(anttiJussi);
242
243        currentBoss = anttiJussi;
244
245        bossHealthBar = new ProgressBar(ajHBarEmpty.Width / 2, ajHBarEmpty.Height / 2);
246        bossHealthBar.Position = new Vector(Screen.Right - bossHealthBar.Width / 2 - 10, Screen.Top - bossHealthBar.Height / 2 - 10);
247        bossHealthBar.BindTo(anttiJussi.Elamat);
248        bossHealthBar.Image = ajHBarEmpty;
249        bossHealthBar.BarImage = ajHBarFull;
250        Add(bossHealthBar);
251
252        GameObject varjo = Varjo(anttiJussi);
253        anttiJussi.Kuoli += delegate { varjo.Destroy(); };
254
255
256        PhysicsObject tuli = new PhysicsObject(170, 70);
257        tuli.Tag = "tuli";
258        tuli.Color = Color.Red;
259
260        Timer fireT = new Timer();
261        fireT.Interval = 1.0 / 60.0;
262        fireT.Timeout += delegate
263        {
264
265        };
266        fireT.Start();
267
268        anttiJussi.Kuoli += delegate {
269            tuli.Destroy();
270            fireT.Stop(); 
271        };
272       
273    }
274
275    void AktivoiAJ()
276    {
277
278    }
279
280    void AJDefeated()
281    {
282        currentBoss.CanRotate = true;
283        currentBoss.IgnoresCollisionResponse = true;
284        currentBoss.AngularVelocity = 40.0;
285
286        jounihaviaa.Play();
287
288        PhysicsObject bBorder = Level.CreateBottomBorder();
289        bBorder.Tag = "bBorder";
290
291        AddCollisionHandler<PhysicsObject, PhysicsObject>(currentBoss, "bBorder", delegate {
292            Explosion rajahdys = new Explosion(1000);
293            rajahdys.Speed = 500.0;
294            rajahdys.Position = currentBoss.Position;
295            Add(rajahdys);
296            currentBoss.Destroy();
297
298            currentBoss = null;
299        });
300    }
301
302    // Aliohjelmat
303}
Note: See TracBrowser for help on using the repository browser.