Exemplo n.º 1
0
        private void OnEnable()
        {
            part = target as MonoPart;

            if (part.RootPort.IsExists())
            {
                rootPort = (MonoPort)part.RootPort;
            }
            else             // 如果该部件没有根接口..
            {
                Debug.Log("Adding root port");
                // 尝试在其子对象中寻找根接口
                rootPort = part.transform.Find("RootPort")?.GetComponent <MonoPort>();

                // 如果没有..
                if (rootPort == null)
                {
                    // 新创建一个
                    rootPort = new GameObject("RootPort").AddComponent <BasicPort>();
                    rootPort.transform.parent        = part.transform;
                    rootPort.transform.localPosition = Vector3.zero;
                }

                // 将根部件加入到部件上
                part.AddPort(rootPort, true);
            }
        }
Exemplo n.º 2
0
        public override void OnInspectorGUI()
        {
            DrawDefaultInspector();

            if (GUILayout.Button("添加接口"))
            {
                var count = part.PortCount;
                var port  = new GameObject($"Port{count}").AddComponent <BasicPort>();
                port.transform.parent        = part.transform;
                port.transform.localPosition = Vector3.zero;
                if (!part.AddPort(port))
                {
                    Debug.LogWarning("添加新接口失败!");
                    DestroyImmediate(port.gameObject);
                }
            }

            if (GUILayout.Button("添加辅助接口"))
            {
                var count = part.PortCount;
                var port  = new GameObject($"AsstPort{count}").AddComponent <AssistantPort>();
                port.transform.parent        = part.transform;
                port.transform.localPosition = Vector3.zero;
                if (!part.AddPort(port))
                {
                    Debug.LogWarning("添加新接口失败!");
                    DestroyImmediate(port.gameObject);
                }
            }

            if (selectedPort != null && selectedPort.IsExists())
            {
                if (GUILayout.Button("移除接口"))
                {
                    if (!part.RemovePort(selectedPort))
                    {
                        Debug.LogWarning("移除接口失败!");
                    }
                    else
                    {
                        DestroyImmediate(selectedPort.gameObject);
                        selectedPort = null;
                    }
                }
                else
                {
                    if (!serializedPort.IsExists())
                    {
                        GetSelectedPortInfo();
                    }
                    DrawSelectedPortInspector();
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 绘制端口
        /// </summary>
        /// <param name="port"></param>
        void DrawPort(MonoPort port, Color color)
        {
            if (port == null)
            {
                return;
            }
            Handles.color = color;
            Vector3 position = port.transform.position;

            //float size = HandleUtility.GetHandleSize(position);

            DrawDirectionArrow(position, port.transform.rotation, 0.1f);
            if (Handles.Button(position, Quaternion.identity, kPortSize, kPortPickSize, Handles.DotHandleCap))
            {
                selectedPort = port;
                GetSelectedPortInfo();
                Repaint();
            }

            if (selectedPort == port)
            {
                var rotation = port.transform.rotation;

                if (selectedPort.IsAssistantPort)
                {
                    Handles.Label(position + new Vector3(-0.05f, 0.05f), $"接口名称:{port.name}");
                }
                else
                {
                    Handles.Label(position + new Vector3(-0.05f, 0.05f), $"接口名称:{port.name}\n可接纳部件类型:{portAcceptedType}");
                }

                EditorGUI.BeginChangeCheck();
                rotation = Handles.DoRotationHandle(rotation, position);
                position = Handles.FreeMoveHandle(position, rotation, kPortPickSize, Vector3.one * 0.1f, Handles.DotHandleCap);
                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(port, "Move port");
                    EditorUtility.SetDirty(port);
                    port.transform.position = position;
                    port.transform.rotation = rotation;
                    position      = part.transform.InverseTransformPoint(position);
                    position.z    = rotation.eulerAngles.z;
                    port.Position = position;
                    Repaint();
                }
            }
        }
Exemplo n.º 4
0
        protected override void Awake()
        {
            base.Awake();

            if (asstPortList.Count <= 0)
            {
                Debug.LogError($"该枪管 {PartName} 需要至少一个辅助接口作为射弹口.");
                return;
            }

            foreach (MonoPort p in asstPortList)
            {
                if (p != null)
                {
                    FirePort = p;
                    break;
                }
            }
        }