-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSmartBrushes.cs
86 lines (71 loc) · 2.22 KB
/
SmartBrushes.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using FFRMapEditorMono;
using System.Collections.Generic;
using System.Linq;
using System;
namespace FFRMapEditorMono
{
public class SmartBrush
{
public TileGroup Group { get; set; }
private List<byte> tiles;
public SmartBrush(TileGroup _group, List<byte> _tiles)
{
Group = _group;
tiles = _tiles;
}
public byte GetTile(List<List<byte>> mapcluster)
{
List<List<TileGroup>> clustergroup = new();
List<TileType> validTiles = Enum.GetValues<TileType>().ToList();
TileGroup currentile = TileGroup.Other;
TileGroup mainType = OwDataGroup.TileGroupCompatibility[Group];
if (OwDataGroup.TileByteToGroup.TryGetValue(mapcluster[0][1], out currentile))
{
currentile = OwDataGroup.TileGroupCompatibility[currentile];
if (currentile == mainType)
{
validTiles.Remove(TileType.North);
validTiles.Remove(TileType.NorthEast);
validTiles.Remove(TileType.NorthWest);
}
}
if (OwDataGroup.TileByteToGroup.TryGetValue(mapcluster[2][1], out currentile))
{
currentile = OwDataGroup.TileGroupCompatibility[currentile];
if (currentile == mainType)
{
validTiles.Remove(TileType.South);
validTiles.Remove(TileType.SouthEast);
validTiles.Remove(TileType.SouthWest);
}
}
if (OwDataGroup.TileByteToGroup.TryGetValue(mapcluster[1][0], out currentile))
{
currentile = OwDataGroup.TileGroupCompatibility[currentile];
if (currentile == mainType)
{
validTiles.Remove(TileType.West);
validTiles.Remove(TileType.NorthWest);
validTiles.Remove(TileType.SouthWest);
}
}
if (OwDataGroup.TileByteToGroup.TryGetValue(mapcluster[1][2], out currentile))
{
currentile = OwDataGroup.TileGroupCompatibility[currentile];
if (currentile == mainType)
{
validTiles.Remove(TileType.East);
validTiles.Remove(TileType.NorthEast);
validTiles.Remove(TileType.SouthEast);
}
}
if (validTiles.Count > 1)
{
validTiles.Remove(TileType.Center);
}
List<TileType> priorityTiles = new() { TileType.NorthWest, TileType.NorthEast, TileType.SouthEast, TileType.SouthWest };
validTiles = validTiles.OrderByDescending(t => priorityTiles.Contains(t)).ToList();
return tiles[(int)validTiles.First()];
}
}
}