public override InputReturns MouseRightDown(StateControls stateControls) { //true if you click a gate if (new BoxCollider(stateControls.LocalMousePosition.X, stateControls.LocalMousePosition.Y, 0, 0).GetIntersections(stateControls.State, (true, true, true), out _, out var boardObjects, false)) { BoardObject clickedBoardObject = boardObjects.First(); selections.Clear(); selections.Add(clickedBoardObject); //Load [CircuitActions] var actions = CircuitAttributes.GetActions(clickedBoardObject, RefreshSelections, stateControls.RegisterChange); stateControls.CircuitActionsOutput = actions; return(true, this); } return(false, this); }
/// <summary> /// Returns a list of updated CircuitProperties to be passed into the StateControls /// </summary> public CircuitPropertyCollection GetUpdatedCircuitProperties(Action <string> registerChange) { if (!selections.SetEquals(oldSelections)) { CircuitPropertyCollection circuitProperties = CircuitPropertyCollection.Empty; oldSelections.Clear(); oldSelections.UnionWith(selections); foreach (var selection in selections) { circuitProperties.Intersect(CircuitAttributes.GetProperties(selection, registerChange)); } return(circuitProperties); } return(null); }
/// <summary> /// Propogates hotkey through all selected CircuitObjects and runs any valid [CircuitProperties] /// </summary> protected bool ExecuteHotkey(BoardState state, char?key, Modifier Modifiers, Action <string> registerChange, out CircuitPropertyCollection circuitProperties) { CircuitActionCollection actions = CircuitActionCollection.Empty; //Find all actions foreach (var selection in selections) { actions.UnionWith(CircuitAttributes.GetActions(selection, RefreshSelections, registerChange)); } char hotkey = (char)key; //Execute matches bool toRefresh = actions.InvokeHotkeyActions(state, hotkey, Modifiers); circuitProperties = GetUpdatedCircuitProperties(registerChange); return(toRefresh); }