Esempio n. 1
0
        public static bool GetClipboardObject <T>(out T obj)
        {
            string clipboardStr = GUIUtility.systemCopyBuffer;

            obj = default(T);
            if (clipboardStr.StartsWith("/\\nd/\\") && clipboardStr.EndsWith("/\\nd/\\"))
            {
                try
                {
                    clipboardStr = clipboardStr.Substring(6, clipboardStr.Length - 12);
                    IFormatter   formatter = new BinaryFormatter();
                    byte[]       buffer    = Convert.FromBase64String(clipboardStr);
                    MemoryStream stream    = new MemoryStream(buffer);
                    obj = (T)formatter.Deserialize(stream);
                    stream.Flush();
                    stream.Close();
                    return(true);
                }
                catch (Exception e)
                {
                    BarrageProject.LogError(string.Format("Deserialize to object fail , {0}", e.Message));
                    return(false);
                }
            }
            return(false);
        }
        private void CloseClickHander()
        {
            Close();
            return;

            //string filePath = Application.streamingAssetsPath + "../../../../TouhouBarrageDemo/Assets/StreamingAssets/LuaRoot/stages/TestEditorStage.lua";
            //if (filePath != null)
            //{
            //    BaseNode root = BarrageProject.RootNode;
            //    string luaData = "";
            //    root.ToLua(0, ref luaData);
            //    FileUtils.WriteToFile(luaData, filePath);
            //}
            string openPath = FileUtils.OpenFile("选择要更新的关卡数据", "关卡数据(*.nd)\0*.nd\0", false);

            if (openPath != null)
            {
                EventManager.GetInstance().PostEvent(EditorEvents.BeforeProjectChanged);
                BarrageProject.UnloadProject();
                BarrageProject.UpdateProject(openPath);
                BarrageProject.LoadProject(openPath);
                EventManager.GetInstance().PostEvent(EditorEvents.AfterProjectChanged);
                BarrageProject.Log("current project file: " + FileUtils.GetFileNameByPath(openPath));
            }
        }
        private void OnSaveClickHandler()
        {
            string savePath = BarrageProject.GetProjectPath();

            if (savePath != null)
            {
                BaseNode root = BarrageProject.RootNode;
                NodeData nd   = NodeManager.SaveAsNodeData(root, true);
                FileUtils.SerializableObjectToFile(savePath, nd);
            }
        }
        private void OnCopyClickHandler()
        {
            if (_curSelectedNode == null)
            {
                BarrageProject.LogWarning("Copy fail!Please select a node first");
                return;
            }
            NodeData nd = NodeManager.SaveAsNodeData(_curSelectedNode, true);

            Clipboard.CopyToClipboard(nd);
            //Clipboard.SetDataObject(nd);
        }
        private void OnCutClickHandler()
        {
            if (_curSelectedNode == null)
            {
                BarrageProject.LogWarning("Cut fail!Please select a node first");
                return;
            }
            BaseNode parent = _curSelectedNode.GetParentNode();

            if (parent == null)
            {
                BarrageProject.LogWarning("Cut fail!Node root is not deletable");
                return;
            }
            if (!_curSelectedNode.IsDeletable)
            {
                BarrageProject.LogWarning(string.Format("Cut fail!Node {0} is not deletable", _curSelectedNode.GetNodeName()));
                return;
            }
            // 保存该节点的数据
            NodeData nd = NodeManager.SaveAsNodeData(_curSelectedNode, true);

            if (!Clipboard.CopyToClipboard(nd))
            {
                return;
            }
            //Clipboard.SetDataObject(nd);
            // 删除节点
            int index = parent.GetChildIndex(_curSelectedNode);

            // 删除完成之后,默认选中下一个节点
            if (parent.RemoveChildNode(_curSelectedNode))
            {
                BaseNode newSelectNode = parent.GetChildByIndex(index);
                if (newSelectNode == null)
                {
                    newSelectNode = parent.GetChildByIndex(index - 1);
                    if (newSelectNode == null)
                    {
                        newSelectNode = parent;
                    }
                }
                newSelectNode.OnSelected(true);
                OpDeleleHM hm = new OpDeleleHM
                {
                    parentIndex = NodeManager.GetNodeIndex(parent),
                    childIndex  = index,
                    delNodeData = nd,
                };
                Undo.AddToUndoTask(hm);
            }
        }
        private void OnOpenClickHandler()
        {
            string openPath = FileUtils.OpenFile("选择关卡数据", "关卡数据(*.nd)\0*.nd\0", false);

            if (openPath != null)
            {
                EventManager.GetInstance().PostEvent(EditorEvents.BeforeProjectChanged);
                BarrageProject.UnloadProject();
                BarrageProject.LoadProject(openPath);
                EventManager.GetInstance().PostEvent(EditorEvents.AfterProjectChanged);
                BarrageProject.Log("current project file: " + FileUtils.GetFileNameByPath(openPath));
            }
        }
        private void OnDeleteClickHandler()
        {
            if (_curSelectedNode == null)
            {
                BarrageProject.LogWarning("Delete fail!Please select a node first");
                return;
            }
            BaseNode parent = _curSelectedNode.GetParentNode();

            if (parent == null)
            {
                BarrageProject.LogWarning("Delete fail!Node root is not deletable");
                return;
            }
            if (!_curSelectedNode.IsDeletable)
            {
                BarrageProject.LogWarning(string.Format("Delete fail!Node {0} is not deletable", _curSelectedNode.GetNodeName()));
                return;
            }
            int      indexInParent = parent.GetChildIndex(_curSelectedNode);
            NodeData nd            = NodeManager.SaveAsNodeData(_curSelectedNode, true);

            // 删除完成之后,默认选中下一个节点
            if (parent.RemoveChildNode(_curSelectedNode))
            {
                BaseNode newSelectNode = parent.GetChildByIndex(indexInParent);
                if (newSelectNode == null)
                {
                    newSelectNode = parent.GetChildByIndex(indexInParent - 1);
                    if (newSelectNode == null)
                    {
                        newSelectNode = parent;
                    }
                }
                newSelectNode.OnSelected(true);
                OpDeleleHM hm = new OpDeleleHM
                {
                    parentIndex = NodeManager.GetNodeIndex(parent),
                    childIndex  = indexInParent,
                    delNodeData = nd,
                };
                Undo.AddToUndoTask(hm);
            }
            //else
            //{
            //    BarrageProject.LogWarning(string.Format("Delete fail!Node {0} is not deletable", _curSelectedNode.GetNodeName()));
            //}
        }
        private void OnCreateClickHandler()
        {
            string savePath = FileUtils.SaveFile("选择新建工程的位置", "关卡数据(*.nd)\0*.nd\0");

            if (savePath != null)
            {
                EventManager.GetInstance().PostEvent(EditorEvents.BeforeProjectChanged);
                BarrageProject.UnloadProject();
                // todo 载入固定位置的一个模板
                string templatePath = Application.streamingAssetsPath + "/template.nd";
                BarrageProject.LoadProject(templatePath);
                EventManager.GetInstance().PostEvent(EditorEvents.AfterProjectChanged);
                // 当前文件
                BarrageProject.Log("current project file: " + FileUtils.GetFileNameByPath(savePath));
            }
        }
 private void OnDebugSpellCardHandler()
 {
     if (_curSelectedNode == null)
     {
         BarrageProject.LogError("Debug fail!Please select a node first");
         return;
     }
     // 当前选择的节点必须是defineSpellCard
     if (_curSelectedNode.GetNodeType() != NodeType.DefineSpellCard)
     {
         BarrageProject.LogError("Debug fail!Please select a node with type define spell card");
         return;
     }
     BarrageProject.SetDebugSpellCardNode(_curSelectedNode);
     OnPackClickHandler();
     BarrageProject.ClearDebugSpellCardMode();
 }
        public void OnPasteClickHandler()
        {
            if (_curSelectedNode == null)
            {
                BarrageProject.LogWarning("Paste fail!Please select a node first");
                return;
            }
            NodeData nd = default(NodeData);

            if (!Clipboard.GetClipboardObject <NodeData>(out nd))
            {
                return;
            }
            if (nd == null)
            {
                BarrageProject.LogWarning("Paste fail!There is no data in clipboard");
                return;
            }
            BaseNode parent;
            int      insertIndex;

            GetParentNodeAndInsertIndexByInsertMode(_curInsertMode, _curSelectedNode, out parent, out insertIndex);
            NodeType childType = (NodeType)nd.type;

            if (!parent.CheckCanInsertChildNode(childType))
            {
                string msg = string.Format("can not insert {0} as child of {1}", childType, parent.GetNodeType());
                BarrageProject.LogError(msg);
                return;
            }
            BaseNode childNode = NodeManager.CreateNodesByNodeDatas(nd);

            if (parent.InsertChildNode(childNode, insertIndex))
            {
                parent.Expand(true);
                childNode.OnSelected(true);
                OpPasteHM hm = new OpPasteHM
                {
                    parentIndex   = NodeManager.GetNodeIndex(parent),
                    childIndex    = parent.GetChildIndex(childNode),
                    pasteNodeData = nd,
                };
                Undo.AddToUndoTask(hm);
            }
        }
