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

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