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();
        }
 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)));
        }
 public override void HandleKeystroke(NamedKey keystroke)
 {
     // If we match the alternate key, call Select()
     if (m_alternateSelectionKey != NamedKey.Invalid && m_alternateSelectionKey == keystroke)
     {
         Select();
         return;
     }
     MethodInfo action;
     m_keyMappings.TryGetValue(keystroke, out action);
     if (action != null)
     {
         try
         {
             action.Invoke(this, null);
         }
         catch (Exception e)
         {
             throw e.InnerException;
         }
     }
 }
        public void HandleKeyStroke()
        {
            TCODKey key = TCODConsole.checkForKeypress((int)TCODKeyStatus.KeyPressed);

            NamedKey namedKey;

            // Some keys, like backspace, space, and tab have both a character and a code. We only stick one in the dictionary
            // Strip the other one out.
            if (key.KeyCode == TCODKeyCode.Char)
                namedKey = new NamedKey() { Character = (char)key.Character,
                                            Code = TCODKeyCode.Char,
                                            ControlPressed = (key.LeftControl | key.RightControl),
                                            ShiftPressed = key.Shift,
                                            AltPressed = (key.LeftAlt | key.RightAlt) };
            else
                namedKey = new NamedKey() { Character = (char)0,
                                            Code = key.KeyCode,
                                            ControlPressed = (key.LeftControl | key.RightControl),
                                            ShiftPressed = key.Shift,
                                            AltPressed = (key.LeftAlt | key.RightAlt) };

            m_currentHandler.HandleKeystroke(namedKey);
        }
Exemple #6
0
 public void MoveToLocation(NamedKey movementKey)
 {
     List<EffectivePoint> targetPoints = GeneratePointsOneCanMoveTo();
     m_gameInstance.SetHandlerName("Target", new TargettingKeystrokeRequest(targetPoints, OnMovementLocationSelected, movementKey, TargettingKeystrokeHandler.TargettingType.OpenFloor));
 }
Exemple #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));
     }
 }
Exemple #8
0
 public void MoveToLocation(NamedKey movementKey)
 {
     m_autoTraveler.MoveToLocation(movementKey);
 }
Exemple #9
0
 public void Attack(NamedKey attackKey)
 {
     if (m_engine.Player.CurrentWeapon.IsRanged && !m_engine.Player.CurrentWeapon.IsLoaded)
     {
         m_engine.Actions.ReloadWeapon();
         m_gameInstance.TextBox.AddText(string.Format("{0} reloads the {1}.", m_engine.Player.Name, m_engine.Player.CurrentWeapon.DisplayName));
     }
     else
     {
         List<EffectivePoint> targetPoints = m_engine.GameState.CalculateTargetablePointsForEquippedWeapon();
         m_gameInstance.SetHandlerName("Target", new TargettingKeystrokeRequest(targetPoints, OnRangedAttack, attackKey, TargettingKeystrokeHandler.TargettingType.Monster));
     }
 }
        private void ReadFileCallback(XmlReader reader, object data)
        {
            bool requireAllActions = (bool)data;
            if (reader.LocalName != "KeyMappings")
                throw new System.InvalidOperationException("Bad key mappings file");

            while (true)
            {
                reader.Read();
                if (reader.NodeType == XmlNodeType.EndElement && reader.LocalName == "KeyMappings")
                {
                    break;
                }
                if (reader.LocalName == "KeyMapping")
                {
                    string keyString = reader.GetAttribute("Key");
                    string actionName = reader.GetAttribute("Action");

                    if (isDirectionAction(actionName))
                    {
                        string runSuffix = (bool)Preferences.Instance["UseAltInsteadOfCtrlForRunning"] ? "Alt" : "Control";
                        FindAndAddKeyHandler(requireAllActions, keyString + runSuffix, "Run" + actionName);
                        m_actionKeyMapping["Run" + actionName] = new NamedKey(keyString + runSuffix);
                    }
                    if (actionName == "ChangeTabs")
                    {
                        FindAndAddKeyHandler(requireAllActions, keyString + "Shift", "Shift" + actionName);
                        m_actionKeyMapping["Shift" + actionName] = new NamedKey(keyString + "Shift");
                    }

                    m_actionKeyMapping[actionName] = new NamedKey(keyString);
                    FindAndAddKeyHandler(requireAllActions, keyString, actionName);
                }
            }
        }
 public virtual void HandleKeystroke(NamedKey keystroke)
 {
     MethodInfo action;
     m_keyMappings.TryGetValue(keystroke, out action);
     if (action != null)
     {
         action.Invoke(this, null);
     }
 }
        private void FindAndAddKeyHandler(bool requireAllActions, string keyString, string actionName)
        {
            MethodInfo action = this.GetType().GetMethod(actionName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);

            if (action != null)
            {
                NamedKey namedKey = new NamedKey(keyString);
                if (m_keyMappings.ContainsKey(namedKey))
                {
                    AddErrorIfNotReported("Error in keymapping - Trying to assign multiple keys to '" + namedKey.ToString() + "'.\n");
                    m_keyMappings.Remove(namedKey);
                }
                m_keyMappings.Add(namedKey, action);
            }
            else if (requireAllActions)
            {
                throw new InvalidOperationException(string.Format("Could not find a mappable operation named {0}.", actionName));
            }
        }