namespace Yw.WinFrmUI.HydroL2d
{
///
/// 水池
///
public class Tank : Source
{
///
/// 图片
///
public Image Image { get; set; }
///
/// 宽度
///
public float? Width { get; set; }
///
/// 高度
///
public float? Height { get; set; }
///
/// 悬停图片
///
public Image HoveredImage { get; set; }
///
/// 悬停宽度
///
public float? HoveredWidth { get; set; }
///
/// 悬停高度
///
public float? HoveredHeight { get; set; }
///
/// 选择图片
///
public Image SelectedImage { get; set; }
///
/// 选择宽度
///
public float? SelectedWidth { get; set; }
///
/// 选择高度
///
public float? SelectedHeight { get; set; }
//获取坐标位置
private Coordinate GetCoordinate(Graphics g)
{
var ps = this.Position; //原始点
var ws = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Tank.Size.Width;//原始宽度
var hs = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Tank.Size.Height;//原始高度
var wz = ws / g.PageScale;//缩放宽度
var hz = hs / g.PageScale; //缩放高度
return Coordinate.GetCoordinate(ps, 0, new SizeF(wz, hz), StringAlignment.Center, StringAlignment.Center);
}
private Coordinate _coordinate = null;//坐标信息
///
/// 绘制
///
public override void Draw(Graphics g)
{
_coordinate = GetCoordinate(g);
if (this.Hovered)
{
var hoveredImg = CacheHelper.TankHoveredImage;
if (this.HoveredImage != null)
{
hoveredImg = this.HoveredImage;
}
var hoveredWidth = this.HoveredWidth.HasValue ? this.HoveredWidth.Value : CacheHelper.HydroL2d.Tank.HoveredSize.Width;
var hoveredHeight = this.HoveredHeight.HasValue ? this.HoveredHeight.Value : CacheHelper.HydroL2d.Tank.HoveredSize.Height;
var isNewImage = false;
if (hoveredImg.Width != (int)hoveredWidth || hoveredImg.Height != (int)hoveredHeight)
{
hoveredImg = hoveredImg.CloneC(hoveredWidth, hoveredHeight);
isNewImage = true;
}
var dx = hoveredWidth / g.PageScale / 2f;
var dy = hoveredHeight / g.PageScale / 2f;
var p0 = new PointF(this.Position.X - dx, this.Position.Y - dy);
g.DrawImage(hoveredImg, p0);
if (isNewImage)
{
hoveredImg.Dispose();
}
}
else if (this.Selected)
{
var selectedImg = CacheHelper.TankSelectedImage;
if (this.SelectedImage != null)
{
selectedImg = this.SelectedImage;
}
var selectedWidth = this.SelectedWidth.HasValue ? this.SelectedWidth.Value : CacheHelper.HydroL2d.Tank.SelectedSize.Width;
var selectedHeight = this.SelectedHeight.HasValue ? this.SelectedHeight.Value : CacheHelper.HydroL2d.Tank.SelectedSize.Height;
var isNewImage = false;
if (selectedImg.Width != (int)selectedWidth || selectedImg.Height != (int)selectedHeight)
{
selectedImg = selectedImg.CloneC(selectedWidth, selectedHeight);
isNewImage = true;
}
var dx = selectedWidth / g.PageScale / 2f;
var dy = selectedHeight / g.PageScale / 2f;
var p0 = new PointF(this.Position.X - dx, this.Position.Y - dy);
g.DrawImage(selectedImg, p0);
if (isNewImage)
{
selectedImg.Dispose();
}
}
else
{
var img = CacheHelper.TankImage;
if (this.Image != null)
{
img = this.Image;
}
var width = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Tank.Size.Width;
var height = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Tank.Size.Height;
var isNewImage = false;
if (img.Width != (int)width || img.Height != (int)height)
{
img = img.CloneC(width, height);
isNewImage = true;
}
var dx = width / g.PageScale / 2f;
var dy = height / g.PageScale / 2f;
var p0 = new PointF(this.Position.X - dx, this.Position.Y - dy);
g.DrawImage(img, p0);
if (isNewImage)
{
img.Dispose();
}
}
}
///
/// 包含
///
public override bool Contains(PointF pt)
{
if (_coordinate == null)
{
return false;
}
return _coordinate.BeforeRectf.Contains(pt);
}
///
/// 相交
///
public override bool Intersect(RectangleF rectf)
{
if (rectf.Contains(this.Position))
{
return true;
}
return false;
}
}
}