// [根據技能種類執行不同動作] // 在場上顯示技能效果. // 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; } }
// 在家附近巡邏.不會離太遠. private void Patrol(Creater home) { Point2D temp = this.posit.Copy(); Vector2D target = RandomVector(10); for (int i = 0; i < 4; ++i) { temp.MoveFor(target, 1); if (temp.DistanceTo(home.position) > patrolDist) { temp.MoveFor(target, -1); target = VectorConvert.Rotate(target); } else { moveCommamd = Convert(target); return; } } skillCommand = SkillCommand.None; patrolDist = this.posit.DistanceTo(home.position); }