Esempio n. 1
0
        // ======================================================================
        // General Queries
        // ----------------------------------------------------------------------
        public static iCS_EngineObject[] GetChildPorts(iCS_IVisualScriptData vsd, iCS_EngineObject node)
        {
            List <iCS_EngineObject> childPorts = new List <iCS_EngineObject>();

            FilterWith(p => p.IsPort && p.ParentId == node.InstanceId, childPorts.Add, vsd);
            return(childPorts.ToArray());
        }
Esempio n. 2
0
 // ======================================================================
 // Connection Queries
 // ----------------------------------------------------------------------
 // Returns the immediate source of the port.
 public static iCS_EngineObject GetProducerPort(iCS_IVisualScriptData vsd, iCS_EngineObject port)
 {
     if (port == null || port.SourceId == -1)
     {
         return(null);
     }
     return(vsd.EngineObjects[port.SourceId]);
 }
 // =======================================================================
 // General Iterations
 // -----------------------------------------------------------------------
 // Executes for each valid engine object
 public static void ForEach(Action <iCS_EngineObject> fnc, iCS_IVisualScriptData vsd)
 {
     P.forEach(o => { if (IsValid(o, vsd))
                      {
                          fnc(o);
                      }
               }, vsd.EngineObjects);
 }
Esempio n. 4
0
 // ----------------------------------------------------------------------
 public static bool IsRelayPort(iCS_IVisualScriptData vsd, iCS_EngineObject port)
 {
     if (port == null)
     {
         return(false);
     }
     return(HasASource(vsd, port) && HasADestination(vsd, port));
 }
 // ----------------------------------------------------------------------
 // Save the navigation state of the given IStorage.
 public void SaveState(iCS_IVisualScriptData storage)
 {
     DisplayRoot         = storage.DisplayRoot;
     ShowDisplayRootNode = storage.ShowDisplayRootNode;
     ScrollPosition      = storage.ScrollPosition;
     GuiScale            = storage.GuiScale;
     SelectedObject      = storage.SelectedObject;
 }
Esempio n. 6
0
 // ======================================================================
 // Tree Navigation Queries
 // ----------------------------------------------------------------------
 public static iCS_EngineObject GetParent(iCS_IVisualScriptData vsd, iCS_EngineObject child)
 {
     if (child == null || child.ParentId == -1)
     {
         return(null);
     }
     return(vsd.EngineObjects[child.ParentId]);
 }
Esempio n. 7
0
        // ----------------------------------------------------------------------
        public static iCS_EngineObject GetParentNode(iCS_IVisualScriptData vsd, iCS_EngineObject child)
        {
            var parentNode = GetParent(vsd, child);

            while (parentNode != null && !parentNode.IsNode)
            {
                parentNode = GetParent(vsd, parentNode);
            }
            return(parentNode);
        }
Esempio n. 8
0
 // ----------------------------------------------------------------------
 public static void CopyEditorDataFromTo(iCS_IVisualScriptData from, iCS_IVisualScriptData to)
 {
     to.ShowDisplayRootNode    = from.ShowDisplayRootNode;
     to.ScrollPosition         = from.ScrollPosition;
     to.GuiScale               = from.GuiScale;
     to.SelectedObject         = from.SelectedObject;
     to.SelectedObjectPosition = from.SelectedObjectPosition;
     to.DisplayRoot            = from.DisplayRoot;
     // Copy navigation history
     to.NavigationHistory.CopyFrom(from.NavigationHistory);
 }
        // ----------------------------------------------------------------------
        // Reloads the navigation state of the given IStorage from the forward
        // history.
        public void ReloadFromForwardHistory(iCS_IVisualScriptData storage)
        {
            if (!HasForwardHistory)
            {
                return;
            }
            var backwardMemento = new iCS_NavigationMemento(storage);

            myMementos[myCursor].RestoreState(storage);
            myMementos[myCursor] = backwardMemento;
            ++myCursor;
        }
 // ----------------------------------------------------------------------
 // Restores the navigation state into the given IStorage.
 public void RestoreState(iCS_IVisualScriptData storage)
 {
     if (!iCS_VisualScriptData.IsValidEngineObject(storage, DisplayRoot))
     {
         return;
     }
     storage.ShowDisplayRootNode = ShowDisplayRootNode;
     storage.ScrollPosition      = ScrollPosition;
     storage.GuiScale            = GuiScale;
     storage.DisplayRoot         = DisplayRoot;
     storage.SelectedObject      = SelectedObject;
     return;
 }
