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) { }
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)); } }