source: 2014/24/EemeliK/Zombieland/Jypeli/Levels/ColorTileMap.cs @ 10335

Revision 5974, 4.7 KB checked in by empaheik, 5 years ago (diff)
Line 
1using System;
2using System.IO;
3using System.Collections.Generic;
4using System.Linq;
5
6namespace Jypeli
7{
8    /// <summary>
9    /// Ruutukartta, jonka avulla olioita voidaan helposti asettaa tasavälein ruudukkoon.
10    /// Ruutukartta koostuu kirjoitusmerkeistä (<c>char</c>), joihin voi liittää
11    /// aliohjelman, joka luo merkkiä vastaavan olion.
12    /// </summary>
13    public class ColorTileMap : AbstractTileMap<Color>
14    {
15        private double _tolerance = 30;
16
17        protected override Color Null
18        {
19            get { return Color.Transparent; }
20        }
21
22        /// <summary>
23        /// Väritoleranssi. Mitä pienempi toleranssi, sitä tarkemmin eri värit erotellaan toisistaan.
24        /// Nollatoleranssilla värit on annettava tarkkoina rgb-koodeina, suuremmilla toleransseilla
25        /// riittää "sinne päin".
26        /// </summary>
27        public double ColorTolerance
28        {
29            get { return _tolerance; }
30            set
31            {
32                if (value < 0) throw new ArgumentException("Tolerance must not be negative.");
33                _tolerance = value;
34            }
35        }
36       
37        /// <summary>
38        /// Luo uuden ruutukartan.
39        /// </summary>
40        /// <param name="img">Kuva, jossa jokainen pikseli vastaa oliota.</param>
41        public ColorTileMap( Image img )
42            : base( img.GetData() )
43        {
44        }
45
46        /// <summary>
47        /// Luo uuden ruutukartan.
48        /// </summary>
49        /// <param name="assetName">Kuvatiedoston nimi.</param>
50        public ColorTileMap(string assetName)
51            : this(Game.LoadImage(assetName))
52        {
53        }
54
55        /// <summary>
56        /// Lukee ruutukentän Content-projektin kuvatiedostosta.
57        /// </summary>
58        /// <param name="assetName">Tiedoston nimi</param>       
59        public static ColorTileMap FromLevelAsset( string assetName )
60        {
61            return new ColorTileMap( Game.LoadImage( assetName ) );
62        }
63
64        protected virtual bool ItemEquals( Color a, Color b )
65        {
66            return ( a.AlphaComponent == b.AlphaComponent && Color.Distance( a, b ) <= ColorTolerance );
67        }
68
69        /// <summary>
70        /// Määrittää, että tietyn ruutukentän symbolin (<c>tileSymbol</c>) kohdalla
71        /// kutsutaan aliohjelmaa <c>f</c>. Huom! Käytä tämän aliohjelman kanssa metodia
72        /// Execute.
73        /// </summary>
74        /// <param name="hexCode">Heksakoodi värille</param>
75        /// <param name="method">Aliohjelma</param>
76        public void SetTileMethod(string hexCode, TileMethod method)
77        {
78            SetTileMethod(Color.FromHexCode(hexCode), method);
79        }
80
81        /// <summary>
82        /// Määrittää, että tietyn ruutukentän symbolin (<c>tileSymbol</c>) kohdalla
83        /// kutsutaan aliohjelmaa <c>f</c>. Huom! Käytä tämän aliohjelman kanssa metodia
84        /// Execute.
85        /// </summary>
86        /// <param name="hexCode">Heksakoodi värille</param>
87        /// <param name="method">Aliohjelma</param>
88        /// <param name="p1">Parametri</param>
89        public void SetTileMethod<T1>(string hexCode, TileMethod<T1> method, T1 p1)
90        {
91            SetTileMethod(Color.FromHexCode(hexCode), method, p1);
92        }
93
94        /// <summary>
95        /// Määrittää, että tietyn ruutukentän symbolin (<c>tileSymbol</c>) kohdalla
96        /// kutsutaan aliohjelmaa <c>f</c>. Huom! Käytä tämän aliohjelman kanssa metodia
97        /// Execute.
98        /// </summary>
99        /// <param name="hexCode">Heksakoodi värille</param>
100        /// <param name="method">Aliohjelma</param>
101        /// <param name="p1">Parametri</param>
102        /// <param name="p2">Parametri</param>
103        public void SetTileMethod<T1, T2>(string hexCode, TileMethod<T1, T2> method, T1 p1, T2 p2)
104        {
105            SetTileMethod(Color.FromHexCode(hexCode), method, p1, p2);
106        }
107
108        /// <summary>
109        /// Määrittää, että tietyn ruutukentän symbolin (<c>tileSymbol</c>) kohdalla
110        /// kutsutaan aliohjelmaa <c>f</c>. Huom! Käytä tämän aliohjelman kanssa metodia
111        /// Execute.
112        /// </summary>
113        /// <param name="hexCode">Heksakoodi värille</param>
114        /// <param name="method">Aliohjelma</param>
115        /// <param name="p1">Parametri</param>
116        /// <param name="p2">Parametri</param>
117        /// <param name="p3">Parametri</param>
118        public void SetTileMethod<T1, T2, T3>(string hexCode, TileMethod<T1, T2, T3> method, T1 p1, T2 p2, T3 p3)
119        {
120            SetTileMethod(Color.FromHexCode(hexCode), method, p1, p2, p3);
121        }
122    }
123}
Note: See TracBrowser for help on using the repository browser.