public override void NowPrimaried(object request)
        {
            TargettingKeystrokeRequest targettingRequest = (TargettingKeystrokeRequest)request;
            m_targetablePoints = targettingRequest.TargetablePoints;
            m_selectionDelegate = targettingRequest.SelectionDelegate;

            if (m_selectionDelegate == null)
                throw new ArgumentNullException("Selection delegate for targetting must not be null");
            
            m_alternateSelectionKey = targettingRequest.AlternateSelectionKey;

            m_targettingType = targettingRequest.TargettingType;

            SelectionPoint = SetTargettingInitialSpot(m_engine);

            EnablePlayerTargeting enableRequest = new EnablePlayerTargeting(true, m_targetablePoints);
            if (targettingRequest.HaloDelegate != null)
                enableRequest.HaloDelegate = x => targettingRequest.HaloDelegate(x);

            m_gameInstance.SendPaintersRequest(enableRequest);
            m_gameInstance.SendPaintersRequest(new EnableMapCursor(true, SelectionPoint));

            // If we have no targetable points, just exit now
            if (m_targetablePoints.Count == 0)
                Escape();

            m_gameInstance.UpdatePainters();
        }
 public TargettingKeystrokeRequest(List<EffectivePoint> targetablePoints, OnTargetSelection selectionDelegate, NamedKey alternateSelectionKey, TargettingKeystrokeHandler.TargettingType targettingType, PlayerTargettingHaloDelegate haloDelegate)
 {
     TargetablePoints = targetablePoints;
     TargettingType = targettingType;
     SelectionDelegate = selectionDelegate;
     AlternateSelectionKey = alternateSelectionKey;
     HaloDelegate = haloDelegate;
 }
 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());
         }
     }
 }
        private void HandleRangedSinglePointInvoke(object invokingObject, List<EffectivePoint> targetablePoints, OnKeyboardInvoke onInvoke, NamedKey invokeKey)
        {
            m_engine.Targetting.FilterNotTargetableToPlayerPointsFromList(targetablePoints, true);
            m_engine.Targetting.FilterNotVisibleToPlayerBothWaysFromList(targetablePoints, true);

            OnTargetSelection selectionDelegate = new OnTargetSelection(s =>
            {
                if (s != m_engine.Player.Position)
                    onInvoke(s);
                return false;
            });
            m_gameInstance.SetHandlerName("Target", new TargettingKeystrokeRequest(targetablePoints, selectionDelegate, invokeKey,
                TargettingKeystrokeHandler.TargettingType.Monster, p => m_engine.Targetting.TargettedDrawablePoints(invokingObject, p)));
        }
        private void Escape()
        {
            m_gameInstance.SendPaintersRequest(new EnableMapCursor(false));
            m_gameInstance.SendPaintersRequest(new EnablePlayerTargeting(false));
            m_selectionDelegate = null;
            m_gameInstance.UpdatePainters();

            if (!m_doNotResetHandler)
                m_gameInstance.ResetHandlerName();
            m_doNotResetHandler = false;
        }
 public TargettingKeystrokeRequest(List<EffectivePoint> targetablePoints, OnTargetSelection selectionDelegate, NamedKey alternateSelectionKey, TargettingKeystrokeHandler.TargettingType targettingType)
     : this(targetablePoints, selectionDelegate, alternateSelectionKey, targettingType, null)
 {
 }
Esempio n. 7
0
 public void Operate(NamedKey operateKey)
 {
     List<EffectivePoint> targetPoints = CalculateOperatePoints();
     if ((bool)Preferences.Instance["SinglePressOperate"] && targetPoints.Count == 1)
     {
         m_engine.Actions.Operate(targetPoints[0].Position);
         m_gameInstance.UpdatePainters();
     }
     else
     {
         OnTargetSelection operateDelegate = new OnTargetSelection(OnOperate);
         m_gameInstance.SetHandlerName("Target", new TargettingKeystrokeRequest(targetPoints, operateDelegate, operateKey, TargettingKeystrokeHandler.TargettingType.Operatable));
     }
 }