Esempio n. 11
0
        // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        //               VISUAL SCRIPT DATA UTILITY SECTION
        // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        // ======================================================================
        // Initialize / Destroy
        // ----------------------------------------------------------------------
        public static void DestroyEngineObject(iCS_IVisualScriptData vsd, iCS_EngineObject toDelete)
        {
            // -- Disconnect all connected ports --
            if (toDelete.IsPort)
            {
                int id = toDelete.InstanceId;
                if (id != -1)
                {
                    FilterWith(o => o.IsPort && o.SourceId == id, p => p.SourceId = -1, vsd);
                }
            }
            // -- Destroy the instance --
            toDelete.DestroyInstance();
        }
Esempio n. 12
0
        // ----------------------------------------------------------------------
        public static void AddEngineObject(iCS_IVisualScriptData vsd, iCS_EngineObject toAdd)
        {
            // Try to find an available empty slot.
            int emptySlot = P.findFirst(o => o.InstanceId == -1, (i, o) => i, -1, vsd.EngineObjects);

            // Grow engine object array if no free slot exists.
            if (emptySlot != -1)
            {
                toAdd.InstanceId             = emptySlot;
                vsd.EngineObjects[emptySlot] = toAdd;
                return;
            }
            toAdd.InstanceId = P.length(vsd.EngineObjects);
            vsd.EngineObjects.Add(toAdd);
        }
 // ----------------------------------------------------------------------
 // Saves the navigation state of the given IStorage.
 public void Save(iCS_IVisualScriptData storage)
 {
     // Erase previous forward history.
     if (HasForwardHistory)
     {
         myMementos.RemoveRange(myCursor, myMementos.Count - myCursor);
     }
     // Save new memento.
     myMementos.Add(new iCS_NavigationMemento(storage));
     // Limit the size the the navigation history
     if (myMementos.Count > kMaxHistory)
     {
         myMementos.RemoveRange(0, myMementos.Count - kMaxHistory);
     }
     myCursor = myMementos.Count;
 }
Esempio n. 14
0
        // ----------------------------------------------------------------------
        /// Returns the relative name of the object reference by the visual script.
        public static string GetRelativeName(iCS_IVisualScriptData vsd, iCS_EngineObject obj)
        {
            if (obj == null)
            {
                return("");
            }
            string fullName = "";

            for (; obj != null; obj = GetParentNode(vsd, obj))
            {
                if (!obj.IsBehaviour)
                {
                    fullName = obj.RawName + (string.IsNullOrEmpty(fullName) ? "" : "/" + fullName);
                }
            }
            return(fullName);
        }
Esempio n. 15
0
        // ----------------------------------------------------------------------
        public static void CopyDataFromTo(iCS_IVisualScriptData from, iCS_IVisualScriptData to)
        {
            to.IsEditorScript   = from.IsEditorScript;
            to.CSharpFileName   = from.CSharpFileName;
            to.BaseTypeOverride = from.BaseTypeOverride;
            to.BaseType         = from.BaseType;
            to.SourceFileGUID   = from.SourceFileGUID;
            to.MajorVersion     = from.MajorVersion;
            to.MinorVersion     = from.MinorVersion;
            to.BugFixVersion    = from.BugFixVersion;
            to.UndoRedoId       = from.UndoRedoId;

            // Resize destination engine object array.
            var fromEngineObjects = from.EngineObjects;
            var toEngineObjects   = to.EngineObjects;
            int fromLen           = fromEngineObjects.Count;
            int toLen             = toEngineObjects.Count;

            if (toLen > fromLen)
            {
                toEngineObjects.RemoveRange(fromLen, toLen - fromLen);
            }
            toEngineObjects.Capacity = fromLen;
            // Copy engine objects.
            for (int i = 0; i < fromLen; ++i)
            {
                var fromObj = fromEngineObjects[i];
                if (fromObj == null)
                {
                    fromObj = iCS_EngineObject.CreateInvalidInstance();
                }
                if (toEngineObjects.Count <= i)
                {
                    toEngineObjects.Add(fromObj.Clone());
                }
                else if (toEngineObjects[i] == null)
                {
                    toEngineObjects[i] = fromObj.Clone();
                }
                else
                {
                    toEngineObjects[i] = fromObj.CopyTo(toEngineObjects[i]);
                }
            }
        }
