// /// <summary> /// 检测是否可以攻击某单位,重写这个方法可更改射程判断规则 /// </summary> /// <param name="target"></param> /// <returns></returns> public virtual bool CanAttack(Unit target) { if (Owner.bDot <= 1) return false; if (ActionState.HaveAction == true) return false; if (ActionState.HaveAttack == true) return false; return GetDistance(target) <= AttackRange.Current; }
/// <summary> /// 计算ab单位的距离,无法计算返回-1 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public int GetDistance(Unit a, Unit b = null) { if (b == null) b = this; if (a.Position == null || b.Position == null) return -1; int distanceX = a.Position.Location.X - b.Position.Location.X; int distanceY = a.Position.Location.Y - b.Position.Location.Y; if (distanceX < 0) distanceX = -distanceX; if (distanceY < 0) distanceY = -distanceY; return distanceX + distanceY; }
/// <summary> /// 放置单位到此格。 /// </summary> /// <param name="unit"></param> /// <returns>成功返回真,失败返回假</returns> public bool PlaceUnit(Unit unit) { if (Unit != null) return false; if (unit.Position != null) { unit.Position.Unit = null; } Unit = unit; unit.Position = this; return true; }
/// <summary> /// 攻击指令,如果不能攻击返回假 /// </summary> /// <param name="target"></param> /// <returns></returns> public bool Attack(Unit target) { if (CanAttack(target) == false) return false; if (ActionState.IsAction == false)//如果没有激活,自动激活 { if (Activate()==false) { return false; } } ActionState.HaveAttack = true; target.Hurt(AttackPower.Current); return true; }
public ActiveSkill(Unit unit) : base(unit) { useType = UseType.Active; }
public void Register(Unit unit) { master = unit; }
public Skill(Unit unit=null) { master = unit; SetAttribute(); }
public PassiveSkill(Unit unit) : base(unit) { useType = UseType.Passive; }
/// <summary> /// 上战场,把卡片转换为单位。已经召唤过的话会返回空 /// </summary> /// <param name="locate"></param> /// <param name="owner"></param> /// <returns></returns> public Unit ToBattle(int[] locate, Player owner) { if (owner.action.HaveCall == true) return null; if (!GameCore.Chessboard.CellList[locate[0], locate[1]].Owner.Equals(owner.atTeam)) return null;//判断是否有权限 if (GameCore.Chessboard.GetRegion(locate).Unit != null) return null; owner.action.HaveCall = true; Unit x = new Unit(this, locate, owner); return x; }