Example #1
0
        public void TargetGUI(Follow instance)
        {
            Event evt       = Event.current;
            Rect  drop_area = GUILayoutUtility.GetRect(0.0f, 50.0f, GUILayout.ExpandWidth(true));

            GUI.Box(drop_area, "Drag Target Objects Here");

            for (int i = 0; i < instance.targets.Count; i++)
            {
                DrawPrefabIcon(instance, i);
            }

            switch (evt.type)
            {
            case EventType.DragUpdated:
            case EventType.DragPerform:
                if (!drop_area.Contains(evt.mousePosition))
                {
                    return;
                }

                DragAndDrop.visualMode = DragAndDropVisualMode.Generic;

                if (evt.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    foreach (GameObject prefab in DragAndDrop.objectReferences)
                    {
                        instance.AddTarget(prefab.transform);
                    }
                }
                break;
            }
        }
Example #2
0
        private void DrawPrefabIcon(Follow instance, int id)
        {
            EditorGUILayout.BeginHorizontal();
            instance.targets[id] = (Transform)EditorGUILayout.ObjectField(instance.targets[id], typeof(Transform), true);

            GUI.color = Color.red;
            if (GUILayout.Button("X"))
            {
                instance.targets.RemoveAt(id);
            }
            GUI.color = Color.white;

            EditorGUILayout.EndHorizontal();
        }
Example #3
0
        public override void OnInspectorGUI()
        {
            Follow instance = (Follow)target;

            instance.updateState = (UpdateState)EditorGUILayout.EnumPopup("Update Type", instance.updateState);
            instance.followState = (FollowStates)EditorGUILayout.EnumPopup("Follow Type", instance.followState);

            switch (instance.followState)
            {
            case FollowStates.Me:
                EditorGUILayout.HelpBox("All of the target objects will follow this transform.", MessageType.Info);
                break;

            case FollowStates.You:
                EditorGUILayout.HelpBox("This transform will follow the target transform.", MessageType.Info);
                break;

            case FollowStates.Mean:
                EditorGUILayout.HelpBox("This transform will follow the center point of all of the targets.", MessageType.Info);
                break;
            }

            instance.followPosition = EditorGUILayout.Toggle("Follow Position", instance.followPosition);
            instance.followRotation = EditorGUILayout.Toggle("Follow Rotation", instance.followRotation);

            instance.positionSmoothTime = EditorGUILayout.FloatField("Position Smooth Time", instance.positionSmoothTime);
            instance.rotationSmoothTime = EditorGUILayout.FloatField("Rotation Smooth Time", instance.rotationSmoothTime);

            switch (instance.followState)
            {
            case FollowStates.Me:
                TargetGUI(instance);
                break;

            case FollowStates.You:

                if (instance.targets.Count < 1)
                {
                    instance.targets.Add(null);
                }

                EditorGUILayout.PrefixLabel("Target");
                instance.targets[0] = (Transform)EditorGUILayout.ObjectField(instance.targets[0], typeof(Transform), true);
                break;

            case FollowStates.Mean:
                TargetGUI(instance);
                break;
            }
        }