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

Revision 6402, 5.8 KB checked in by mikrkana, 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("jouniboss");
16    Animation jounibossArrive;
17
18    Elava currentBoss;
19    bool bossDefeated = false;
20    const double JOUNI_DMG = 25;
21
22    bool paaseekoSeuraavaanKenttaan = true;
23
24    Animation asemiesLiikkuu;
25
26    // Attribuutit
27    void LuoAmpuvaVihollinen(Vector paikka, double leveys, double korkeus)
28    {
29        Elava vihollinen = new Elava(200, 200, 100);
30        vihollinen.Animation = asemiesLiikkuu;
31        vihollinen.Animation.Start();
32        vihollinen.Position = paikka;
33        vihollinen.Tag = "vihollinen";
34        GameObject varjo = Varjo(vihollinen);
35
36        vihollinen.Kuoli += delegate {
37            VihollinenKuoli(vihollinen);
38            varjo.Destroy();
39        };
40
41        if (taistelija == null || taistelija.IsAddedToGame == false)
42            Timer.SingleShot(1.0 / 60.0, delegate { LuoAmpumisAivot(vihollinen); });
43        else LuoAmpumisAivot(vihollinen);
44
45        Add( vihollinen );
46    }
47
48    void LuoTormaavaVihollinen(Vector paikka, double leveys, double korkeus)
49    { 
50        Elava Tormaavavihollinen = new Elava(200, 200, 200);
51        Tormaavavihollinen.Image = tormaavavihollinen;
52        Tormaavavihollinen.Tag = "vihollinen";
53        Tormaavavihollinen.Position = paikka;
54        GameObject varjo = Varjo(Tormaavavihollinen);
55
56        Tormaavavihollinen.Kuoli += delegate { 
57            VihollinenKuoli(Tormaavavihollinen);
58            varjo.Destroy();
59        };
60
61        if (taistelija == null || taistelija.IsAddedToGame == false)
62            Timer.SingleShot(1.0 / 60.0, delegate { LuoHyokkaysAivot(Tormaavavihollinen); });
63        else LuoHyokkaysAivot(Tormaavavihollinen);
64
65
66        Add(Tormaavavihollinen);
67    }
68
69    void LuoAmpumisAivot(Elava vihollinen)
70    {
71        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
72        seuraajanAivot.Speed = 500;
73        seuraajanAivot.Active = true;
74        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
75        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
76
77        vihollinen.Brain = seuraajanAivot;
78    }
79
80    void LuoHyokkaysAivot(Elava vihollinen)
81    {
82        FollowerBrain seuraajanAivot = new FollowerBrain(taistelija);
83        seuraajanAivot.Speed = 500;
84        seuraajanAivot.Active = true;
85        seuraajanAivot.DistanceClose = vihollinen.Width / 2 + taistelija.Width / 2 + 25;
86        seuraajanAivot.TargetClose += delegate { taistelija.Damagea(VIHOLLISEN_TORMAYSDMG); };
87
88        vihollinen.Brain = seuraajanAivot;
89    }
90
91
92    /// <summary>
93    /// Vihollinen kuoli, 'nuff said.
94    /// </summary>
95    /// <param name="vihollinen"></param>
96    void VihollinenKuoli(Elava vihollinen)
97    {
98        vihollinen.Destroy();
99    }
100
101    void LuoJouniBoss(Vector luomisPaikka, Vector pysahtymisPaikka)
102    {
103        Elava jouni = new Elava(jouniBoss, 100.0); // 10000
104        jouni.Kuoli += JouniDefeated;
105        jouni.Position = luomisPaikka;
106        jouni.Shape = Shape.FromImage(jouniBoss);
107        jouni.Tag = "jouni";
108        jouni.CollisionIgnoreGroup = 1;
109        jouni.Size *= 1.5;
110        Add(jouni);
111
112        GameObject varjo = Varjo(jouni);
113        jouni.Kuoli += delegate { varjo.Destroy(); };
114
115        currentBoss = jouni;
116        bossDefeated = false;
117        paaseekoSeuraavaanKenttaan = false;
118
119
120        PathFollowerBrain bBrain = new PathFollowerBrain(luomisPaikka, pysahtymisPaikka);
121        bBrain.Loop = false;
122        bBrain.Speed = 1500;
123        bBrain.WaypointRadius = jouni.Height / 2;
124        jouni.Brain = bBrain;
125
126        bBrain.ArrivedAtEnd += delegate { ActivateJouni(jouni, bBrain); };
127    }
128
129    void ActivateJouni(Elava jouni, PathFollowerBrain brain)
130    {
131        jouni.Animation = jounibossArrive;
132        jouni.Animation.Start(1);
133        jouni.Animation.FPS = 0.5;
134        jouni.Animation.StopOnLastFrame = true;
135
136        jouni.MakeStatic();
137
138        brain.Active = false;
139        jouni.Brain = null; // nothing personal
140
141        AssaultRifle jouninAse = new AssaultRifle(20, 10);
142        jouninAse.IsVisible = true;
143        jouninAse.InfiniteAmmo = true;
144        jouninAse.Power.Value = 200.0;
145        jouninAse.Power.DefaultValue = 200.0;
146        jouninAse.Tag = "jouninase";
147        Add(jouninAse);
148        jouninAse.Position = jouni.Position + new Vector(jouni.Width / 3, 0.0);
149
150        Timer ampumisAjastin = new Timer();
151        ampumisAjastin.Interval = 0.2;
152        ampumisAjastin.Timeout += delegate 
153        {
154            if (jouninAse == null)
155                return;
156            jouninAse.AbsoluteAngle = (taistelija.Position - jouninAse.AbsolutePosition).Angle;
157
158            PhysicsObject ammus = jouninAse.Shoot();
159
160            if (ammus == null)
161                return;
162
163            ammus.IgnoresGravity = true;
164
165            AddCollisionHandler(ammus, delegate(PhysicsObject a, PhysicsObject p) {
166
167                if ((string)p.Tag == "jouni") return;
168
169                a.Destroy();
170
171                // p.IsVisible = true; // collisionboxit näkyviin?
172                Elava e = p as Elava;
173
174                if (e == null) return;
175                e.Damagea(JOUNI_DMG);
176            });
177        };
178
179        // ampumisAjastin.Start();
180    }
181
182    void JouniDefeated()
183    {
184        paaseekoSeuraavaanKenttaan = true;
185        currentBoss.Destroy();
186        currentBoss = null;
187        jounihaviaa.Play();
188    }
189   
190    // Aliohjelmat
191} 
Note: See TracBrowser for help on using the repository browser.