Пример #1
0
        static void OnMouseEnter(UIComponent component, UIMouseEventParameter eventParam)
        {
            UICustomControl instance = component.parent.GetComponent(DPTType) as UICustomControl;
            object          element  = GetDPTTargetElement(instance);

            Overlay.HoveredInfo = element;
        }
Пример #2
0
 static void DeselectDPT(UICustomControl dpt)
 {
     try {
         ToggleDPTColor(dpt, false);
         SelectedDPTs.Remove(dpt);
     } catch { }
 }
Пример #3
0
 static void SelectDPT(UICustomControl dpt)
 {
     try {
         SetDPTColor(dpt, SELECT_COLOR);
         SelectedDPTs.Add(dpt);
     } catch (Exception ex) {
         Log.Exception(ex);
     }
 }
Пример #4
0
 static void OnDragEnd(UIComponent component, UIDragEventParameter eventParam)
 {
     try {
         UICustomControl dpt = GetDPTInParent(component);
         DPTDrag.OnDragEnd(dpt, eventParam);
     } catch (Exception ex) {
         Log.Exception(ex);
     }
 }
Пример #5
0
        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;
        }
Пример #6
0
 public static void OnToggleDPT(UICustomControl dpt)
 {
     VerifySelectedDPTs(dpt);
     if (IsDPTSelected(dpt))
     {
         DeselectDPT(dpt);
     }
     else
     {
         SelectDPT(dpt);
     }
 }
Пример #7
0
        /// <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);
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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;
                }
            }
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
 internal static void ToggleDPTColor(UICustomControl dpt, bool selected) =>
 GetMethod("ToggleColor").Invoke(dpt, new object[] { selected });
Пример #12
0
 /// <summary>gets the array field(m_field)</summary>
 internal static FieldInfo GetDPTField(UICustomControl dpt) =>
 dpt.GetFieldValue <object>("m_Field") as FieldInfo;
Пример #13
0
 /// <summary>gets the object that contains the array (m_field)</summary>
 internal static object GetDPTTargetObject(UICustomControl dpt) =>
 dpt.GetFieldValue <object>("m_TargetObject");
Пример #14
0
 internal static UIButton GetDPTSelectButton(UICustomControl dpt) =>
 dpt.GetFieldValue <UIButton>("m_SelectButton");
Пример #15
0
 static T GetFieldValue <T>(this UICustomControl dpt, string name)
 {
     Assertion.Assert(dpt.GetType() == DPTType);
     return((T)ReflectionHelpers.GetFieldValue(dpt, name));
 }
Пример #16
0
        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);
                    });
                }
            }
Пример #17
0
 public static bool IsDPTSelected(UICustomControl dpt) => SelectedDPTs.Contains(dpt);
Пример #18
0
 public static InstanceID GetInstanceID(UICustomControl control)
 {
     return((InstanceID)control.GetType()
            .GetField("m_InstanceID", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(control));
 }