public WabeLayout(Wabe wabe, WabeDirection direction) { if (wabe == null) throw new ArgumentNullException(nameof(wabe)); _wabe = wabe; Direction = direction; GenerateFieldArray(); }
public WabeLayout(Wabe wabe, WabeDirection direction) { if (wabe == null) { throw new ArgumentNullException(nameof(wabe)); } _wabe = wabe; Direction = direction; GenerateFieldArray(); }
public WabeLayout(Wabe wabe, Vector2 position) { if (wabe == null) { throw new ArgumentNullException(nameof(wabe)); } _wabe = wabe; Direction = CalculateDirection(position); GenerateFieldArray(); }
private WabeFieldType CalculateFieldType(WabeType type, WabeDirection direction, int index) { if (index == 4) { return(WabeFieldType.Center); } if (0 != ((index + 1) & 1)) { return(WabeFieldType.Unused); } switch (type) { case WabeType.TwoWabe: switch (direction) { case WabeDirection.Up | WabeDirection.Left: return((0 == (index & 4)) ? WabeFieldType.Unused : WabeFieldType.Unpowered); case WabeDirection.Down | WabeDirection.Right: return((0 != (index & 4)) ? WabeFieldType.Unused : WabeFieldType.Unpowered); case WabeDirection.Down | WabeDirection.Left: return((0 != (index & 2)) ? WabeFieldType.Unused : WabeFieldType.Unpowered); case WabeDirection.Up | WabeDirection.Right: return((0 == (index & 2)) ? WabeFieldType.Unused : WabeFieldType.Unpowered); } break; case WabeType.ThreeWabe: switch (direction) { case WabeDirection.Left: return(index == 3 ? WabeFieldType.Unused : WabeFieldType.Unpowered); case WabeDirection.Right: return(index == 5 ? WabeFieldType.Unused : WabeFieldType.Unpowered); case WabeDirection.Up: return(index == 1 ? WabeFieldType.Unused : WabeFieldType.Unpowered); case WabeDirection.Down: return(index == 7 ? WabeFieldType.Unused : WabeFieldType.Unpowered); } break; case WabeType.FourWabe: if (direction == WabeDirection.Mid) { return(WabeFieldType.Unpowered); } break; } throw new ArgumentException("The given index or direction does not match any field type.", nameof(index)); }
private WabeFieldType CalculateFieldType(WabeType type, WabeDirection direction, int index) { if (index == 4) return WabeFieldType.Center; if (0 != ((index + 1) & 1)) return WabeFieldType.Unused; switch (type) { case WabeType.TwoWabe: switch (direction) { case WabeDirection.Up | WabeDirection.Left: return (0 == (index & 4)) ? WabeFieldType.Unused : WabeFieldType.Unpowered; case WabeDirection.Down | WabeDirection.Right: return (0 != (index & 4)) ? WabeFieldType.Unused : WabeFieldType.Unpowered; case WabeDirection.Down | WabeDirection.Left: return (0 != (index & 2)) ? WabeFieldType.Unused : WabeFieldType.Unpowered; case WabeDirection.Up | WabeDirection.Right: return (0 == (index & 2)) ? WabeFieldType.Unused : WabeFieldType.Unpowered; } break; case WabeType.ThreeWabe: switch (direction) { case WabeDirection.Left: return index == 3 ? WabeFieldType.Unused : WabeFieldType.Unpowered; case WabeDirection.Right: return index == 5 ? WabeFieldType.Unused : WabeFieldType.Unpowered; case WabeDirection.Up: return index == 1 ? WabeFieldType.Unused : WabeFieldType.Unpowered; case WabeDirection.Down: return index == 7 ? WabeFieldType.Unused : WabeFieldType.Unpowered; } break; case WabeType.FourWabe: if (direction == WabeDirection.Mid) return WabeFieldType.Unpowered; break; } throw new ArgumentException("The given index or direction does not match any field type.", nameof(index)); }