source: 2014/30/MiskaK/The Reclaim/The Reclaim/The Reclaim/The Reclaim/Efektit.cs @ 5689

Revision 5649, 4.7 KB checked in by anlakane, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Effects;
7
8public static class Efektit
9{
10    public static List<GameObject> effectObjects = new List<GameObject>();
11
12    public static ExplosionSystem KipinaPartikkelit { get; private set; }
13
14    /// <summary>
15    /// Lisätään verta kentälle.
16    /// </summary>
17    /// <param name="position">Paikka.</param>
18    /// <param name="amount">Määrä.</param>
19    /// <param name="scale">Koko. 1.0 on normaali, suurempi kasvattaa ja pienempi pienentää.</param>
20    public static GameObject[] AddNormalBlood(Vector position, int amount, double scale)
21    {
22        GameObject[] bloodSplatters = new GameObject[amount];
23        for (int i = 0; i < amount; i++)
24        {
25            GameObject blood = new GameObject(RandomGen.SelectOne<Image>(Images.NormalBloodImages));
26            blood.Position = position += RandomGen.NextVector(0.0, 30.0);
27            blood.Angle = RandomGen.NextAngle();
28            blood.Size *= scale;
29            LisaaTehosteObjekti(blood);
30            The_Reclaim.Peli.Add(blood, -2);
31            bloodSplatters[i] = blood;
32        }
33        return bloodSplatters;
34    }
35
36    /// <summary>
37    /// Lisätään kuolemaefekti kentälle.
38    /// </summary>
39    /// <param name="position">Paikka.</param>
40    /// <param name="amount">Määrä.</param>
41    /// <param name="scale">Koko. 1.0 on normaali, suurempi kasvattaa ja pienempi pienentää.</param>
42    public static GameObject[] AddDeathSplatter(Vector position, int amount, double scale)
43    {
44        GameObject[] deathSplatters = new GameObject[amount];
45        for (int i = 0; i < amount; i++)
46        {
47            GameObject deathsplatter = new GameObject(RandomGen.SelectOne<Image>(Images.DeathSplatterBloodImages));
48            deathsplatter.Position = position += RandomGen.NextVector(0.0, 10.0);
49            deathsplatter.Size *= scale;
50            deathsplatter.Angle = RandomGen.NextAngle();
51            LisaaTehosteObjekti(deathsplatter);
52            The_Reclaim.Peli.Add(deathsplatter, -2);
53            deathSplatters[i] = deathsplatter;
54        }
55        return deathSplatters;
56    }
57
58    /// <summary>
59    /// Lisätään tietorakenteeseen uusi tehosteobjekti ja poistetaan
60    /// vanha, jos objekteja on liikaa.
61    /// </summary>
62    /// <param name="tehoste">Lisättävä objekti.</param>
63    public static void LisaaTehosteObjekti(GameObject tehoste)
64    {
65        effectObjects.Add(tehoste);
66        if (effectObjects.Count > GameConstants.MAX_NUMBER_OF_EFFECT_OBJECTS)
67        {
68            effectObjects[0].Destroy();
69            effectObjects.RemoveAt(0);
70        }
71    }
72
73    /// <summary>
74    /// Luo hylsyn ammuttaessa ja lisää sen hylsyt-taulukkoon.
75    /// </summary>
76    public static void Hylsy(Vector paikka, Angle aseenKulma, Image hylsynkuva)
77    {
78        PhysicsObject hylsy = new PhysicsObject(2, 5);
79        hylsy.Image = hylsynkuva;
80        hylsy.Position = paikka + Vector.FromLengthAndAngle(15, aseenKulma + Angle.FromDegrees(-90));
81        hylsy.LinearDamping = 0.93;
82        hylsy.Mass = 0.5;
83        hylsy.Angle = aseenKulma + Angle.FromDegrees(90);
84        hylsy.AngularVelocity = RandomGen.NextDouble(-20.0, 20.0);
85        hylsy.AngularDamping = 0.97;
86        The_Reclaim.Peli.Add(hylsy, -2);
87
88        hylsy.MaximumLifetime = TimeSpan.FromSeconds(1.5);
89        hylsy.Destroying += delegate
90        {
91            GameObject fakeHylsy = new GameObject(hylsy.Width, hylsy.Height); // samanlainen GameObject-hylsy samaan paikkaan lagin vähentämiseksi
92            fakeHylsy.Image = hylsynkuva;
93            fakeHylsy.Position = hylsy.Position;
94            fakeHylsy.Angle = hylsy.Angle;
95            The_Reclaim.Peli.Add(fakeHylsy, -2);
96            LisaaTehosteObjekti(fakeHylsy);
97        };
98
99        hylsy.Hit(Vector.FromLengthAndAngle(RandomGen.NextInt(150, 300), aseenKulma + Angle.FromDegrees(RandomGen.NextDouble(-95, -85))));
100        //AddCollisionHandler(hylsy, HylsyOsuu);
101        //Timer.SingleShot(0.5, delegate { hylsynPutoamisAani.Play(0.7, 0.0, 0.0); });
102    }
103
104    public static void InitializeParticles()
105    {
106        KipinaPartikkelit = new ExplosionSystem(Images.Spark, GameConstants.MAX_NUMBER_OF_PARTICLES);
107        KipinaPartikkelit.MinScale = 1;
108        KipinaPartikkelit.MaxScale = 2;
109        KipinaPartikkelit.MaxLifetime = 0.5;
110        KipinaPartikkelit.MinLifetime = 0.2;
111        KipinaPartikkelit.MaxVelocity = 0.3;
112        The_Reclaim.Peli.Add(KipinaPartikkelit);
113    }
114
115    public static void AddEffect(ExplosionSystem es, Vector paikka, int maara)
116    {
117        if (es != null && es.IsAddedToGame)
118            es.AddEffect(paikka, maara);
119    }
120}
Note: See TracBrowser for help on using the repository browser.