public override void Bind(IEditorService service) { _edSvc = service; _edSvc.RegisterCustomNotifier(this); _wm = (IWatermarkDefinition)service.GetEditedResource(); NumericBinder.BindValueChanged(numRotation, _wm.Appearance, "Rotation"); NumericBinder.BindValueChanged(numTransparency, _wm.Appearance, "Transparency"); if (_wm.Position.Type == PositionType.Tile) _tile = (ITilePosition)_wm.Position; else if (_wm.Position.Type == PositionType.XY) _xy = (IXYPosition)_wm.Position; if (_tile == null) { _tile = _wm.CreateTilePosition(); rdXY.Checked = true; } else if (_xy == null) { _xy = _wm.CreateXYPosition(); rdTile.Checked = true; } }
/// <summary> /// Enumerates all positionf of the tiles adjacent to the current tile. /// </summary> /// <param name="tile">The postion of the tile.</param> /// <param name="index"></param> /// <param name="pattern">The pattern that is used.</param> /// <returns></returns> /// <remarks> /// The first tile is usually the north tile. The only tiles in a triangular pattern, with one odd and one even /// coordinate. In that case first title is the south located tile. The following tiltes are enumerated counter /// clockwise. /// </remarks> public static TilePosition GetAdjacentTile(this ITilePosition tile, int index, TilePattern pattern) { if (index <= 0) { throw new ArgumentOutOfRangeException(nameof(index)); } int x = tile.X; int y = tile.Y; switch (pattern) { case TilePattern.Triangular: // check for odd tiles return(((x & 1) ^ (y & 1)) == 1 ? _oddTriangularAdjacents[index % (int)pattern](tile) : _evenTriangularAdjacents[index % (int)pattern](tile)); case TilePattern.Rectangular: return(_rectangularAdjacents[index % (int)pattern](tile)); case TilePattern.Hexangular: return(_hexangularAdjacents[index % (int)pattern](tile)); default: throw new ArgumentOutOfRangeException(nameof(pattern), pattern, $"Pattern {pattern} not supported."); } }
public override void Bind(IEditorService service) { _edSvc = service; _edSvc.RegisterCustomNotifier(this); _wm = (IWatermarkDefinition)service.GetEditedResource(); NumericBinder.BindValueChanged(numRotation, _wm.Appearance, "Rotation"); NumericBinder.BindValueChanged(numTransparency, _wm.Appearance, "Transparency"); if (_wm.Position.Type == PositionType.Tile) { _tile = (ITilePosition)_wm.Position; } else if (_wm.Position.Type == PositionType.XY) { _xy = (IXYPosition)_wm.Position; } if (_tile == null) { _tile = _wm.CreateTilePosition(); rdXY.Checked = true; } else if (_xy == null) { _xy = _wm.CreateXYPosition(); rdTile.Checked = true; } }
public TilePositionEditor(ITilePosition pos, IEditorService service) { InitializeComponent(); _pos = pos; _edSvc = service; try { _init = true; cmbHorizontalAlignment.DataSource = Enum.GetValues(typeof(HorizontalAlignmentType)); cmbVerticalAlignment.DataSource = Enum.GetValues(typeof(VerticalAlignmentType)); cmbHorizontalUnits.DataSource = Enum.GetValues(typeof(UnitType)); cmbVerticalUnits.DataSource = Enum.GetValues(typeof(UnitType)); numTileWidth.Value = Convert.ToDecimal(_pos.TileWidth); numTileHeight.Value = Convert.ToDecimal(_pos.TileHeight); cmbVerticalAlignment.SelectedItem = _pos.VerticalPosition.Alignment; cmbVerticalUnits.SelectedItem = _pos.VerticalPosition.Unit; numVerticalOffset.Value = Convert.ToDecimal(_pos.VerticalPosition.Offset); cmbHorizontalUnits.SelectedItem = _pos.HorizontalPosition.Unit; cmbHorizontalAlignment.SelectedItem = _pos.HorizontalPosition.Alignment; numHorizontalOffset.Value = Convert.ToDecimal(_pos.HorizontalPosition.Offset); } finally { _init = false; } }
public WatermarkInstanceEditor(IEditorService service, IWatermark watermark) { InitializeComponent(); _edSvc = service; _watermark = watermark; try { _init = true; cmbUsage.DataSource = Enum.GetValues(typeof(UsageType)); cmbUsage.SelectedItem = _watermark.Usage; txtResourceId.Text = _watermark.ResourceId; txtName.Text = _watermark.Name; _ovAppearance = _watermark.AppearanceOverride; chkOverrideAppearance.Checked = (_ovAppearance != null); chkOverridePosition.Checked = (_watermark.PositionOverride != null); if (_ovAppearance == null) _ovAppearance = _watermark.CreateDefaultAppearance(); //Init appearance numOvRotation.Value = Convert.ToDecimal(_ovAppearance.Rotation); numOvTransparency.Value = Convert.ToDecimal(_ovAppearance.Transparency); if (_watermark.PositionOverride == null) { _ovTilePosition = _watermark.CreateDefaultTilePosition(); _ovXyPosition = _watermark.CreateDefaultXYPosition(); } else { if (_watermark.PositionOverride.Type == PositionType.Tile) { _ovXyPosition = _watermark.CreateDefaultXYPosition(); _ovTilePosition = (ITilePosition)_watermark.PositionOverride; rdOvTilePos.Checked = true; } else { _ovXyPosition = (IXYPosition)_watermark.PositionOverride; _ovTilePosition = _watermark.CreateDefaultTilePosition(); rdOvPosXY.Checked = true; } TilePos_CheckedChanged(this, EventArgs.Empty); } Debug.Assert(_ovTilePosition != null); Debug.Assert(_ovXyPosition != null); } finally { _init = false; } }
internal async Task MoveTile(ITilePosition from, ITilePosition to) { var tile = from.GetTile(); from.RemoveTile(); await to.AddTile(tile); if (to.GetTile() == '#') { // The user placed a blank tile, but then did not choose a letter RemoveBlankToRack(to); } }
/// <summary> /// Gets the tile at a specific postion. /// </summary> /// <param name="position">The position of a tile</param> /// <returns>The tile at the specified position.</returns> public T this[ITilePosition position] { get { if (position == null) { throw new ArgumentNullException(nameof(position)); } return(this[position.X, position.Y]); } set { if (position == null) { throw new ArgumentNullException(nameof(position)); } this[position.X, position.Y] = value; } }
/// <summary> /// Enumerates all positionf of the tiles adjacent to the current tile. /// </summary> /// <param name="tile">The postion of the tile.</param> /// <param name="pattern">The pattern that is used.</param> /// <returns></returns> /// <remarks> /// The first tile is usually the north tile. The only tiles in a triangular pattern, with one odd and one even /// coordinate. In that case first title is the south located tile. The following tiltes are enumerated counter /// clockwise. /// </remarks> public static IEnumerable <TilePosition> GetAdjacentTiles(this ITilePosition tile, TilePattern pattern) { int x = tile.X; int y = tile.Y; switch (pattern) { case TilePattern.Triangular: // check for odd tiles return(((x & 1) ^ (y & 1)) == 1 ? _oddTriangularAdjacents.Select(t => t(tile)) : _evenTriangularAdjacents.Select(t => t(tile))); case TilePattern.Rectangular: return(_rectangularAdjacents.Select(t => t(tile))); case TilePattern.Hexangular: return(_hexangularAdjacents.Select(t => t(tile))); default: throw new ArgumentOutOfRangeException(nameof(pattern), pattern, $"Pattern {pattern} not supported."); } }
public WatermarkInstanceEditor(IEditorService service, IWatermark watermark) { InitializeComponent(); _edSvc = service; _watermark = watermark; try { _init = true; cmbUsage.DataSource = Enum.GetValues(typeof(UsageType)); cmbUsage.SelectedItem = _watermark.Usage; txtResourceId.Text = _watermark.ResourceId; txtName.Text = _watermark.Name; _ovAppearance = _watermark.AppearanceOverride; chkOverrideAppearance.Checked = (_ovAppearance != null); chkOverridePosition.Checked = (_watermark.PositionOverride != null); if (_ovAppearance == null) { _ovAppearance = _watermark.CreateDefaultAppearance(); } //Init appearance numOvRotation.Value = Convert.ToDecimal(_ovAppearance.Rotation); numOvTransparency.Value = Convert.ToDecimal(_ovAppearance.Transparency); if (_watermark.PositionOverride == null) { _ovTilePosition = _watermark.CreateDefaultTilePosition(); _ovXyPosition = _watermark.CreateDefaultXYPosition(); } else { if (_watermark.PositionOverride.Type == PositionType.Tile) { _ovXyPosition = _watermark.CreateDefaultXYPosition(); _ovTilePosition = (ITilePosition)_watermark.PositionOverride; rdOvTilePos.Checked = true; } else { _ovXyPosition = (IXYPosition)_watermark.PositionOverride; _ovTilePosition = _watermark.CreateDefaultTilePosition(); rdOvPosXY.Checked = true; } TilePos_CheckedChanged(this, EventArgs.Empty); } Debug.Assert(_ovTilePosition != null); Debug.Assert(_ovXyPosition != null); } finally { _init = false; } }
private void RemoveBlankToRack(ITilePosition position) { position.RemoveTile(); MyTiles[Array.IndexOf(MyTiles, ' ')] = '*'; }