source: 2015/24/LeeviK/AS Bandit Experience/AS Bandit Experience/AS Bandit Experience/AS_Bandit_Experience.cs @ 5999

Revision 5999, 7.9 KB checked in by lesejuku, 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;
8
9public class AS_Bandit_Experience : PhysicsGame
10{
11    PhysicsObject bandit;
12    GameObject banditKadet;
13    Ase banditAse;
14    Vector aseenOsumaKohde;
15    bool piirraTracer = false;
16    bool ladataankoAsetta = false;
17    PhysicsObject Vodka;
18
19    const double HAHMOJEN_LEVEYS = 80;
20    const double HAHMOJEN_KORKEUS = 80;
21
22    public override void Begin()
23    {
24        Level.Background.Color = Color.BrownGreen;
25
26        //IsFullScreen = true;
27        Mouse.IsCursorVisible = true;
28        MediaPlayer.Play("UzickoKolo"); //CHEEKI BREEKI ATMOSFEARIC MUSIC
29        Camera.Zoom(3.0);
30
31        Layers[-1].RelativeTransition = new Vector(1.0, 1.0);
32
33        bandit = new PhysicsObject(HAHMOJEN_LEVEYS, HAHMOJEN_KORKEUS);
34        Image PelaajanKuva = LoadImage("banditNASSE");
35        bandit.Shape = Shape.FromImage(PelaajanKuva);
36        bandit.Mass = 8.0;
37        bandit.LinearDamping = 0.75;
38        bandit.Image = PelaajanKuva;
39        Add(bandit);
40
41        banditKadet = new GameObject(HAHMOJEN_LEVEYS, HAHMOJEN_KORKEUS);
42        banditKadet.Shape = Shape.Circle;
43        Image KadetKuva = LoadImage("banditAKS");
44        banditKadet.Image = KadetKuva;
45        Add(banditKadet, -1);
46
47
48        banditAse = new Ase(HAHMOJEN_LEVEYS, HAHMOJEN_KORKEUS, 30, int.MaxValue, 3.0); //koko, lipaskoko, reserviluodit, latausnopeus
49        banditAse.Damage = 26;
50        banditAse.Spread = Angle.FromDegrees(5);
51        banditAse.FireRate = 11.6; //metriä sekunnissa
52        banditAse.Power.Value = 720; //ensimmäisen luodin lähtönopeus
53        banditAse.Power.DefaultValue = 720; //muiden luotien lähtönopeus
54        banditAse.MaxRange = 150 * HAHMOJEN_LEVEYS;
55        //SoundEffect AKSaani = LoadSoundEffect("CheekiBreeki");
56        //banditAse.AttackSound = AKSaani; //väliaikainen
57        banditAse.X = -22.0;
58        banditAse.Y = -6.5;
59        banditAse.Image = null;
60        banditAse.IsVisible = false;
61        bandit.Add(banditAse);
62
63        PhysicsObject Vodka = new PhysicsObject(2.5, 9);
64        Vodka.Shape = Shape.Circle;
65        Vodka.X = 100.0;
66        Vodka.Y = 20.0;
67        Image vodkaKuva = LoadImage("vodka");
68        Vodka.Image = vodkaKuva;
69        Add(Vodka);
70
71        AddCollisionHandler(bandit, Vodka, ViinaRalli);
72        //Camera.Follow(bandit);
73
74        Timer ajastin = new Timer();
75        ajastin.Interval = 4.0;
76        ajastin.Timeout += SpawnLoner;
77        ajastin.Start();
78
79        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
80        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaBandit, null, new Vector(-1000, 0), bandit);
81        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaBandit, null, new Vector(1000, 0), bandit);
82        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaBandit, null, new Vector(0, 1000), bandit);
83        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaBandit, null, new Vector(0, -1000), bandit);
84        Keyboard.Listen(Key.Space, ButtonState.Pressed, TuhoaBandit,null); //Tuhoaa Pelaajan
85        Keyboard.Listen(Key.R, ButtonState.Pressed, LataaAse, null, banditAse);
86        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", banditAse);
87        Mouse.ListenMovement(0.0, Tahtaa, "Tähtää aseella", bandit);
88
89        LuoLoner(new Vector(100.0, 0.0));
90    }
91
92    protected override void Update(Time time)
93    {
94        banditKadet.Position = bandit.Position;
95        banditKadet.Angle = bandit.Angle;
96        base.Update(time);
97    }
98
99    protected override void Paint(Canvas canvas)
100    {
101        if (piirraTracer)
102        {
103            canvas.BrushColor = Color.Orange;
104            canvas.DrawLine(banditAse.AbsolutePosition + Vector.FromLengthAndAngle(55, banditAse.AbsoluteAngle), aseenOsumaKohde);
105            piirraTracer = false;
106        }
107        base.Paint(canvas);
108    }
109
110    void LiikutaBandit(Vector vektori, PhysicsObject bandit)
111    {
112        vektori *= 10;
113        bandit.Push(vektori);
114
115    }
116
117    void AmmuAseella(Ase ase)
118    {
119        if (ladataankoAsetta) return;
120
121        PhysicsObject ammus = ase.Shoot();
122        if (ammus == null) return;
123        ammus.Destroy();
124
125        //if (ammus != null)
126        //{
127        //    ammus.Size = new Vector(3.5, 1);
128        //    AddCollisionHandler(ammus, AmmusOsuu);
129        //}
130
131        Angle tamankertainenHajoama = RandomGen.NextAngle(-ase.Spread, ase.Spread);
132
133        PhysicsObject osumanKohde = ShootHitscan(ase, bandit, tamankertainenHajoama);
134        if (osumanKohde != null)
135        {
136            AmmusOsuu(osumanKohde);
137            aseenOsumaKohde = osumanKohde.AbsolutePosition;
138            piirraTracer = true;
139        }
140        else
141        {
142            aseenOsumaKohde = ase.Position + Vector.FromLengthAndAngle(ase.MaxRange, ase.AbsoluteAngle + tamankertainenHajoama);
143            piirraTracer = true;
144        }
145    }
146
147    /// <summary>
148    /// Ammutaan aseen suuntaan raycast aseen kantaman päähän.
149    /// Palauttaa asetta lähimmän PhysicsObjektin, johon säde osuu.
150    /// </summary>
151    /// <param name="a"></param>
152    /// <returns></returns>
153    PhysicsObject ShootHitscan(Ase a, GameObject owner, Angle poikkeama)
154    {
155        Vector farTarget = Vector.FromLengthAndAngle(a.MaxRange, a.AbsoluteAngle + poikkeama);
156
157        List<GameObject> potTargets = GetObjects(x => x is PhysicsObject && x != owner);
158
159        double closestDistance = double.MaxValue;
160        int closestIndex = -1;
161
162        for (int i = 0; i < potTargets.Count; i++)
163        {
164            if (potTargets[i].IsBlocking(a.AbsolutePosition, farTarget))
165            {
166                double currentDistance = Vector.Distance(a.AbsolutePosition, potTargets[i].Position);
167
168                if (currentDistance < closestDistance)
169                {
170                    closestDistance = currentDistance;
171                    closestIndex = i;
172                }
173            }
174        }
175
176        if (closestIndex != -1)
177            return (PhysicsObject)potTargets[closestIndex];
178        return null;
179    }
180
181    void AmmusOsuu(PhysicsObject kohde)
182    {
183        Loner k = kohde as Loner;
184        if (k != null)
185        {
186            k.Damagea(banditAse.Damage);
187        }
188    }
189
190    void LataaAse(Ase ladattavaAse)
191    {
192        if (ladataankoAsetta) return;
193        ladataankoAsetta = true;
194
195        Timer.SingleShot(ladattavaAse.ReloadTime, delegate
196        {
197            ladattavaAse.Reload();
198            ladataankoAsetta = false;
199        });
200    }
201
202    void Tahtaa(AnalogState hiirenliike, PhysicsObject bandit)
203    {
204        Vector suunta = (Mouse.PositionOnWorld - bandit.AbsolutePosition).Normalize();
205        bandit.Angle = suunta.Angle;
206    }
207
208    Loner LuoLoner(Vector paikka)
209    {
210        Loner loner = new Loner(HAHMOJEN_LEVEYS, HAHMOJEN_KORKEUS, 100.0, bandit);
211        loner.Position = paikka;
212        Image VihollisenKuva = LoadImage("lonerNASSE");
213        loner.Image = VihollisenKuva;
214        loner.Shape = Shape.FromImage(VihollisenKuva);
215        Add(loner);
216        return loner;
217
218    }
219    void LuoVodka()
220    {
221
222    }
223
224    void ViinaRalli(PhysicsObject tormaaja, PhysicsObject kohde)
225    {
226        kohde.Destroy();
227        MessageDisplay.Add("Vodka collected!");
228    }
229
230    void TuhoaBandit()
231    {
232        bandit.Destroy();
233        banditAse.Destroy();
234        banditKadet.Destroy();
235        LuoMrDeath();
236
237   
238
239    }
240
241    void LuoMrDeath()
242    {
243        ClearAll();
244        GameObject DEATH = new GameObject(LoadImage("death"));
245        Add(DEATH);
246        Level.Background.Color = Color.Black;
247        Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate {
248            ClearAll();
249            Begin();
250        }, null);
251    }
252
253    void SpawnLoner()
254    {
255        //ANUS BREAKS 4 DAMAGE
256    }
257}
Note: See TracBrowser for help on using the repository browser.