public bool IsOnRange(Range2D range) { Point2D point = new Point2D(this, range.Center.Plain.Dimention); if (!point.IsOnPlain(range.Center.Plain)) { return(false); } return(Math.Abs(point.X.value - range.Center.X.value) <= range.XWidth / 2 && Math.Abs(point.Y.value - range.Center.Y.value) <= range.YWidth / 2); }
// [根據技能種類執行不同動作] // 在場上顯示技能效果. // skill 技能名稱. // userPosition 施術者位置. // userVector 施術者面向方位. private static void showSkill(Skill skill, Point2D userPosition, Vector2D userVector, bool isPlayer) { // 如果和玩家不同平面(玩家看不到),就不會畫圖. if (!userPosition.IsOnPlain(GlobalAsset.player.Plain) || userPosition.DistanceTo(Player.position) > GlobalAsset.seenRange) { return; } switch (skill) { case Skill.attack: showSkill(convert(userPosition), convert(userVector), 1, 1, GlobalAsset.attack); if (isPlayer) { attack.Play(); } break; case Skill.straight: showSkill(convert(userPosition), convert(userVector), 3, 1, GlobalAsset.straight); if (isPlayer) { specialAttack.Play(); } break; case Skill.horizon: showSkill(convert(userPosition), convert(userVector), 1, 3, GlobalAsset.horizon); if (isPlayer) { specialAttack.Play(); } break; case Skill.create: showSkill(convert(userPosition), GlobalAsset.create); if (isPlayer) { build.Play(); } break; } }