Example #1
0
        // ----------------------------------------------------------------------
        // OK
        public static iCS_EditorObject CreateOnExitPackage(iCS_EditorObject parent, Vector2 globalPos)
        {
            if (parent == null)
            {
                return(null);
            }
            var iStorage = parent.IStorage;

            OpenTransaction(iStorage);
            iCS_EditorObject package = null;

            try {
                package = _CreatePackage(parent, globalPos, iCS_Strings.OnExit, VSObjectType.OnStateExit);
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (package == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            package.Description = iCS_ObjectTooltips.OnExit;
            CloseTransaction(iStorage, "Create " + package.DisplayName);
            SystemEvents.AnnounceVisualScriptElementAdded(package);
            return(package);
        }
Example #2
0
        // ----------------------------------------------------------------------
        public static iCS_EditorObject WrapMultiSelectionInPackage(iCS_IStorage iStorage)
        {
            if (iStorage == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var selectedObjects = iStorage.FilterMultiSelectionForWrapInPackage();

            if (selectedObjects == null || selectedObjects.Length == 0)
            {
                return(null);
            }

            iCS_EditorObject package = null;

            OpenTransaction(iStorage);
            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    var childrenRects = P.map(n => n.GlobalRect, selectedObjects);
                    package           = iStorage.WrapInPackage(selectedObjects);
                    if (package != null)
                    {
                        var r   = Math3D.Union(childrenRects);
                        var pos = Math3D.Middle(r);
                        package.SetInitialPosition(Math3D.Middle(r));
                        iStorage.ForcedRelayoutOfTree();
                        package.myAnimatedRect.StartValue = BuildRect(pos, Vector2.zero);
                        for (int i = 0; i < selectedObjects.Length; ++i)
                        {
                            selectedObjects[i].SetInitialPosition(iCS_EditorObject.PositionFrom(childrenRects[i]));
                            selectedObjects[i].LocalSize = iCS_EditorObject.SizeFrom(childrenRects[i]);
                        }
                        iStorage.ForcedRelayoutOfTree();
                        iStorage.ReduceCollisionOffset();
                    }
                    else
                    {
                        Debug.LogWarning("iCanScript: Unable to create a suitable package.");
                    }
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (package == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Wrap Selection");
            SystemEvents.AnnounceVisualScriptElementAdded(package);
            return(package);
        }
Example #3
0
        // ======================================================================
        // Create from Drag & Drop
        // ----------------------------------------------------------------------
        // OK
        public static iCS_EditorObject CreateGameObject(GameObject go, iCS_EditorObject parent, Vector2 globalPos)
        {
#if SHOW_DEBUG
            Debug.Log("iCanScript: Create Game Object => " + go.name);
#endif
            if (parent == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = parent.IStorage;

            iCS_EditorObject instance = null;
            OpenTransaction(iStorage);
            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    parent.Unfold();
                    instance     = iStorage.CreatePackage(parent.InstanceId, go.name, VSObjectType.Package, go.GetType());
                    var thisPort = iStorage.PropertiesWizardGetInputThisPort(instance);
                    if (thisPort != null)
                    {
                        thisPort.Value = go;
                    }
                    instance.SetInitialPosition(globalPos);
                    iStorage.ForcedRelayoutOfTree();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (instance == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create " + go.name);
            SystemEvents.AnnounceVisualScriptElementAdded(instance);
            return(instance);
        }
Example #4
0
        // ======================================================================
        // Instance Object creation.
        // ----------------------------------------------------------------------
        public static iCS_EditorObject CreateObjectInstance(iCS_EditorObject parent, Vector2 globalPos, Type instanceType)
        {
            if (instanceType == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            instanceType = iCS_Types.RemoveRefOrPointer(instanceType);
#if SHOW_DEBUG
            Debug.Log("iCanScript: Create Object Instance => " + instanceType.Name);
#endif
            if (parent == null)
            {
                return(null);
            }
            var iStorage = parent.IStorage;
            var name     = instanceType.Name;
            OpenTransaction(iStorage);
            iCS_EditorObject instance = null;
            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    instance = iStorage.CreateObjectInstance(parent.InstanceId, name, instanceType);
                    instance.SetInitialPosition(globalPos);
                    iStorage.ForcedRelayoutOfTree();
                    iStorage.ReduceCollisionOffset();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (instance == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create " + name);
            SystemEvents.AnnounceVisualScriptElementAdded(instance);
            return(instance);
        }
Example #5
0
        // ----------------------------------------------------------------------
        /// Creates a Unity event handler with Undo capabilities.
        ///
        /// @param parent The parent visual script object.
        /// @param globalPos The layout position for the event handler node.
        /// @param libraryEventHandler The library event handler object.
        /// @return The create Unity event handler node. _null_ on error.
        ///
        public static iCS_EditorObject CreateEventHandler(iCS_EditorObject parent, Vector2 globalPos, LibraryEventHandler libraryEventHandler)
        {
#if SHOW_DEBUG
            Debug.Log("iCanScript: Create Unity EVent Handler => " + libraryEventHandler.displayString);
#endif
            if (parent == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = parent.IStorage;
            var nodeName = libraryEventHandler.nodeName;
            if (!iCS_AllowedChildren.CanAddChildNode(nodeName, VSObjectType.InstanceMessage, parent, iStorage))
            {
                return(null);
            }
            OpenTransaction(iStorage);
            iCS_EditorObject msgHandler = null;
            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    msgHandler = iStorage.CreateNode(parent.InstanceId, libraryEventHandler);
                    msgHandler.SetInitialPosition(globalPos);
                    msgHandler.ForEachChildPort(p => { p.AnimationStartRect = BuildRect(globalPos, Vector2.zero); });
                    iStorage.ForcedRelayoutOfTree();
                    iStorage.ReduceCollisionOffset();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (msgHandler == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create " + nodeName);
            SystemEvents.AnnounceVisualScriptElementAdded(msgHandler);
            return(msgHandler);
        }
Example #6
0
        // ----------------------------------------------------------------------
        // OK
        public static iCS_EditorObject CreateStateChart(iCS_EditorObject parent, Vector2 globalPos, string name)
        {
#if SHOW_DEBUG
            Debug.Log("iCanScript: Create State Chart => " + name);
#endif
            if (parent == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = parent.IStorage;
            OpenTransaction(iStorage);
            iCS_EditorObject stateChart = null;
            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    stateChart = iStorage.CreateStateChart(parent.InstanceId, name);
                    stateChart.SetInitialPosition(globalPos);
                    iStorage.ForcedRelayoutOfTree();
                    // Automatically create entry state.
                    var entryState          = iStorage.CreateState(stateChart.InstanceId, "EntryState");
                    entryState.IsEntryState = true;
                    entryState.SetInitialPosition(globalPos);
                    iStorage.ForcedRelayoutOfTree();
                    iStorage.ReduceCollisionOffset();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (stateChart == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create StateChart");
            SystemEvents.AnnounceVisualScriptElementAdded(stateChart);
            return(stateChart);
        }
        // ----------------------------------------------------------------------
        public static void PasteIntoGraph(iCS_MonoBehaviourImp sourceMonoBehaviour, iCS_EngineObject sourceRoot,
                                          iCS_IStorage iStorage, iCS_EditorObject parent, Vector2 globalPos)
        {
            if (!IsCreationAllowed())
            {
                return;
            }
            OpenTransaction(iStorage);
            iCS_EditorObject pasted = null;

            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    if (parent.IsFoldedInLayout || parent.IsIconizedInLayout)
                    {
                        parent.Unfold();
                    }
                    iCS_IStorage srcIStorage = new iCS_IStorage(sourceMonoBehaviour);
                    iCS_EditorObject srcRoot = srcIStorage.EditorObjects[sourceRoot.InstanceId];
                    pasted = iStorage.Copy(srcRoot, srcIStorage, parent, globalPos, iStorage);
                    if (pasted != null)
                    {
                        if (pasted.IsUnfoldedInLayout)
                        {
                            pasted.Fold();
                        }
                        iStorage.SelectedObject = pasted;
                        iStorage.ForcedRelayoutOfTree();
                    }
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return;
            }
            if (pasted != null)
            {
                SystemEvents.AnnounceVisualScriptElementAdded(pasted);
            }
            CloseTransaction(iStorage, "Add Prefab " + sourceRoot.RawName);
        }
Example #8
0
        // ----------------------------------------------------------------------
        // OK
        public static iCS_EditorObject CreateFunctionCallNode(iCS_EditorObject parent, Vector2 globalPos, LibraryObject libraryObject)
        {
#if SHOW_DEBUG
            Debug.Log("iCanScript: Create Function => " + libraryObject.displayString);
#endif
            if (parent == null || libraryObject == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = parent.IStorage;
            OpenTransaction(iStorage);
            iCS_EditorObject function = null;
            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    function = iStorage.CreateNode(parent.InstanceId, libraryObject);
                    function.SetInitialPosition(globalPos);
                    iStorage.ForcedRelayoutOfTree();
                    iStorage.ReduceCollisionOffset();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (function == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            var name = libraryObject.nodeName;
            CloseTransaction(iStorage, "Create " + name);
            SystemEvents.AnnounceVisualScriptElementAdded(function);
            return(function);
        }
Example #9
0
        // -------------------------------------------------------------------------
        public static iCS_EditorObject CreateTriggerPort(iCS_EditorObject parent)
        {
            if (parent == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = parent.IStorage;

            OpenTransaction(iStorage);
            iCS_EditorObject port = null;

            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    port      = iStorage.CreateTriggerPort(parent.InstanceId);
                    var pRect = parent.GlobalRect;
                    port.SetInitialPosition(new Vector2(0.5f * (pRect.x + pRect.xMax), pRect.yMax));
                    iStorage.ForcedRelayoutOfTree();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (port == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create Trigger Port");
            SystemEvents.AnnounceVisualScriptElementAdded(port);
            return(port);
        }
Example #10
0
        // ======================================================================
        /// Creates an inline code node.
        ///
        /// @param parent The parent node in which to create the inline code.
        /// @param globalPosition The layout position where to new node should be created.
        /// @param name The name of the node to create.
        ///
        public static iCS_EditorObject CreateInlineCode(iCS_EditorObject parent, Vector2 globalPos, string name)
        {
            var iStorage = parent.IStorage;

            OpenTransaction(iStorage);
            iCS_EditorObject package = null;

            try {
                package = _CreatePackage(parent, globalPos, name, VSObjectType.InlineCode, typeof(InlineCode));
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (package == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create " + name);
            SystemEvents.AnnounceVisualScriptElementAdded(package);
            return(package);
        }
Example #11
0
        // ======================================================================
        // Node Wrapping in package.
        // ----------------------------------------------------------------------
        public static iCS_EditorObject WrapInPackage(iCS_EditorObject obj)
        {
            if (obj == null || !obj.CanHavePackageAsParent())
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = obj.IStorage;

            OpenTransaction(iStorage);
            iCS_EditorObject package = null;

            try {
                iStorage.AnimateGraph(null,
                                      _ => {
                    package = iStorage.WrapInPackage(obj);
                    iStorage.ForcedRelayoutOfTree();
                }
                                      );
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (package == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Wrap : " + obj.DisplayName);
            SystemEvents.AnnounceVisualScriptElementAdded(package);
            return(package);
        }
Example #12
0
        // ======================================================================
        // Object creation
        // ----------------------------------------------------------------------
        public static iCS_EditorObject CreatePackage(iCS_EditorObject parent, Vector2 globalPos, string name, VSObjectType objectType = VSObjectType.Package, Type runtimeType = null)
        {
#if SHOW_DEBUG
            Debug.Log("iCanScript: CreatePackage => " + name);
#endif
            var iStorage = parent.IStorage;
            OpenTransaction(iStorage);
            iCS_EditorObject package = null;
            try {
                package = _CreatePackage(parent, globalPos, name, objectType, runtimeType);
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (package == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create " + name);
            SystemEvents.AnnounceVisualScriptElementAdded(package);
            return(package);
        }
Example #13
0
        // ----------------------------------------------------------------------
        public static iCS_EditorObject CreateTransition(iCS_EditorObject fromStatePort, iCS_EditorObject toState, Vector2 toStatePortPos)
        {
#if SHOW_DEBUG
            Debug.Log("iCanScript: Create Transition Package");
#endif
            if (fromStatePort == null || toState == null)
            {
                return(null);
            }
            if (!IsCreationAllowed())
            {
                return(null);
            }
            var iStorage = toState.IStorage;
            OpenTransaction(iStorage);
            iCS_EditorObject transitionPackage = null;
            try {
                // Create toStatePort
                iCS_EditorObject toStatePort = iStorage.CreatePort("", toState.InstanceId, typeof(void), VSObjectType.InStatePort);
                // Update port positions
                toStatePort.SetInitialPosition(toStatePortPos);
                toStatePort.UpdatePortEdge();
                fromStatePort.UpdatePortEdge();
                // Temporally connect state ports together.
                iStorage.SetSource(toStatePort, fromStatePort);
                // Create transition package
                transitionPackage = iStorage.CreateTransition(fromStatePort, toStatePort);
                // Try to position the transition in the middle
                var fromStatePortPos = fromStatePort.GlobalPosition;
                var globalPos        = 0.5f * (fromStatePortPos + toStatePortPos);
                transitionPackage.SetInitialPosition(globalPos);
                transitionPackage.Iconize();
                // Attempt to proper edge for transition ports.
                var outTransitionPort = toStatePort.ProducerPort;
                var inTransitionPort  = iStorage.GetInTransitionPort(transitionPackage);
                var diff = toStatePortPos - fromStatePortPos;
                if (Mathf.Abs(diff.x) > Mathf.Abs(diff.y))
                {
                    if (Vector2.Dot(diff, Vector2.right) > 0)
                    {
                        inTransitionPort.Edge  = NodeEdge.Left;
                        toStatePort.Edge       = NodeEdge.Left;
                        outTransitionPort.Edge = NodeEdge.Right;
                        fromStatePort.Edge     = NodeEdge.Right;
                    }
                    else
                    {
                        inTransitionPort.Edge  = NodeEdge.Right;
                        toStatePort.Edge       = NodeEdge.Right;
                        outTransitionPort.Edge = NodeEdge.Left;
                        fromStatePort.Edge     = NodeEdge.Left;
                    }
                }
                else
                {
                    if (Vector2.Dot(diff, Vector2.up) > 0)
                    {
                        inTransitionPort.Edge  = NodeEdge.Top;
                        toStatePort.Edge       = NodeEdge.Top;
                        outTransitionPort.Edge = NodeEdge.Bottom;
                        fromStatePort.Edge     = NodeEdge.Bottom;
                    }
                    else
                    {
                        inTransitionPort.Edge  = NodeEdge.Bottom;
                        toStatePort.Edge       = NodeEdge.Bottom;
                        outTransitionPort.Edge = NodeEdge.Top;
                        fromStatePort.Edge     = NodeEdge.Top;
                    }
                }
                inTransitionPort.PortPositionRatio  = 0.5f;
                outTransitionPort.PortPositionRatio = 0.5f;
                // Layout the graph
                iStorage.ForcedRelayoutOfTree();
                iStorage.ReduceCollisionOffset();
            }
            catch (System.Exception) {
                CancelTransaction(iStorage);
                return(null);
            }
            if (transitionPackage == null)
            {
                CancelTransaction(iStorage);
                return(null);
            }
            CloseTransaction(iStorage, "Create Transition");
            SystemEvents.AnnounceVisualScriptElementAdded(transitionPackage);
            return(transitionPackage);
        }