internal bool UseSkill(Character invoker, MonsterSkillType skill, Point target) { // Find the method implementing the skill MethodInfo skillMethod = GetType().GetMethod("Handle" + skill.ToString(), BindingFlags.NonPublic | BindingFlags.Instance); // And invoke it return (bool)skillMethod.Invoke(this, new object[] { invoker, skill, target }); }
public MonsterSkill( string id, string name, MonsterSkillType skillType, MonsterSkillTargetType targetType, int range, int charge, EffectType effectType, string overview) { this.Id = id; this.Name = name; this.MonsterSkillType = skillType; this.MonsterSkillTargetType = targetType; this.Range = range; this.Charge = charge; this.EffectType = effectType; this.Overview = overview; }
private bool HandleDoubleSwing(Character invoker, MonsterSkillType skill, Point target) { Character targetCharacter = ValidTarget(invoker, target, 1); if (targetCharacter == null) return false; // If we get here, it's a valid double swing. Attack two times in a row. CoreGameEngine.Instance.SendTextOutput(String.Format("{0} wildly swings at {1} twice.", invoker.Name, targetCharacter.Name)); m_engine.Attack(invoker, target); m_engine.Attack(invoker, target); return true; }
private bool HandleRush(Character invoker, MonsterSkillType skill, Point target) { Character targetCharacter = ValidTarget(invoker, target, 2); if (targetCharacter == null) return false; // If we get here, it's a valid rush. Move towards target and attack at reduced time cost. CoreGameEngine.Instance.SendTextOutput(String.Format("{0} rushes towards {1} and attacks.", invoker.Name, targetCharacter.Name)); List<Point> pathToPoint = CoreGameEngine.Instance.PathToPoint(invoker, target, false, false, true); m_engine.Move(invoker, PointDirectionUtils.ConvertTwoPointsToDirection(invoker.Position, pathToPoint[0])); m_engine.Attack(invoker, target); return true; }
private bool HandleFirstAid(Character invoker, MonsterSkillType skill, Point target) { Character targetCharacter = ValidTargetLessThanOrEqualTo(invoker, target, 1); if (targetCharacter == null) return false; // If we get here, it's a valid first aid. Increase target's HP by amount string targetString = targetCharacter == invoker ? "themself" : "the " + targetCharacter.Name; CoreGameEngine.Instance.SendTextOutput(String.Format("The {0} applies some fast combat medicine on {1}.", invoker.Name, targetString)); int amountToHeal = (new DiceRoll(4, 3)).Roll(); targetCharacter.Heal(amountToHeal, false); CoreGameEngine.Instance.Wait(invoker); return true; }
private bool HandleSlingStone(Character invoker, MonsterSkillType skill, Point target) { Character targetCharacter = ValidTargetLessThanOrEqualTo(invoker, target, SlingDistance); if (targetCharacter == null) return false; List<Point> targetList = new List<Point>() { target }; CoreGameEngine.Instance.FilterNotTargetablePointsFromList(targetList, invoker.Position, invoker.Vision, true); CoreGameEngine.Instance.FilterNotVisibleBothWaysFromList(invoker.Position, targetList); if (targetList.Count < 1) return false; CoreGameEngine.Instance.SendTextOutput(String.Format("{0} slings a stone at {1}.", invoker.Name, targetCharacter.Name)); CoreGameEngine.Instance.CombatEngine.RangedBoltToLocation(invoker, target, (new DiceRoll(5, 3)).Roll(), null, null); // Rest to pass a turn CoreGameEngine.Instance.Wait(invoker); return true; }
/// <summary> /// スキルの色のスプライトを取得 /// </summary> /// <param name="skillType"></param> /// <returns></returns> private Sprite GetSkillColorImageSprite(MonsterSkillType skillType) { // キャッシュから取得 bool exists = skillColorSpriteDic.ContainsKey(skillType); if (exists) { return(skillColorSpriteDic[skillType]); } // パスを作成 string typeStr = "red"; if (skillType == MonsterSkillType.COUNTER) { typeStr = "blue"; } string imagePath = IMAGE_SKILL_COLOR_RESOURCE_PREFIX + typeStr; // スプライトを取得 return(Resources.Load <Sprite>(imagePath)); }
public bool UseSkill(ICharacterCore invoker, MonsterSkillType skill, Point target) { return UseSkill((Character)invoker, skill, target); }
internal bool UseMonsterSkill(Character invoker, MonsterSkillType skill, Point target) { return m_monsterSkillEngine.UseSkill(invoker, skill, target); }