source: 2015/26/MikkoL/JRPG/JRPG/JRPG/Overworld/CollisionMap.cs @ 6376

Revision 6376, 4.0 KB checked in by mijoliim, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6
7public class CollisionMap
8{
9    public Tile[,] CollisionMapArray { get; set; }
10
11    public CollisionMap()
12        : base()
13    {
14
15    }
16
17    public CollisionMap(string CMap)
18        : base()
19    {
20        Image _CollisionMap = Game.LoadImage(CMap);
21        CollisionMapArray = new Tile[_CollisionMap.Width, _CollisionMap.Height];
22        LoadCollisionMap(CMap);
23    }
24
25    void LoadCollisionMap(string CMap)
26    {
27        ColorTileMap _CollisionMap = ColorTileMap.FromLevelAsset(CMap);
28        if (_CollisionMap.ColumnCount != CollisionMapArray.GetLength(0) || _CollisionMap.RowCount != CollisionMapArray.GetLength(1)) throw new Exception("Array's size and ColorMap's size doesn't match");
29        _CollisionMap.SetTileMethod("000000", SetWallTile);
30        _CollisionMap.SetTileMethod("ffffff", SetFloorTile);
31        _CollisionMap.SetTileMethod("0000ff", SetWaterTile);
32        _CollisionMap.SetTileMethod("00ffff", SetWalkableWaterTile);
33        _CollisionMap.SetTileMethod("0080ff", SetUnpassableWaterTile);
34        _CollisionMap.SetTileMethod(Color.Transparent, SetEmptyTile);
35        _CollisionMap.ColorTolerance = 0;
36        _CollisionMap.Execute(1, 1);
37
38        CheckForEmptyTiles();
39    }
40
41    void SetEmptyTile(Vector Position, double Width, double Height)
42    {
43        Tile Empty = new Tile(TileType.Blank);
44        CollisionMapArray.SetValue(Empty, (int)Math.Floor(Position.X) + (int)Math.Floor((double)CollisionMapArray.GetLength(0) / 2), (int)Math.Floor(Position.Y) + (int)Math.Floor((double)CollisionMapArray.GetLength(1) / 2));
45    }
46
47    void SetWallTile(Vector Position, double Width, double Height)
48    {
49        Tile Wall = new Tile(TileType.Wall);
50        CollisionMapArray.SetValue(Wall, (int)Math.Floor(Position.X) + (int)Math.Floor((double)CollisionMapArray.GetLength(0) / 2), (int)Math.Floor(Position.Y) + (int)Math.Floor((double)CollisionMapArray.GetLength(1) / 2));
51    }
52    void SetFloorTile(Vector Position, double Width, double Height)
53    {
54        Tile Floor = new Tile(TileType.Floor);
55        CollisionMapArray.SetValue(Floor, (int)Math.Floor(Position.X) + (int)Math.Floor((double)CollisionMapArray.GetLength(0) / 2), (int)Math.Floor(Position.Y) + (int)Math.Floor((double)CollisionMapArray.GetLength(1) / 2));
56    }
57    void SetWaterTile(Vector Position, double Width, double Height)
58    {
59        Tile Water = new Tile(TileType.Water);
60        CollisionMapArray.SetValue(Water, (int)Math.Floor(Position.X) + (int)Math.Floor((double)CollisionMapArray.GetLength(0) / 2), (int)Math.Floor(Position.Y) + (int)Math.Floor((double)CollisionMapArray.GetLength(1) / 2));
61    }
62    void SetWalkableWaterTile(Vector Position, double Width, double Height)
63    {
64        Tile WalkableWater = new Tile(TileType.WalkableWater);
65        CollisionMapArray.SetValue(WalkableWater, (int)Math.Floor(Position.X) + (int)Math.Floor((double)CollisionMapArray.GetLength(0) / 2), (int)Math.Floor(Position.Y) + (int)Math.Floor((double)CollisionMapArray.GetLength(1) / 2));
66    }
67    void SetUnpassableWaterTile(Vector Position, double Width, double Height)
68    {
69        Tile UnpassableWater = new Tile(TileType.WaterUnpassable);
70        CollisionMapArray.SetValue(UnpassableWater, (int)Position.X + (int)Math.Floor((double)CollisionMapArray.GetLength(0) / 2), (int)Math.Floor(Position.Y) + (int)Math.Floor((double)CollisionMapArray.GetLength(1) / 2));
71    }
72
73    void CheckForEmptyTiles()
74    {
75        if (CollisionMapArray == null) throw new NullReferenceException("Array hasn't been created yet.");
76
77        for (int ix = 0; ix < CollisionMapArray.GetLength(0); ix++)
78        {
79            for (int iy = 0; iy < CollisionMapArray.GetLength(1); iy++)
80            {
81                if (CollisionMapArray.GetValue(ix, iy) == null)
82                {
83                    Tile Blank = new Tile();
84                    CollisionMapArray.SetValue(Blank, ix, iy);
85                }
86            }
87        }
88    }
89}
Note: See TracBrowser for help on using the repository browser.