static void OnMouseEnter(UIComponent component, UIMouseEventParameter eventParam) { UICustomControl instance = component.parent.GetComponent(DPTType) as UICustomControl; object element = GetDPTTargetElement(instance); Overlay.HoveredInfo = element; }
static void DeselectDPT(UICustomControl dpt) { try { ToggleDPTColor(dpt, false); SelectedDPTs.Remove(dpt); } catch { } }
static void SelectDPT(UICustomControl dpt) { try { SetDPTColor(dpt, SELECT_COLOR); SelectedDPTs.Add(dpt); } catch (Exception ex) { Log.Exception(ex); } }
static void OnDragEnd(UIComponent component, UIDragEventParameter eventParam) { try { UICustomControl dpt = GetDPTInParent(component); DPTDrag.OnDragEnd(dpt, eventParam); } catch (Exception ex) { Log.Exception(ex); } }
public static void SetDPTColor(UICustomControl dpt, Color c) { var m_SelectButton = GetDPTSelectButton(dpt); m_SelectButton.color = c; m_SelectButton.focusedColor = c; m_SelectButton.hoveredColor = c; m_SelectButton.pressedColor = c; m_SelectButton.disabledColor = c; }
public static void OnToggleDPT(UICustomControl dpt) { VerifySelectedDPTs(dpt); if (IsDPTSelected(dpt)) { DeselectDPT(dpt); } else { SelectDPT(dpt); } }
/// <summary> /// verifies selected DPTs are active and match the input DPT. /// if not a match, it is removed from selection. /// </summary> public static void VerifySelectedDPTs(UICustomControl dpt) { bool predicateRemove(UICustomControl dpt2) { if (!dpt2 || !dpt2.isActiveAndEnabled) { return(true); } var target1 = GetDPTTargetObject(dpt); var target2 = GetDPTTargetObject(dpt2); Log.Debug($"target1={target1} and target2={target2}"); return(target1 != target2); } var removeDPTs = SelectedDPTs.Where(predicateRemove).ToList(); foreach (var dpt3 in removeDPTs) { DeselectDPT(dpt3); } }
public static void OnDragEnd(UICustomControl dpt, UIDragEventParameter e) { try { LogCalled(); e.Use(); GameObject.Destroy(Bar?.gameObject); Bar = null; foreach (var selectedDPT in RoadEditorUtils.SelectedDPTsSorted) { selectedDPT.component.isEnabled = true; selectedDPT.component.opacity = 1; } var groupPanel = dpt.GetComponentInParent <RoadEditorCollapsiblePanel>(); groupPanel.m_Panel.eventDragLeave -= OnLeave; groupPanel.m_Panel.eventDragEnter -= OnEnter; groupPanel.m_Panel.eventDragOver -= OnOver; groupPanel.m_Panel.eventDragDrop -= OnDrop; } catch (Exception ex) { Log.Exception(ex); } }
public static void OnDragStart(UICustomControl dpt, UIDragEventParameter eventParam) { if (RoadEditorUtils.IsDPTSelected(dpt)) { LogCalled(); eventParam.Use(); eventParam.state = UIDragDropState.Dragging; var groupPanel = dpt.GetComponentInParent <RoadEditorCollapsiblePanel>(); groupPanel.m_Panel.eventDragLeave -= OnLeave; groupPanel.m_Panel.eventDragEnter -= OnEnter; groupPanel.m_Panel.eventDragOver -= OnOver; groupPanel.m_Panel.eventDragDrop -= OnDrop; groupPanel.m_Panel.eventDragLeave += OnLeave; groupPanel.m_Panel.eventDragEnter += OnEnter; groupPanel.m_Panel.eventDragOver += OnOver; groupPanel.m_Panel.eventDragDrop += OnDrop; Log.Debug("creating `Add from template` button"); Bar = groupPanel.Container.AddUIComponent <UIPanel>(); Bar.width = groupPanel.m_Panel.width; Bar.height = 1; Bar.backgroundSprite = "TextFieldPanel"; Bar.atlas = KianCommons.UI.TextureUtil.Ingame; Bar.color = Color.red; Bar.name = "ARDragPointer"; Bar.Show(); Bar.zOrder = CalculateZOrder(groupPanel, eventParam); Bar.zOrder = CalculateZOrder(groupPanel, eventParam); // disable moving dpts foreach (var selectedDPT in RoadEditorUtils.SelectedDPTs) { selectedDPT.component.isEnabled = false; selectedDPT.component.opacity = 0.5f; } } }
static void OnMouseUp(UIComponent component, UIMouseEventParameter eventParam) { try { UICustomControl dpt = GetDPTInParent(component); bool right = eventParam.buttons == UIMouseButton.Right; bool left = eventParam.buttons == UIMouseButton.Left; bool ctrl = HelpersExtensions.ControlIsPressed; if (ctrl && left) { OnToggleDPT(dpt); } if (!ctrl && left) { DeselectAllDPTs(); } if (right) { OnDPTMoreOptions(dpt); } }catch (Exception ex) { Log.Exception(ex); } }
internal static void ToggleDPTColor(UICustomControl dpt, bool selected) => GetMethod("ToggleColor").Invoke(dpt, new object[] { selected });
/// <summary>gets the array field(m_field)</summary> internal static FieldInfo GetDPTField(UICustomControl dpt) => dpt.GetFieldValue <object>("m_Field") as FieldInfo;
/// <summary>gets the object that contains the array (m_field)</summary> internal static object GetDPTTargetObject(UICustomControl dpt) => dpt.GetFieldValue <object>("m_TargetObject");
internal static UIButton GetDPTSelectButton(UICustomControl dpt) => dpt.GetFieldValue <UIButton>("m_SelectButton");
static T GetFieldValue <T>(this UICustomControl dpt, string name) { Assertion.Assert(dpt.GetType() == DPTType); return((T)ReflectionHelpers.GetFieldValue(dpt, name)); }
public static void OnDPTMoreOptions(UICustomControl dpt) { Log.Debug("OnDPTMoreOptions() called"); VerifySelectedDPTs(dpt); if (!SelectedDPTs.Contains(dpt)) { DeselectAllDPTs(); } var groupPanel = dpt.GetComponentInParent <RoadEditorCollapsiblePanel>(); var sidePanel = dpt.GetComponentInParent <RoadEditorPanel>(); Log.Debug($"dpt={dpt} " + $"groupPanel={groupPanel} " + $"sidePanel={sidePanel}"); object target = GetDPTTargetObject(dpt); object element = GetDPTTargetElement(dpt); IEnumerable <object> elements; if (SelectedDPTs.Any()) { elements = SelectedDPTs.Select(_dpt => GetDPTTargetElement(_dpt)); } else { elements = new object[] { element } }; if (target is NetLaneProps netLaneProps && element is NetLaneProps.Prop) { var lane = sidePanel.GetTarget() as NetInfo.Lane; Assertion.AssertNotNull(lane, "sidePanel.target is lane"); bool forward = lane.IsGoingForward(); bool backward = lane.IsGoingBackward(); bool unidirectional = forward || backward; var panel = MiniPanel.Display(); var f_props = typeof(NetLaneProps).GetField(nameof(NetLaneProps.m_props)); var original_props = elements.Select(_p => _p as NetLaneProps.Prop); var cloned_props = original_props.Select(_p => _p.Clone()); string strAll = cloned_props.Count() > 1 ? " all" : ""; panel.AddButton("Duplicate" + strAll, null, delegate() { AddProps(groupPanel, cloned_props.ToArray()); }); if (cloned_props.Any(_p => _p.CanInvert())) { string hint = HintExtension.GetHintSwichLHT_RHT(unidirectional); panel.AddButton( "LHT duplicate" + strAll, hint, delegate() { try { var arProsp = cloned_props.ToArray(); foreach (var item in arProsp) { item.ToggleRHT_LHT(unidirectional); } AddProps(groupPanel, arProsp); } catch (Exception ex) { Log.Exception(ex); } }); } panel.AddButton("Copy" + strAll, null, delegate() { ClipBoard.SetData(cloned_props); }); panel.AddButton("Copy" + strAll + " to other elevations", null, delegate() { foreach (var item in cloned_props) { PropHelpers.CopyPropsToOtherElevations(item); } }); panel.AddButton("Add" + strAll + " to Template", null, delegate() { SaveTemplatePanel.Display(cloned_props); }); if (cloned_props.Count() >= 2) { panel.AddButton("Displace all", null, delegate() { DisplaceAll(original_props); }); } }
public static bool IsDPTSelected(UICustomControl dpt) => SelectedDPTs.Contains(dpt);
public static InstanceID GetInstanceID(UICustomControl control) { return((InstanceID)control.GetType() .GetField("m_InstanceID", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(control)); }