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

Revision 6430, 6.4 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    Animation jounibossArrive;
17
18    Image anttijussiboss = LoadImage("anttijussiboss");
19
20    Elava currentBoss;
21    AssaultRifle currentBossWeapon;
22    ProgressBar bossHealthBar;
23    const double JOUNI_DMG = 25;
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, 100);
33        vihollinen.Animation = asemiesLiikkuu;
34        vihollinen.Animation.Start();
35        vihollinen.Position = paikka;
36        vihollinen.Tag = "vihollinen";
37        GameObject varjo = Varjo(vihollinen);
38
39        vihollinen.Kuoli += delegate {
40            VihollinenKuoli(vihollinen);
41            varjo.Destroy();
42        };
43
44        if (taistelija == null || taistelija.IsAddedToGame == false)
45            Timer.SingleShot(1.0 / 60.0, delegate { LuoAmpumisAivot(vihollinen); });
46        else LuoAmpumisAivot(vihollinen);
47
48    }
49
50    void LuoTormaavaVihollinen(Vector paikka, double leveys, double korkeus)
51    {
52        Elava Tormaavavihollinen = new Elava(200, 200, 200);
53        Tormaavavihollinen.Image = tormaavavihollinen;
54        Tormaavavihollinen.Tag = "vihollinen";
55        Tormaavavihollinen.Position = paikka;
56        GameObject varjo = Varjo(Tormaavavihollinen);
57
58        Tormaavavihollinen.Kuoli += delegate {
59            VihollinenKuoli(Tormaavavihollinen);
60            varjo.Destroy();
61        };
62
63        if (taistelija == null || taistelija.IsAddedToGame == false)
64            Timer.SingleShot(1.0 / 60.0, delegate { LuoHyokkaysAivot(Tormaavavihollinen); });
65        else LuoHyokkaysAivot(Tormaavavihollinen);
66
67
68        Add(Tormaavavihollinen);
69    }
70
71    void LuoAmpumisAivot(Elava vihollinen)
72    {
73        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
74        seuraajanAivot.Speed = 500;
75        seuraajanAivot.Active = true;
76        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
77        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
78
79        vihollinen.Brain = seuraajanAivot;
80    }
81
82    void LuoHyokkaysAivot(Elava vihollinen)
83    {
84        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
85        seuraajanAivot.Speed = 500;
86        seuraajanAivot.Active = true;
87        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
88        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
89
90        vihollinen.Brain = seuraajanAivot;
91    }
92
93
94    /// <summary>
95    /// Vihollinen kuoli, 'nuff said.
96    /// </summary>
97    /// <param name="vihollinen"></param>
98    void VihollinenKuoli(Elava vihollinen)
99    {
100        vihollinen.Destroy();
101    }
102
103    void LuoJouniBoss(Vector luomisPaikka, double pysahtymisX)
104    {
105        Elava jouni = new Elava(jouniBoss, 5.0); // 10000
106        jouni.Kuoli += JouniDefeated;
107        jouni.Position = luomisPaikka;
108        jouni.Shape = Shape.FromImage(jouniBoss);
109        jouni.Tag = "jouni";
110        jouni.CollisionIgnoreGroup = 1;
111        jouni.IgnoresGravity = true;
112        jouni.IgnoresCollisionWith(taistelija);
113        Add(jouni);
114
115        GameObject varjo = Varjo(jouni);
116        jouni.Kuoli += delegate { varjo.Destroy(); };
117
118        currentBoss = jouni;
119        paaseekoSeuraavaanKenttaan = false;
120
121        jouni.NeedsUpdateCall = true;
122        jouni.IsUpdated = true;
123        jouni.Updated += delegate(PhysicsObject j)
124        {
125            Elava jP = j as Elava;
126
127            if (jP.X > pysahtymisX)
128            {
129                ActivateJouni(jP);
130                jouni.IsUpdated = false;
131                jouni.NeedsUpdateCall = false;
132            }
133            else jP.Velocity = new Vector(100.0, 0.0);
134        };
135    }
136
137    void ActivateJouni(Elava jouni)
138    {
139        jouni.Animation = jounibossArrive;
140        jouni.Animation.Start(1);
141        jouni.Animation.FPS = 0.5;
142        jouni.Animation.StopOnLastFrame = true;
143
144        jouni.MakeStatic();
145        jouni.Stop();
146
147        AssaultRifle jouninAse = new AssaultRifle(20, 10);
148        jouninAse.IsVisible = true;
149        jouninAse.InfiniteAmmo = true;
150        jouninAse.Power.Value = 200.0;
151        jouninAse.Power.DefaultValue = 200.0;
152        jouninAse.Tag = "jouninase";
153        Add(jouninAse);
154        jouninAse.Position = jouni.Position + new Vector(jouni.Width / 4, 0.0);
155        currentBossWeapon = jouninAse;
156
157        Timer ampumisAjastin = new Timer();
158        ampumisAjastin.Interval = 1.0;
159        {
160            if (jouninAse == null)
161                return;
162            jouninAse.AbsoluteAngle = (taistelija.Position - jouninAse.AbsolutePosition).Angle;
163
164            PhysicsObject ammus = jouninAse.Shoot();
165
166            if (ammus == null)
167                return;
168
169            ammus.IgnoresGravity = true;
170            ammus.IsVisible = false;
171            ammus.IsUpdated = true;
172            ammus.NeedsUpdateCall = true;
173            ammus.Updated += delegate(PhysicsObject a) { DrawTracers(a, Color.Red, 0.3, 2); };
174
175            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject p) {
176                if ((string)p.Tag == "jouni") return;
177
178                a.Destroy();
179
180                // p.IsVisible = true; // collisionboxit näkyviin?
181                Elava e = p as Elava;
182
183                if (e == null) return;
184                e.Damagea(JOUNI_DMG);
185            });
186        };
187
188        ampumisAjastin.Start();
189    }
190
191    void JouniDefeated()
192    {
193        currentBoss.Destroy();
194        currentBoss = null;
195        jounihaviaa.Play();
196        if (currentBossWeapon != null)
197            currentBossWeapon.Destroy();
198        currentBossWeapon = null;
199    }
200
201    void LuoAnttiJussi(Vector paikka, Double korkeus, Double leveys)
202    {
203        Elava anttiJussi = new Elava(42, 42, 100); //hp 10000?
204        anttiJussi.Image = anttijussiboss;
205        Add(anttiJussi);
206    }
207    // Aliohjelmat
208}
Note: See TracBrowser for help on using the repository browser.