Esempio n. 16
0
        // ----------------------------------------------------------------------
        // Returns the list of consumer ports.
        public static iCS_EngineObject[] GetConsumerPorts(iCS_IVisualScriptData vsd, iCS_EngineObject port)
        {
            if (port == null)
            {
                return(new iCS_EngineObject[0]);
            }
            var consumerPorts = new List <iCS_EngineObject>();
            var engineObjects = vsd.EngineObjects;

            foreach (var obj in engineObjects)
            {
                if (obj.IsPort && GetProducerPort(vsd, obj) == port)
                {
                    consumerPorts.Add(obj);
                }
            }
            return(consumerPorts.ToArray());
        }
Esempio n. 17
0
        // ----------------------------------------------------------------------
        // Returns the endport source of a connection.
        public static iCS_EngineObject GetSegmentProducerPort(iCS_IVisualScriptData vsd, iCS_EngineObject port)
        {
            if (port == null || port.InstanceId == -1)
            {
                return(null);
            }
            int linkLength = 0;

            for (iCS_EngineObject sourcePort = GetProducerPort(vsd, port); sourcePort != null; sourcePort = GetProducerPort(vsd, port))
            {
                port = sourcePort;
                if (++linkLength > 100)
                {
                    Debug.LogWarning("iCanScript: Circular port connection detected on: " + GetParentNode(vsd, port).RawName + "." + port.RawName);
                    return(null);
                }
            }
            return(IsValid(port, vsd) ? port : null);
        }
Esempio n. 18
0
 // ----------------------------------------------------------------------
 public void CopyEditorDataTo(iCS_IVisualScriptData to)
 {
     CopyEditorDataFromTo(this, to);
 }
Esempio n. 19
0
        // ======================================================================
        // Queries
        // ----------------------------------------------------------------------
        public static bool IsValidEngineObject(iCS_IVisualScriptData vsd, int id)
        {
            var engineObjects = vsd.EngineObjects;

            return(id >= 0 && id < engineObjects.Count && engineObjects[id].InstanceId != -1);
        }
Esempio n. 20
0
 // ======================================================================
 // Duplication Utilities
 // ----------------------------------------------------------------------
 public static void CopyFromTo(iCS_IVisualScriptData from, iCS_IVisualScriptData to)
 {
     CopyDataFromTo(from, to);
     CopyEditorDataFromTo(from, to);
 }
Esempio n. 21
0
 // ----------------------------------------------------------------------
 public static bool HasADestination(iCS_IVisualScriptData vsd, iCS_EngineObject port)
 {
     return(P.length(GetConsumerPorts(vsd, port)) != 0);
 }
Esempio n. 22
0
        // ----------------------------------------------------------------------
        public static bool HasASource(iCS_IVisualScriptData vsd, iCS_EngineObject port)
        {
            var source = GetProducerPort(vsd, port);

            return(source != null && source != port);
        }
        // =======================================================================
        // Simple Queries
        // -----------------------------------------------------------------------
        // Returns 'true' if the given engine object is valid.
        public static bool IsValid(iCS_EngineObject obj, iCS_IVisualScriptData vsd)
        {
            int id = obj.InstanceId;

            return(id >= 0 && id < vsd.EngineObjects.Count);
        }
 // -----------------------------------------------------------------------
 // Invokes the given action if the given condition has passed the test.
 public static void FilterWith(Func <iCS_EngineObject, bool> cond, Action <iCS_EngineObject> action, iCS_IVisualScriptData vsd)
 {
     ForEach(o => { if (cond(o))
                    {
                        action(o);
                    }
             }, vsd);
 }
