using System;
namespace SpriteWave
{
public static class Transfer
{
private static Selection _src, _dst;
public static Selection Source { get { return _src; } set { _src = value; } }
public static Selection Dest { get { return _dst; } set { _dst = value; } }
private static IPiece _obj;
public static bool HasPiece { get { return _obj != null; } }
private static bool _completed;
public static bool Completed { get { return _completed; } }
public static void Start()
{
_completed = false;
if (_src == null)
return;
Tile t = _src.Piece as Tile;
if (t != null)
_obj = t.Clone();
else
_obj = _src.Piece;
}
public static void Clear()
{
_src = null;
_dst = null;
_obj = null;
}
public static void Paste()
{
_completed = false;
if (_obj == null || _src == null || _dst == null || _dst.Window == null)
return;
TileWindow wnd = _dst.Window;
Edge e = _obj as Edge;
if (e != null)
_dst.Window.ResizeCollage(e);
else
{
_dst.Window.ReceiveTile(_obj as Tile);
_completed = true;
}
}
public static void Swap()
{
_completed = false;
Tile cur = _obj as Tile;
if (cur == null || _src == null || _dst == null)
return;
Tile other = _dst.Piece as Tile;
if (other == null)
return;
TileWindow recver = _dst.Window;
TileWindow sender = _src.Window;
if (recver == null || sender == null)
return;
sender.ReceiveTile(other.Clone() as Tile, _src.Location);
recver.ReceiveTile(cur, _dst.Location);
_completed = true;
}
}
}