コード例 #1
0
ファイル: Spell.cs プロジェクト: donblas/magecrawl
 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;
 }
コード例 #2
0
 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());
         }
     }
 }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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());
                }
            }
        }