void SaveDataToFile() { //序列化存储 PainterChecker checker = target as PainterChecker; if (checker._dicGrid != null) { if (checker._checkData == null) { AssetDatabase.CreateAsset(GetGridData(), "Assets/" + checker.name + "_ScribbleCheckData.asset"); } else { AssetDatabase.Refresh(); PaintCheckData checkData = checker._checkData; checkData.checkPoints = new List <Vector2>(); checkData.gridSize = GetGridSize(); foreach (string key in checker._dicGrid.Keys) { if (checker._dicEnable[key]) { Rect r = checker._dicGrid[key]; checkData.checkPoints.Add(r.center); } } EditorUtility.SetDirty(checker._checkData); AssetDatabase.SaveAssets(); } } }
public void UpdateTexture(Texture2D texture, int painterIndex = 0, bool isKeepCheckerStatus = false) { if (_operation == Operation.Replace) { RenderTexturePainter mainPainter = _listPainter[0]; RenderTexturePainter tempPainter = _listPainter[1]; mainPainter.SourceTex = texture; tempPainter.SourceTex = texture; UpdatePainterSetting(mainPainter); UpdatePainterSetting(tempPainter); return; } RenderTexturePainter painter = _listPainter[painterIndex]; painter.SourceTex = texture; UpdatePainterSetting(painter); if (isKeepCheckerStatus) { return; } painter.ResetCanvas(); PainterChecker checker = _listChecker[_dicCheckerIndex[painter]]; if (null != checker && true == checker._isUseChecker) { checker.Reset(); } }
private void LoopChecker(CallbackLoopChecker callback) { for (int i = 0; i < _listChecker.Count; i++) { PainterChecker checker = _listChecker[i]; callback.Invoke(checker); } }
void OnSceneGUI() { PainterChecker checker = target as PainterChecker; Handles.color = Color.blue; int controlID = GUIUtility.GetControlID(FocusType.Passive); Event current = Event.current; if (checker._dicGrid != null && (current.control || current.command || current.alt)) { switch (current.GetTypeForControl(controlID)) { case EventType.MouseDown: current.Use(); break; case EventType.MouseMove: Vector3 p = HandleUtility.GUIPointToWorldRay(current.mousePosition).origin; Vector3 localPos = checker.transform.InverseTransformPoint(p); Rect brushSize = new Rect(localPos.x - checker._editorBrushSize / 2f, localPos.y - checker._editorBrushSize / 2f, checker._editorBrushSize, checker._editorBrushSize); if (current.control || current.command) { foreach (string key in checker._dicGrid.Keys) { Rect rect = checker._dicGrid[key]; if (Intersect(ref rect, ref brushSize)) { checker._dicEnable[key] = true; } } } else if (current.alt) { foreach (string key in checker._dicGrid.Keys) { Rect rect = checker._dicGrid[key]; if (Intersect(ref rect, ref brushSize)) { checker._dicEnable[key] = false; } } } Event.current.Use(); break; case EventType.Layout: HandleUtility.AddDefaultControl(controlID); break; } } }
PaintCheckData GetGridData() { PainterChecker checker = target as PainterChecker; PaintCheckData checkData = ScriptableObject.CreateInstance <PaintCheckData>(); checkData.checkPoints = new List <Vector2>(); checkData.gridSize = GetGridSize(); foreach (string key in checker._dicGrid.Keys) { if (checker._dicEnable[key]) { Rect r = checker._dicGrid[key]; checkData.checkPoints.Add(r.center); } } return(checkData); }
void ReadGrid() { PainterChecker checker = target as PainterChecker; if (checker._checkData != null) { checker._dicGrid = new Dictionary <string, Rect>(); checker._dicEnable = new Dictionary <string, bool>(); Vector2 gridSize = GetGridSize(); foreach (Vector2 v in checker._checkData.checkPoints) { Rect rect = new Rect(v.x - gridSize.x * 0.005f, v.y - gridSize.y * 0.005f, gridSize.x * 0.01f, gridSize.y * 0.01f); string key = v.x + "-" + v.y; checker._dicGrid[key] = rect; checker._dicEnable[key] = true; } } }
void CreateGrid() { PainterChecker checker = target as PainterChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); Texture2D tex = checker._sourceTex as Texture2D; if (painter && painter.SourceTex) { tex = painter.SourceTex as Texture2D; } Texture2D pen = checker._penTex as Texture2D; if (painter && painter._penTex != null) { pen = painter._penTex as Texture2D; } if (tex && pen) { checker._dicGrid = new Dictionary <string, Rect>(); checker._dicEnable = new Dictionary <string, bool>(); Vector2 gridSize = GetGridSize(); int gridW = (int)(gridSize.x); int gridH = (int)(gridSize.y); int canvasW = tex.width; int canvasH = tex.height; for (int w = -canvasW / 2; w <= canvasW / 2; w += gridW) { for (int h = -canvasH / 2; h <= canvasH / 2; h += gridH) { string key = w * 0.01f + "-" + h * 0.01f; Rect value = new Rect(w * 0.01f, h * 0.01f, gridH * 0.01f, gridW * 0.01f); checker._dicGrid[key] = value; checker._dicEnable[key] = checker._gridDefaultStatus; } } } }
Vector2 GetGridSize() { PainterChecker checker = target as PainterChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); Texture2D pen = checker._penTex as Texture2D; if (painter && painter._penTex != null) { pen = painter._penTex as Texture2D; int gridW = Mathf.FloorToInt(pen.width * painter._brushScale / 4f); int gridH = Mathf.FloorToInt(pen.height * painter._brushScale / 4f); return(new Vector2(gridW, gridH)); } if (pen) { int gridW = Mathf.FloorToInt(pen.width * checker._gridScale / 4f); int gridH = Mathf.FloorToInt(pen.height * checker._gridScale / 4f); return(new Vector2(gridW, gridH)); } return(Vector2.one * checker._gridScale); }
public override void OnInspectorGUI() { PainterChecker checker = target as PainterChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); EditorGUILayout.Space(); serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("_gridDefaultStatus"), true); if (painter == null) { EditorGUILayout.PropertyField(serializedObject.FindProperty("_sourceTex"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("_penTex"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("_gridScale"), true); } EditorGUILayout.PropertyField(serializedObject.FindProperty("_enableColor"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("_disableColor"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("_checkData"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("_canResetData"), true); serializedObject.ApplyModifiedProperties(); EditorGUILayout.Space(); serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("_editorBrushSize"), true); serializedObject.ApplyModifiedProperties(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("(Ctrl+)Read Data")) { ReadGrid(); } SpriteRenderer sr = checker.gameObject.GetComponent <SpriteRenderer>(); if (sr == null && GUILayout.Button("Show Source Tex")) { Texture2D tex = checker._sourceTex as Texture2D; if (painter && painter.SourceTex) { tex = painter.SourceTex as Texture2D; } if (tex) { SpriteRenderer render = checker.GetComponent <SpriteRenderer>(); if (!render) { render = checker.gameObject.AddComponent <SpriteRenderer>(); } render.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.one * 0.5f); } } else if (sr && GUILayout.Button("Remove SpriteRenderer")) { DestroyImmediate(sr); GUIUtility.ExitGUI(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("(Ctrl+)Create Data")) { CreateGrid(); } if (GUILayout.Button("Save Grid Data")) { SaveDataToFile(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.TextArea("Cmd/Ctrl + Mouse: Add Point\nAlt + Mouse : Remove Point"); }
private void InitPainterAndChecker(RenderTexturePainter[] arrayPainter = null, PainterChecker[] arrayChecker = null) { _listPainter.Clear(); RenderTexturePainter[] arrayTempPainter = _arrayPainter; if (null != arrayPainter) { arrayTempPainter = _arrayPainter.Concat(arrayPainter).ToArray(); } for (int i = 0; i < arrayTempPainter.Length; i++) { _listPainter.Add(arrayTempPainter[i]); } if (_operation == Operation.Erase && true == _isCleanOtherPaintTool) { _listScribbleTool.Clear(); for (int i = 0; i < _arrayScribbleTool.Length; i++) { ScribbleTool tool = _arrayScribbleTool[i]; for (int j = 0; j < tool.ListPainter.Count; j++) { _listPainter.Add(tool.ListPainter[j]); } _listScribbleTool.Add(tool); } } if (_operation == Operation.Replace && _listPainter.Count == 2) { RenderTexturePainter mainPainter = _listPainter[0]; RenderTexturePainter tempPainter = _listPainter[1]; if (false == mainPainter.IsInited) { mainPainter.Init(); } tempPainter.SourceTex = mainPainter.SourceTex; } LoopPainter((RenderTexturePainter painter) => { if (false == painter.IsInited) { painter.Init(); } UpdatePainterSetting(painter); if (false == painter._isShowSource) { painter.ResetCanvas(); } PainterChecker checker = painter.GetComponent <PainterChecker>(); if (null != checker) { checker.Init(); checker.SetDataByTexture(painter.SourceTex.ToTexture2D(), painter._penTex, painter._brushScale, 0); _listChecker.Add(checker); _dicCheckerIndex.Add(painter, _listChecker.IndexOf(checker)); } }); PainterChecker[] arrayTempChecker = _arrayChecker; if (null != arrayChecker) { arrayTempChecker = _arrayChecker.Concat(arrayChecker).ToArray(); } for (int i = 0; i < arrayTempChecker.Length; i++) { PainterChecker checker = arrayTempChecker[i]; checker.Init(); _listChecker.Add(checker); } }