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

Revision 6433, 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        Elava jouni = new Elava(jouniBoss, 5.0); // 10000
108        jouni.Kuoli += JouniDefeated;
109        jouni.Position = luomisPaikka;
110        jouni.Shape = Shape.FromImage(jouniBoss);
111        jouni.Tag = "jouni";
112        jouni.CollisionIgnoreGroup = 1;
113        jouni.IgnoresGravity = true;
114        jouni.IgnoresCollisionWith(taistelija);
115        Add(jouni);
116
117        GameObject varjo = Varjo(jouni);
118        jouni.Kuoli += delegate { varjo.Destroy(); };
119
120        currentBoss = jouni;
121        paaseekoSeuraavaanKenttaan = false;
122
123        jouni.NeedsUpdateCall = true;
124        jouni.IsUpdated = true;
125        jouni.Updated += delegate(PhysicsObject j)
126        {
127            Elava jP = j as Elava;
128
129            if (jP.X > pysahtymisX)
130            {
131                ActivateJouni(jP);
132                jouni.IsUpdated = false;
133                jouni.NeedsUpdateCall = false;
134            }
135            else jP.Velocity = new Vector(100.0, 0.0);
136        };
137    }
138
139    void ActivateJouni(Elava jouni)
140    {
141        jouni.Animation = jounibossArrive;
142        jouni.Animation.Start(1);
143        jouni.Animation.FPS = 0.5;
144        jouni.Animation.StopOnLastFrame = true;
145
146        jouni.MakeStatic();
147        jouni.Stop();
148
149        AssaultRifle jouninAse = new AssaultRifle(20, 10);
150        jouninAse.IsVisible = true;
151        jouninAse.InfiniteAmmo = true;
152        jouninAse.Power.Value = 200.0;
153        jouninAse.Power.DefaultValue = 200.0;
154        jouninAse.Tag = "jouninase";
155        Add(jouninAse);
156        jouninAse.Position = jouni.Position + new Vector(jouni.Width / 4, -25);
157        currentBossWeapon = jouninAse;
158
159        Timer ampumisAjastin = new Timer();
160        ampumisAjastin.Interval = 0.5;
161        ampumisAjastin.Timeout += delegate
162        {
163            if (jouninAse == null)
164                return;
165            jouninAse.AbsoluteAngle = (taistelija.Position - jouninAse.AbsolutePosition).Angle;
166
167            PhysicsObject ammus = jouninAse.Shoot();
168
169            if (ammus == null)
170                return;
171
172            ammus.IgnoresGravity = true;
173            ammus.IsVisible = false;
174            ammus.IsUpdated = true;
175            ammus.NeedsUpdateCall = true;
176            ammus.Updated += delegate(PhysicsObject a) { DrawTracers(a, Color.Red, 0.3, 2); };
177
178            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject p) {
179                if ((string)p.Tag == "jouni" || (string)p.Tag == "trigger") return;
180
181                a.Destroy();
182
183                // p.IsVisible = true; // collisionboxit näkyviin?
184                Elava e = p as Elava;
185
186                if (e == null) return;
187                e.Damagea(JOUNI_DMG);
188            });
189        };
190
191        ampumisAjastin.Start();
192
193        jouni.Kuoli += ampumisAjastin.Stop;
194    }
195
196    void JouniDefeated()
197    {
198        currentBoss.Destroy();
199        currentBoss = null;
200        jounihaviaa.Play();
201        if (currentBossWeapon != null)
202            currentBossWeapon.Destroy();
203        currentBossWeapon = null;
204
205        Timer.SingleShot(jounihaviaa.Duration.Seconds, delegate 
206        {
207            voititjounin.Play();
208            Timer.SingleShot(voititjounin.Duration.Seconds, delegate
209            {
210                paaseekoSeuraavaanKenttaan = true;
211            });
212        });
213    }
214
215    void LuoAnttiJussi(Vector paikka, Double korkeus, Double leveys)
216    {
217        Elava anttiJussi = new Elava(42, 42, 100); //hp 10000?
218        anttiJussi.Image = anttijussiboss;
219        Add(anttiJussi);
220    }
221    // Aliohjelmat
222}
Note: See TracBrowser for help on using the repository browser.