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

Revision 6428, 6.5 KB checked in by misakana, 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    const double JOUNI_DMG = 25;
23
24    bool paaseekoSeuraavaanKenttaan = true;
25
26    Animation asemiesLiikkuu;
27
28    // Attribuutit
29    void LuoAmpuvaVihollinen(Vector paikka, double leveys, double korkeus)
30    {
31        Elava vihollinen = new Elava(200, 200, 100);
32        vihollinen.Animation = asemiesLiikkuu;
33        vihollinen.Animation.Start();
34        vihollinen.Position = paikka;
35        vihollinen.Tag = "vihollinen";
36        GameObject varjo = Varjo(vihollinen);
37
38        vihollinen.Kuoli += delegate
39        {
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        Add(vihollinen);
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        {
61            VihollinenKuoli(Tormaavavihollinen);
62            varjo.Destroy();
63        };
64
65        if (taistelija == null || taistelija.IsAddedToGame == false)
66            Timer.SingleShot(1.0 / 60.0, delegate { LuoHyokkaysAivot(Tormaavavihollinen); });
67        else LuoHyokkaysAivot(Tormaavavihollinen);
68
69
70        Add(Tormaavavihollinen);
71    }
72
73    void LuoAmpumisAivot(Elava vihollinen)
74    {
75        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
76        seuraajanAivot.Speed = 500;
77        seuraajanAivot.Active = true;
78        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
79        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
80
81        vihollinen.Brain = seuraajanAivot;
82    }
83
84    void LuoHyokkaysAivot(Elava vihollinen)
85    {
86        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
87        seuraajanAivot.Speed = 500;
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, 0.0);
157        currentBossWeapon = jouninAse;
158
159        Timer ampumisAjastin = new Timer();
160        ampumisAjastin.Interval = 1.0;
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            {
180
181                if ((string)p.Tag == "jouni") return;
182
183                a.Destroy();
184
185                // p.IsVisible = true; // collisionboxit näkyviin?
186                Elava e = p as Elava;
187
188                if (e == null) return;
189                e.Damagea(JOUNI_DMG);
190            });
191        };
192
193        ampumisAjastin.Start();
194    }
195
196    void JouniDefeated()
197    {
198        currentBoss.Destroy();
199        currentBoss = null;
200        jounihaviaa.Play();
201        currentBossWeapon.Destroy();
202        currentBossWeapon = null;
203
204        Timer.SingleShot(2.0, delegate { LuoChromaCase(ItemType.Knife); });
205    }
206    void LuoAnttiJussi(Vector paikka, Double korkeus, Double leveys)
207    {
208        Elava anttiJussi = new Elava(42, 42, 100); //hp 10000?
209        anttiJussi.Image = anttijussiboss;
210        anttiJussi.FollowPlayer = true;
211        Add(anttiJussi);
212    }
213    // Aliohjelmat
214}
Note: See TracBrowser for help on using the repository browser.