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); } }
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)); } }
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); } }
private void TestProjectNodeItems() { BarrageProject.CreateDefaultNodes(); BarrageProject.RootNode.Expand(true); }