source: 2015/23/ohjaajat/ValasPeli/ValasPeli/ValasPeli/ValasPeli.cs @ 7033

Revision 7033, 20.7 KB checked in by sieerinn, 7 years ago (diff)

Pelin alkuun lisätty ohjainkuvat pelaajien päälle ja laitettu 3, 2, 1, GO tekstit näkyviin.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9/// <summary>
10/// Neljä hämmentynyttä, jalkansa katkaissutta sukeltajaa tutkii
11/// merenpohjaa ja törmää satunnaisiin taivasvalaisiin.
12/// Lopulta kolme tukehtuu tai vajoaa pohjaan.
13/// </summary>
14public class ValasPeli : PhysicsGame
15{
16    const double nopeus = 200;
17    const double hyppyNopeus = 750;
18    int pelaajiaLisatty = 0;
19
20    Image taysi = LoadImage("taysi");
21    Image tyhja = LoadImage("tyhja");
22    Image pohjaMoskaKuva = LoadImage("pohjamoska");
23    Image menuKuva = LoadImage("menu");
24    Image menuPainikeKuva = LoadImage("painike");
25    Image menuPainikeHoverKuva = LoadImage("painikeHover");
26    Image[] lonkerot = LoadImages("lonkeroo", "lonkeroo2");
27
28    SoundEffect valaanKuolinHuuto = LoadSoundEffect("simo");
29
30    IntMeter voittoMittari = new IntMeter(0);
31    bool won = false;
32
33    Diver[] pelaajat = new Diver[4];
34
35    Image tukehtunutKuva = LoadImage("tukehtunut");
36    Image kuollutValas = LoadImage("valaskuoli");
37    Image[] pelaajanKuvat = LoadImages("s0001", "s0002", "s0003", "s0004", "s0005", "s0006");
38    Image[] pelaajaTukehtunutKuvat = LoadImages("tukehtunut");
39    Image[] valasKuvat = LoadImages("valas0001", "valas0002", "valas0003", "valas0004", "valas0005", "valas0006", "valas0007");
40    Image[] kultaValasKuvat = LoadImages("kultavalas0001", "kultavalas0002", "kultavalas0003", "kultavalas0004", "kultavalas0005", "kultavalas0006", "kultavalas0007");
41    Image[] kuplanKuvat = LoadImages("kupla0001", "kupla0002", "kupla0003", "kupla0004", "kupla0005", "kupla0006", "kupla0007");
42    Image[] pieniKuplaKuvat = LoadImages("pkupla0001", "pkupla0002", "pkupla0003", "pkupla0004", "pkupla0005", "pkupla0006", "pkupla0007");
43    Image[] alkuKuvat = LoadImages("3", "2", "1", "go");
44
45    Image nuoliOhjainKuva = LoadImage("arrows");
46    Image wasdOhjainKuva = LoadImage("wasd");
47    Image pad1OhjainKuva = LoadImage("pad1");
48    Image pad2OhjainKuva = LoadImage("pad2");
49
50    Dictionary<Color, Image[]> pelaajaKuvaDict = new Dictionary<Color,Image[]>();
51    Dictionary<Color, Image[]> pelaajaTukehtunuDict = new Dictionary<Color, Image[]>();
52
53    Image[] LataaVaritettyKuva(Dictionary<Color, Image[]> dict, Image[] alkupKuvat, Color vari)
54    {
55        if (!dict.ContainsKey(vari))
56        {
57            dict.Add(vari, VaritaKuvat(alkupKuvat, vari));
58        }
59        return dict[vari];
60    }
61
62    public override void Begin()
63    {
64        Window.Width = (int)Level.Width;
65        Window.Height = (int)(Screen.Height * 0.9);
66        Alkuvalikko();
67        //AloitaPeli();
68    }
69
70    void Alkuvalikko()
71    {
72        Level.Background.CreateGradient(Color.Blue, Color.SkyBlue);
73
74        Timer kupla = new Timer();
75        kupla.Interval = 0.1;
76        kupla.Timeout += delegate
77        {
78            LisaaKerattava();
79            kupla.Interval = RandomGen.NextDouble(0.2, 1.0);
80        };
81        kupla.Start();
82
83        MultiSelectWindow alkuValikko = new MultiSelectWindow("Sukelluspeli", "Aloita peli", "Lopeta");
84        foreach(var button in alkuValikko.Buttons)
85        {
86            button.Image = menuPainikeKuva;
87            button.ImagePressed = menuPainikeHoverKuva;
88        }
89        alkuValikko.Image = menuKuva;
90        Add(alkuValikko);
91        alkuValikko.AddItemHandler(0, AloitaPeli);
92        alkuValikko.AddItemHandler(1, Exit);
93    }
94
95    /// <summary>
96    /// Aloittaa uuden pelin.
97    /// </summary>
98    void AloitaPeli()
99    {
100        ClearAll();
101
102        SmoothTextures = false;
103        IsFullScreen = false;
104
105        LuoKentta();
106        Camera.ZoomFactor = 1.0;
107
108        Label alkuLabel = new Label();
109        alkuLabel.Width = alkuKuvat[0].Width;
110        alkuLabel.Height = alkuKuvat[0].Height;
111        alkuLabel.Image = alkuKuvat[0];
112        Add(alkuLabel);
113
114        Timer alkuAjastin = new Timer();
115        alkuAjastin.Interval = 1.0;
116        alkuAjastin.Timeout += delegate
117        {
118            int index = (int) alkuAjastin.CurrentTime;
119            if (index < alkuKuvat.Length)
120            {
121                alkuLabel.Image = alkuKuvat[index];
122                alkuLabel.Width = alkuLabel.Image.Width;
123                alkuLabel.Height = alkuLabel.Image.Height;
124            }
125            else
126            {
127                alkuLabel.Destroy();
128                alkuAjastin.Stop();
129            }
130        };
131        alkuAjastin.Start();
132
133        // Painovoima tulee vasta hetken päästä, jotta valaita ehtii tulemaan.
134        Timer.SingleShot(5.0, delegate
135        {
136            Gravity = new Vector(0, -200);
137        });
138    }
139
140    /// <summary>
141    /// Luo kentän ja pelaajat.
142    /// </summary>
143    void LuoKentta()
144    {
145        pelaajiaLisatty = 0;
146
147        Level.CreateHorizontalBorders(0, false, Color.Black);
148
149        PhysicsObject pohja = Level.CreateBottomBorder(0, true);
150        AddCollisionHandler(pohja, "pelaaja", PelaajaTuhoutui);
151        pohja.Color = Color.BrownGreen;
152
153        PhysicsObject toppi = Level.CreateTopBorder(1, false);
154        AddCollisionHandler(toppi, "pelaaja", TyonnaPelaajaa);
155
156        Level.Background.CreateGradient(Color.Blue, Color.SkyBlue);
157
158        //pelaajat[0] = LuoPelaaja(new Vector(20, 200), pelaajanKuvat, NappaimistoOhjaimet);
159        //pelaajat[1] = LuoPelaaja(new Vector(-20, 200), punainen, OhjainOhjaimet(ControllerOne));
160        //pelaajat[2] = LuoPelaaja(new Vector(60, 200), vihrea, OhjainOhjaimet(ControllerTwo));
161        //pelaajat[3] = LuoPelaaja(new Vector(-60, 200), sininen, NappaimistoSurullinenKopio);
162        pelaajat[0] = LuoPelaaja(new Vector(20, 200), Color.Yellow, NappaimistoOhjaimet, nuoliOhjainKuva);
163        pelaajat[1] = LuoPelaaja(new Vector(-20, 200), Color.Red, OhjainOhjaimet(ControllerOne), pad1OhjainKuva);
164        pelaajat[2] = LuoPelaaja(new Vector(60, 200), Color.Green, OhjainOhjaimet(ControllerTwo), pad2OhjainKuva);
165        pelaajat[3] = LuoPelaaja(new Vector(-60, 200), Color.Blue, NappaimistoSurullinenKopio, wasdOhjainKuva);
166
167        LuoLevaa();
168
169        GameObject pohjamoska = new GameObject(Level.Width, 200);
170        pohjamoska.Bottom = Level.Bottom;
171        pohjamoska.Image = pohjaMoskaKuva;
172        Add(pohjamoska, -1);
173
174        #region Ajastimet
175        Timer.SingleShot(4.0, delegate
176        {
177            // Valaan luontiajastin.
178            Timer ajastin = new Timer();
179            ajastin.Interval = 0.1;
180            ajastin.Timeout += delegate
181            {
182                LisaaValas();
183                ajastin.Interval = RandomGen.NextDouble(2.0, 4.0);
184            };
185            ajastin.Start();
186
187            // Kivasti kopsittu.
188            Timer kupla = new Timer();
189            kupla.Interval = 2;
190            kupla.Timeout += delegate
191            {
192                LisaaKerattava();
193                kupla.Interval = RandomGen.NextDouble(0.2, 2.0);
194            };
195            kupla.Start();
196
197            won = false;
198            voittoMittari.Value = 0;
199            voittoMittari.MaxValue = pelaajiaLisatty - 1;
200            voittoMittari.UpperLimit += Voitto;
201        });
202        #endregion
203    }
204
205    /// <summary>
206    /// Levänluonti + animaatio
207    /// </summary>
208    private void LuoLevaa()
209    {
210        for (int i = 0; i < 20; i++)
211        {
212            LisaaLonkero();
213        }
214    }
215
216    /// <summary>
217    /// Zoomailee jännästi voittajapelaajaan
218    /// </summary>
219    void Voitto()
220    {
221        if (won)
222        {
223            return;
224        }
225        won = true;
226
227        foreach(Diver sukeltaja in pelaajat)
228        {
229            if(sukeltaja.HasDrowned == false)
230            {
231                MessageDisplay.Add(sukeltaja.Name + " on voittanut kivasti");
232                sukeltaja.IgnoresPhysicsLogics = true;
233                sukeltaja.IgnoresCollisionResponse = true;
234                sukeltaja.CollisionIgnoreGroup = 3;
235                sukeltaja.StopBreathing();
236                sukeltaja.LifeCounter = null;
237             
238
239                PhysicsObject voittaja = PhysicsObject.CreateStaticObject(sukeltaja.Width, sukeltaja.Height);
240                voittaja.IgnoresCollisionResponse = true;
241                voittaja.Image = sukeltaja.Image;
242                voittaja.Position = sukeltaja.Position;
243                voittaja.Animation = sukeltaja.Animation;
244                //voittaja.Animation.Start();
245                Add(voittaja);
246
247                sukeltaja.Destroy();
248
249                /*
250                Timer voittoAjastin = new Timer();
251                voittoAjastin.Interval = 0.5;
252                voittoAjastin.Timeout += delegate
253                {
254                    if (Camera.ZoomFactor < 3)
255                    {
256                        Camera.Follow(sukeltaja);
257                        Camera.Zoom((voittoAjastin.SecondCounter.Value + 1) * Camera.ZoomFactor);
258                    }
259                    else { voittoAjastin.Stop(); }
260                };
261                voittoAjastin.Start();
262                 */
263
264                Timer parempiVoittoAjastin = new Timer();
265                parempiVoittoAjastin.Interval = 0.05;
266                parempiVoittoAjastin.Timeout += delegate
267                {
268                    if (Camera.ZoomFactor < 2.5)
269                    {
270                        Camera.Follow(voittaja);
271                        Camera.Zoom(1.0 + (parempiVoittoAjastin.SecondCounter.Value * 0.01));
272                    }
273                    else { parempiVoittoAjastin.Stop(); }
274                };
275                parempiVoittoAjastin.Start();
276            }
277        }
278    }
279
280    void TyonnaPelaajaa(PhysicsObject tormatty, PhysicsObject pelaaja)
281    {
282        pelaaja.Hit(new Vector(0, -3500));
283    }
284
285    void PelaajaTuhoutui(PhysicsObject tormatty, PhysicsObject pelaaja)
286    {
287        Diver sukeltaja = pelaaja as Diver;
288        sukeltaja.Drown();
289        MessageDisplay.Add(sukeltaja.Name + " on hukkunut! Lellll.");
290        voittoMittari.Value++;
291
292        sukeltaja.LifeCounter = null;
293        sukeltaja.Destroy();
294
295        PhysicsObject tukehtunut = PhysicsObject.CreateStaticObject(sukeltaja.Width, sukeltaja.Height);
296        tukehtunut.IgnoresCollisionResponse = true;
297        tukehtunut.Image = sukeltaja.TukehdusKuvat[0];
298        tukehtunut.Position = sukeltaja.Position;
299        tukehtunut.Velocity = new Vector(0, 50);
300
301        Add(tukehtunut);
302    }
303
304    /// <summary>
305    /// Luodaan jotain kerättävää hurdur.
306    /// </summary>
307    private void LisaaKerattava()
308    {
309        PhysicsObject kerattava = PhysicsObject.CreateStaticObject(kuplanKuvat[0].Width, kuplanKuvat[0].Height); 
310        kerattava.Shape = Shape.Circle;
311        kerattava.Position = RandomGen.NextVector(Level.Left + 50, Level.Bottom, Level.Right - 50, Level.Bottom);
312        kerattava.Velocity = new Vector(0.0, (RandomGen.NextDouble(50, 300)));
313        kerattava.Oscillate(Vector.UnitX, 200, 0.1, RandomGen.NextDouble(0.0, 2.0 * Math.PI));
314        AddCollisionHandler(kerattava, "pelaaja", Hapeta);
315        kerattava.Image = kuplanKuvat[0];
316        kerattava.Animation = new Animation(kuplanKuvat);
317        kerattava.Animation.Start();
318        kerattava.IgnoresCollisionResponse = true;
319        kerattava.CollisionIgnoreGroup = 3;
320        Add(kerattava);
321    }
322
323    /// <summary>
324    /// Antaa pelaajalle lisää happea
325    /// </summary>
326    /// <param name="esine">esine, johon törmäsi</param>
327    /// <param name="pelaaja">pelaaja, joka törmäsi</param>
328    void Hapeta(PhysicsObject esine, PhysicsObject pelaaja)
329    {
330        Diver sukeltaja = pelaaja as Diver; 
331        ((Diver)pelaaja).Oxygen += sukeltaja.MaxOxygen/5;
332        esine.Destroy();
333    }
334
335    /// <summary>
336    /// Luo yksittäisen pelaajan.
337    /// </summary>
338    /// <param name="nappainLisaaja">Aliohjelma, joka lisää pelaajalle ohjaimet</param>
339    /// <returns>luotu pelaaja</returns>
340    Diver LuoPelaaja(Vector paikka, Color vari, Action<Diver> nappainLisaaja, Image ohjainKuva)
341    {
342        Image[] kuvat = LataaVaritettyKuva(pelaajaKuvaDict, pelaajanKuvat, vari);
343        Animation anim = new Animation(kuvat);
344        anim.FPS = 7;
345
346        Diver pelaaja = new Diver(pelaajanKuvat[0].Width, pelaajanKuvat[0].Height);
347        pelaaja.TukehdusKuvat = LataaVaritettyKuva(pelaajaTukehtunuDict, pelaajaTukehtunutKuvat, vari);
348        pelaaja.CollisionIgnoreGroup = 2;
349        pelaaja.Position = paikka;
350        pelaaja.Mass = 4.0;
351        pelaaja.Tag = "pelaaja";
352        pelaaja.Image = kuvat[0];
353        pelaaja.AnimWalk = anim;
354        pelaaja.AnimJump = anim;
355        pelaaja.AnimIdle = anim;
356        Add(pelaaja);
357
358        Label ohjain = new Label(ohjainKuva);
359        ohjain.Width = ohjainKuva.Width;
360        ohjain.Height = ohjainKuva.Height;
361        ohjain.Y = pelaaja.Height;
362        pelaaja.Add(ohjain);
363
364        Timer.SingleShot(7.0, delegate
365        {
366            ohjain.Destroy();
367        });
368
369        AddCollisionHandler(pelaaja, "valaskalanen", PompunSeuraukset);
370
371        pelaaja.LosingOxygen.Timeout += delegate { LuoKupla(pelaaja); };
372
373
374        pelaaja.LifeCounter.LowerLimit += delegate
375        {
376            PelaajaTuhoutui(null, pelaaja);
377        };
378
379        pelaaja.VisibleLife.BarImage = taysi;
380        pelaaja.VisibleLife.Image = tyhja;
381
382        pelaaja.Name = "Pelaaja " + ++pelaajiaLisatty;
383
384        nappainLisaaja(pelaaja);
385        return pelaaja;
386    }
387
388    /// <summary>
389    /// Valaantappo.
390    /// </summary>
391    /// <param name="pelaaja"></param>
392    /// <param name="kalanen"></param>
393    void PompunSeuraukset(PhysicsObject pelaaja, PhysicsObject kalanen)
394    {
395        Valas valas = kalanen as Valas;
396
397        if (valas.SuperValas)
398            return;
399
400        valas.PomppuLaskuri.Value--;
401        valas.Tag = "kalanen";
402        valas.Pompattu.Start();
403
404        if(valas.PomppuLaskuri.Value == valas.PomppuLaskuri.MinValue)
405        {
406            valaanKuolinHuuto.Play();
407
408            PhysicsObject kuoleva = new PhysicsObject(valas.Width, valas.Height);
409            kuoleva.Shape = Shape.Circle;
410            kuoleva.Image = kuollutValas;
411           /* kuoleva.Animation = new Animation(valasKuvat);
412            kuoleva.Animation.FPS = 5;
413            kuoleva.Animation.Start(); */
414            kuoleva.Position = valas.Position;
415            kuoleva.IgnoresCollisionResponse = true;
416            kuoleva.IgnoresPhysicsLogics = true;
417            kuoleva.Velocity = new Vector(0, 40);
418            kuoleva.AngularVelocity = RandomGen.NextDouble(-0.2, 0.2);
419            Add(kuoleva);
420
421            Timer raadonSyoja = new Timer();
422            raadonSyoja.Interval = 30;
423            raadonSyoja.Timeout += delegate { kuoleva.Destroy(); raadonSyoja.Stop(); };
424            raadonSyoja.Start();
425
426            valas.Destroy();
427        }
428    }
429
430    /// <summary>
431    /// Kasilta syömään, huoneen palautus 10.
432    /// </summary>
433    /// <param name="pelaaja">Siivoa huoneesi</param>
434    void LuoKupla(Diver pelaaja)
435    {
436        if (pelaaja.HasDrowned == false)
437        {
438            PhysicsObject kupla = PhysicsObject.CreateStaticObject(kuplanKuvat[0].Width * 0.3, kuplanKuvat[0].Height * 0.3);
439            kupla.Shape = Shape.Circle;
440            kupla.Position = pelaaja.Position + new Vector(0, (pelaaja.Height * 0.5));
441            kupla.Velocity = new Vector(0.0, (RandomGen.NextDouble(50, 300)));
442            kupla.Oscillate(Vector.UnitX, 50, 0.1, RandomGen.NextDouble(0.0, 2.0 * Math.PI));
443            kupla.Image = pieniKuplaKuvat[0];
444            kupla.Animation = new Animation(pieniKuplaKuvat);
445            kupla.Animation.Start();
446            kupla.IgnoresCollisionResponse = true;
447            kupla.CollisionIgnoreGroup = 3;
448            Add(kupla);
449        }
450
451    }
452
453    /// <summary>
454    /// Lisää yksittäisen taivasvalaan pelikentälle
455    /// </summary>
456    void LisaaValas()
457    {
458        int todennakoisyys = RandomGen.NextInt(100);
459        bool super = todennakoisyys < 4;
460
461        Valas valas = new Valas(valasKuvat[0].Width, valasKuvat[0].Height, super);
462        valas.Shape = Shape.Circle;
463        valas.Image = valasKuvat[0];
464        valas.Animation = new Animation(valasKuvat);
465        valas.Animation.FPS = 5;
466        valas.Animation.Start();
467        valas.Position = RandomGen.NextVector(Level.Right, Level.Bottom + 100, Level.Right, Level.Top - 100);
468        valas.Velocity = new Vector(RandomGen.NextDouble(-300, -20), 0.0);
469        valas.Oscillate(Vector.UnitY, 100, 0.1, RandomGen.NextDouble(0.0, 2.0 * Math.PI));
470        valas.CollisionIgnoreGroup = 3;
471        valas.Tag = "valaskalanen";
472        Add(valas);
473
474        valas.Pompattu.Interval = 0.4;
475        valas.Pompattu.Timeout += delegate { valas.Tag = "valaskalanen"; valas.Pompattu.Stop(); };
476
477        if (super) //SUPERVALAS
478        {
479            valas.Animation = new Animation(kultaValasKuvat);
480            valas.Animation.FPS = 5;
481            valas.Animation.Start();
482            valas.Position -= new Vector(0, valas.Height / 2);  //näin valas ei tapa meitä aina
483            valas.Size *= 3;
484        }
485    }
486
487    void LisaaLonkero()
488    {
489        GameObject lonkero = new GameObject(40, 70);
490        lonkero.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom + RandomGen.NextDouble(50,90));
491        lonkero.Image = lonkerot[0];
492        lonkero.Animation = new Animation(lonkerot);
493        lonkero.Animation.FPS = RandomGen.NextInt(1,4);
494        lonkero.Animation.Start();
495        Add(lonkero);
496    }
497
498    /// <summary>
499    /// Lisää vaihtoehtoiset näppäimet yhdelle pelaajista
500    /// </summary>
501    /// <param name="pelaaja"></param>
502    void NappaimistoSurullinenKopio(Diver pelaaja)
503    {
504        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, Direction.Left);
505        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja, Direction.Right);
506        Keyboard.Listen(Key.W, ButtonState.Down, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
507        Keyboard.Listen(Key.S, ButtonState.Down, Sukella, "Pelaaja sukeltaa", pelaaja, new Vector(0, -nopeus));
508    }
509
510    void Sukella(Diver hahmo, Vector impulssi)
511    {
512        hahmo.Push(impulssi *2);
513    }
514
515    protected override void Update(Time time)
516    {
517        base.Update(time);
518    }
519
520    void NappaimistoOhjaimet(Diver pelaaja)
521    {
522        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
523        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
524        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Restart");
525
526        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, Direction.Left);
527        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja, Direction.Right);
528        Keyboard.Listen(Key.Up, ButtonState.Down, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
529        Keyboard.Listen(Key.Down, ButtonState.Down, Sukella, "Pelaaja sukeltaa", pelaaja, new Vector(0, -nopeus));
530    }
531
532    Action<Diver> OhjainOhjaimet(GamePad ohjain)
533    {
534        return delegate(Diver pelaaja)
535        {
536            ohjain.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, Direction.Left);
537            ohjain.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja, Direction.Right);
538            ohjain.Listen(Button.A, ButtonState.Down, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
539            ohjain.Listen(Button.DPadDown, ButtonState.Down, Sukella, "Pelaaja sukeltaa", pelaaja, new Vector(0, -nopeus));
540        };
541    }
542
543    void Liikuta(Diver hahmo, Direction suunta)
544    {
545        hahmo.Walk(suunta);
546    }
547
548    void Hyppaa(Diver hahmo, double nopeus)
549    {
550        hahmo.Jump(nopeus);
551    }
552
553    Image VaritaKuva(Image kuva, Color vari)
554    {
555        Image uusi = new Image(kuva.Width, kuva.Height, Color.Transparent);
556        for (int y = 0; y < kuva.Height; y++)
557        {
558            for (int x = 0; x < kuva.Width; x++)
559            {
560                double suhde = 0.0;
561                if (Math.Abs(kuva[y, x].GreenComponent - 255) < 40)
562                {
563                    suhde = 1.0;
564                }
565                if (kuva[y, x].AlphaComponent == 0)
566                {
567                    suhde = 0.0;
568                }
569                uusi[y, x] = Color.Lerp(kuva[y, x], vari, suhde);
570            }
571        }
572        return uusi;
573    }
574
575    Image[] VaritaKuvat(Image[] kuvat, Color vari)
576    {
577        Image[] uudet = new Image[kuvat.Length];
578        for (int i = 0; i < kuvat.Length; i++)
579        {
580            uudet[i] = VaritaKuva(kuvat[i], vari);
581        }
582        return uudet;
583    }
584}
Note: See TracBrowser for help on using the repository browser.