Esempio n. 25
0
 // ----------------------------------------------------------------------
 /// Returns the full name of the object including the name of the game object.
 public static string GetFullName(iCS_IVisualScriptData vsd, UnityEngine.Object host, iCS_EngineObject obj)
 {
     return("/" + host.name + "/" + GetRelativeName(vsd, obj));
 }
Esempio n. 26
0
 public iCS_VisualScriptData(/*UnityEngine.Object host, */ iCS_IVisualScriptData vsd)
 {
     //        HostObject= host;
     iCS_VisualScriptData.CopyFromTo(vsd, this);
 }
Esempio n. 27
0
 // ======================================================================
 // Duplication Utilities
 // ----------------------------------------------------------------------
 public void CopyTo(iCS_IVisualScriptData to)
 {
     CopyFromTo(this, to);
 }
Esempio n. 28
0
        // ======================================================================
        // Respond to Unity drag & drop protocol.
        // ----------------------------------------------------------------------
        // TODO: Need to revise valid drop node.
        void DragAndDropUpdated()
        {
            iCS_EditorObject objectUnderMouse = GetObjectAtMousePosition();

            if (objectUnderMouse != null)
            {
                UnityEngine.Object draggedObject = GetDraggedObject();
                if (objectUnderMouse.IsInputPort)
                {
                    if (GetValidDragAndDropObjectForPort(objectUnderMouse, draggedObject) != null)
                    {
                        DragAndDrop.visualMode = DragAndDropVisualMode.Link;
                        return;
                    }
                }
                if (objectUnderMouse.IsNode)
                {
                    var draggedLibrary      = GetDraggedLibrary(draggedObject);
                    var draggedEngineObject = draggedLibrary != null ? draggedLibrary.EngineObjects[0] : null;
                    // -- Don't accept to drag an object directly under Behaviour --
                    if (objectUnderMouse.IsBehaviour)
                    {
                        if (draggedEngineObject != null &&
                            iCS_AllowedChildren.CanAddChildNode(draggedEngineObject.RawName, draggedEngineObject, objectUnderMouse, IStorage))
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                        }
                        else
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
                        }
                        return;
                    }
                    // -- Don't accept to drag object outside the root node --
                    if (objectUnderMouse == DisplayRoot && IStorage.ShowDisplayRootNode)
                    {
                        if (!DisplayRoot.GlobalRect.Contains(GraphMousePosition))
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Rejected;
                            return;
                        }
                    }
                    if (draggedObject is Texture && objectUnderMouse.IsIconizedOnDisplay)
                    {
                        DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                        return;
                    }
                    if (draggedObject is GameObject)
                    {
                        if (objectUnderMouse.IsKindOfPackage)
                        {
                            var library = GetDraggedLibrary(draggedObject);
                            if (library == null)
                            {
                                DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                                return;
                            }
                            iCS_IVisualScriptData storage = library;
                            if (storage.EngineObjects.Count > 0)
                            {
                                var engineObject = storage.EngineObjects[0];
                                if (iCS_AllowedChildren.CanAddChildNode(engineObject.RawName, engineObject.ObjectType, objectUnderMouse, IStorage))
                                {
                                    DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
        }
 // ======================================================================
 // Duplication Utilities
 // ----------------------------------------------------------------------
 public static void CopyFromTo(iCS_IVisualScriptData from, iCS_IVisualScriptData to)
 {
     iCS_VisualScriptData.CopyFromTo(from, to);
 }
 // ----------------------------------------------------------------------
 // Creates a new memento and saves the navigation state of the given
 // IStorage.
 public iCS_NavigationMemento(iCS_IVisualScriptData storage)
 {
     SaveState(storage);
 }