Esempio n. 11
0
        private void TryInsertNode(NodeType nodeType)
        {
            //if (!BarrageProject.IsProjectLoaded())
            //{
            //    BarrageProject.LogError("Please load a project before you want to insert");
            //    return;
            //}
            if (_curSelectedNode == null)
            {
                BarrageProject.LogError("Please select a node before you want to insert");
                return;
            }
            BaseNode parentNode  = null;
            BaseNode newNode     = null;
            int      insertIndex = -1;

            GetParentNodeAndInsertIndexByInsertMode(_curInsertMode, _curSelectedNode, out parentNode, out insertIndex);
            if (parentNode != null)
            {
                // 先判断是否可以插入子节点
                if (!parentNode.CheckCanInsertChildNode(nodeType))
                {
                    string msg = string.Format("can not insert {0} as child of {1}", nodeType, parentNode.GetNodeType());
                    BarrageProject.LogError(msg);
                    return;
                }
                // 插入子节点
                newNode = NodeManager.CreateNode(nodeType);
                newNode.SetAttrsDefaultValues();
                parentNode.InsertChildNode(newNode, insertIndex);
                // 设置操作记录
                OpInsertHM hm = new OpInsertHM
                {
                    parentIndex    = NodeManager.GetNodeIndex(parentNode),
                    childIndex     = parentNode.GetChildIndex(newNode),
                    insertNodeData = NodeManager.SaveAsNodeData(newNode, true),
                };
                Undo.AddToUndoTask(hm);
                // 展开父节点
                parentNode.Expand(true);
                newNode.OnSelected(true);
                SetContentToNode(newNode);
            }
        }
        private void OnDebugStageHandler()
        {
            if (_curSelectedNode == null)
            {
                BarrageProject.LogError("Debug fail!Please select a node first");
                return;
            }
            // 当前选择节点的父节点必须是stage
            BaseNode parentNode = _curSelectedNode.GetParentNode();

            if (parentNode == null || parentNode.GetNodeType() != NodeType.Stage)
            {
                BarrageProject.LogError("Debug fail!Please select a node which is direct child of stage");
                return;
            }
            BarrageProject.SetDebugStageNode(parentNode, _curSelectedNode);
            OnPackClickHandler();
            BarrageProject.ClearDebugStageNode();
        }
        private void SaveAsClickHander()
        {
            Close();
            string path = BarrageProject.GetProjectPath();

            if (path == null)
            {
                return;
            }
            string savePath = FileUtils.SaveFile("选择保存数据", "关卡数据(*.nd)\0*.nd\0");

            if (savePath != null)
            {
                BaseNode root = BarrageProject.RootNode;
                NodeData nd   = NodeManager.SaveAsNodeData(root, true);
                FileUtils.SerializableObjectToFile(savePath, nd);
                BarrageProject.SetProjectPath(savePath);
                BarrageProject.Log("Save Complete");
            }
        }
        private void NewClickHandler()
        {
            Close();
            string savePath = FileUtils.SaveFile("选择新建工程的位置", "关卡数据(*.nd)\0*.nd\0");

            if (savePath != null)
            {
                EventManager.GetInstance().PostEvent(EditorEvents.BeforeProjectChanged);
                BarrageProject.UnloadProject();
                // todo 载入固定位置的一个模板
                string templatePath = Application.streamingAssetsPath + "/template.nd";
                BarrageProject.LoadProject(templatePath);
                BarrageProject.SetProjectPath(savePath);
                // 保存文件
                BaseNode root = BarrageProject.RootNode;
                NodeData nd   = NodeManager.SaveAsNodeData(root, true);
                FileUtils.SerializableObjectToFile(savePath, nd);
                EventManager.GetInstance().PostEvent(EditorEvents.AfterProjectChanged);
                // 当前文件
                BarrageProject.Log("Current project file: " + FileUtils.GetFileNameByPath(savePath));
            }
        }
Esempio n. 15
0
 public static bool CopyToClipboard(object obj)
 {
     try
     {
         IFormatter   formatter = new BinaryFormatter();
         MemoryStream stream    = new MemoryStream();
         formatter.Serialize(stream, obj);
         stream.Position = 0;
         byte[] buffer = new byte[stream.Length];
         stream.Read(buffer, 0, buffer.Length);
         stream.Flush();
         stream.Close();
         string str = Convert.ToBase64String(buffer);
         str = "/\\nd/\\" + str + "/\\nd/\\";
         GUIUtility.systemCopyBuffer = str;
         return(true);
     }
     catch (Exception e)
     {
         BarrageProject.LogError(string.Format("Serialize object fail , {0}", e.Message));
         return(false);
     }
 }
Esempio n. 16
0
 private void TestProjectNodeItems()
 {
     BarrageProject.CreateDefaultNodes();
     BarrageProject.RootNode.Expand(true);
 }