internal Spell(string name, string school, string effectType, int cost, TargetingInfo.TargettingType targettingType, int range, DiceRoll baseDamage, DiceRoll damagePerLevel) { m_name = name; m_effectType = effectType; m_cost = cost; m_school = school; m_targettingType = targettingType; m_range = range; BaseDamage = baseDamage; DamagePerLevel = damagePerLevel; }
internal void HandleInvoke(object invokingObject, TargetingInfo targetInfo, OnKeyboardInvoke onInvoke, NamedKey invokeKey) { if (targetInfo == null) { onInvoke(m_engine.Player.Position); m_gameInstance.ResetHandlerName(); m_gameInstance.UpdatePainters(); return; } else { switch (targetInfo.Type) { case TargetingInfo.TargettingType.Stream: { List<EffectivePoint> targetablePoints = PointListUtils.EffectivePointListOneStepAllDirections(m_engine.Player.Position); HandleRangedSinglePointInvoke(invokingObject, targetablePoints, onInvoke, invokeKey); return; } case TargetingInfo.TargettingType.RangedSingle: case TargetingInfo.TargettingType.RangedBlast: case TargetingInfo.TargettingType.RangedExplodingPoint: { List<EffectivePoint> targetablePoints = PointListUtils.EffectivePointListFromBurstPosition(m_engine.Player.Position, targetInfo.Range); HandleRangedSinglePointInvoke(invokingObject, targetablePoints, onInvoke, invokeKey); return; } case TargetingInfo.TargettingType.Cone: { Point playerPosition = m_engine.Player.Position; List<EffectivePoint> targetablePoints = GetConeTargetablePoints(playerPosition); OnTargetSelection selectionDelegate = new OnTargetSelection(s => { if (s != m_engine.Player.Position) onInvoke(s); return false; }); m_gameInstance.SetHandlerName("Target", new TargettingKeystrokeRequest(targetablePoints, selectionDelegate, NamedKey.Invalid, TargettingKeystrokeHandler.TargettingType.Monster, p => m_engine.Targetting.TargettedDrawablePoints(invokingObject, p))); return; } case TargetingInfo.TargettingType.Self: { onInvoke(m_engine.Player.Position); m_gameInstance.ResetHandlerName(); m_gameInstance.UpdatePainters(); return; } default: throw new System.InvalidOperationException("InvokingKeystrokeHandler - HandleInvoke, don't know how to handle: " + targetInfo.Type.ToString()); } } }
internal List<Point> TargettedDrawablePoints(TargetingInfo targeting, int strength, Point target) { switch (targeting.Type) { case TargetingInfo.TargettingType.Stream: { List<Point> returnList = m_physicsEngine.GenerateBlastListOfPoints(CoreGameEngine.Instance.Map, CoreGameEngine.Instance.Player.Position, target, false); // 5 being the stream length - XXX where better to put this? TrimPath(5, returnList); Point playerPosition = CoreGameEngine.Instance.Player.Position; m_physicsEngine.FilterNotTargetablePointsFromList(returnList, playerPosition, CoreGameEngine.Instance.Player.Vision, true); return returnList; } case TargetingInfo.TargettingType.RangedBlast: { List<Point> returnList = m_physicsEngine.GenerateBlastListOfPointsShowBounceIfSeeWall(CoreGameEngine.Instance.Map, CoreGameEngine.Instance.Player, target); TrimPathDueToSpellLength(strength, returnList); return returnList; } case TargetingInfo.TargettingType.Cone: { Point playerPosition = CoreGameEngine.Instance.Player.Position; Direction direction = PointDirectionUtils.ConvertTwoPointsToDirection(playerPosition, target); List<Point> returnList = PointListUtils.PointListFromCone(playerPosition, direction, 3); m_physicsEngine.FilterNotTargetablePointsFromList(returnList, playerPosition, CoreGameEngine.Instance.Player.Vision, true); CoreGameEngine.Instance.FilterNotVisibleBothWaysFromList(target, returnList); return returnList; } case TargetingInfo.TargettingType.RangedExplodingPoint: { List<Point> returnList = PointListUtils.PointListFromBurstPosition(target, 2); m_physicsEngine.FilterNotTargetablePointsFromList(returnList, CoreGameEngine.Instance.Player.Position, CoreGameEngine.Instance.Player.Vision, true); CoreGameEngine.Instance.FilterNotVisibleBothWaysFromList(target, returnList); return returnList; } case TargetingInfo.TargettingType.RangedSingle: case TargetingInfo.TargettingType.Self: default: return null; } }
private void HandleInvoke(TargetingInfo targetInfo, OnTargettingPointSelected onInvoke, object invokingObject) { if (targetInfo == null) { onInvoke(m_engine.Player.Position); m_window.UpdateWorld(); } else { switch (targetInfo.Type) { case TargetingInfo.TargettingType.Stream: { List<EffectivePoint> targetablePoints = PointListUtils.EffectivePointListOneStepAllDirections(m_engine.Player.Position); HandleRangedSinglePointInvoke(onInvoke, targetablePoints); break; } case TargetingInfo.TargettingType.RangedSingle: case TargetingInfo.TargettingType.RangedBlast: case TargetingInfo.TargettingType.RangedExplodingPoint: { List<EffectivePoint> targetablePoints = PointListUtils.EffectivePointListFromBurstPosition(m_engine.Player.Position, targetInfo.Range); HandleRangedSinglePointInvoke(onInvoke, targetablePoints); break; } case TargetingInfo.TargettingType.Cone: { MageCrawlPoint playerPosition = m_engine.Player.Position; List<EffectivePoint> targetablePoints = GetConeTargetablePoints(playerPosition); OnTargetSelect selectionDelegate = (w, e, p) => { if (p != m_engine.Player.Position) onInvoke(p); }; TargettingModeKeyboardHandler handler = new TargettingModeKeyboardHandler(TargettingModeKeyboardHandler.TargettingType.Monster, m_engine, m_map, selectionDelegate, targetablePoints); m_window.SetKeyboardHandler(handler.OnKeyboardDown); break; } case TargetingInfo.TargettingType.Self: { onInvoke(m_engine.Player.Position); m_window.UpdateWorld(); break; } default: throw new System.InvalidOperationException("InvokingKeystrokeHandler - HandleInvoke, don't know how to handle: " + targetInfo.Type.ToString()); } } }