public override string ToString() { return($"{index} " + CompasEnumExtension.ToText(sides)); }
void PrepareSamples() { var templates = new List <TileInfo>(); var corners = new byte[4]; corners[(int)CornerEnum.TL] = CompasEnumExtension.ToCompasSet("WwN"); corners[(int)CornerEnum.TR] = CompasEnumExtension.ToCompasSet("NnE"); corners[(int)CornerEnum.BL] = CompasEnumExtension.ToCompasSet("SsW"); corners[(int)CornerEnum.BR] = CompasEnumExtension.ToCompasSet("EeS"); void update(TileInfo info, int index, CornerEnum corner, byte sides, byte ignoreSides) { info.index = index; info.corner = corner; var cornerSet = corners[(int)corner]; info.sides = (byte)(sides & cornerSet); info.ignoreSides = (byte)(ignoreSides & cornerSet); templates.Add(info); } void add(int tl, int tr, int bl, int br, string sides, string ignoreSides) { var _sides = CompasEnumExtension.ToCompasSet(sides); var _ignoreSides = CompasEnumExtension.ToCompasSet(ignoreSides); update(new TileInfo(), tl, CornerEnum.TL, _sides, _ignoreSides); update(new TileInfo(), tr, CornerEnum.TR, _sides, _ignoreSides); update(new TileInfo(), bl, CornerEnum.BL, _sides, _ignoreSides); update(new TileInfo(), br, CornerEnum.BR, _sides, _ignoreSides); } add(12, 13, 8, 9, "EeS", "wns"); add(14, 15, 10, 11, "SsW", "new"); add(4, 5, 0, 1, "NnE", "esw"); add(6, 7, 2, 3, "NWw", "nes"); add(22, 23, 18, 19, "NESW", ""); TileInfo find(byte mask, CornerEnum corner) { var cornerSet = (byte)(corners[(int)corner] & mask); for (int i = 0; i < templates.Count; i++) { var info = templates[i]; if (info.corner == corner) { var b = cornerSet & ~info.ignoreSides; if (b == info.sides) { return(info); } } } throw new NotImplementedException(); } samples.Add(0, new SampleInfo(0, 20, 21, 16, 17)); samples.Add(255, new SampleInfo(255, 9, 10, 5, 6)); for (int n = 0; n <= 0xFF; n++) { var text = CompasEnumExtension.ToText((byte)n); var tl = find((byte)n, CornerEnum.TL); var tr = find((byte)n, CornerEnum.TR); var bl = find((byte)n, CornerEnum.BL); var br = find((byte)n, CornerEnum.BR); var index = tl.sides | tr.sides | bl.sides | br.sides; if (!samples.TryGetValue(index, out var sample)) { sample = new SampleInfo(index, tl.index, tr.index, bl.index, br.index); samples.Add(index, sample); } indexes[n] = sample; } }