// Use this for initialization void Start() { painter = GetComponent <RenderTexturePainter>(); checker = GetComponent <PaintCompleteChecker>(); checker.SetDataByTexture((Texture2D)painter.sourceTexture, painter.penTex, painter.brushScale); }
void SaveDataToFile() { //序列化存储 PaintCompleteChecker checker = target as PaintCompleteChecker; if (checker.gridsDic != null) { if (checker.checkData == null) { AssetDatabase.CreateAsset(GetGridData(), "Assets/" + checker.name + "_ScribbleCheckData.asset"); } else { AssetDatabase.Refresh(); ScribbleCheckData checkData = checker.checkData; checkData.checkPoints = new List <Vector2>(); checkData.gridSize = GetGridSize(); foreach (string key in checker.gridsDic.Keys) { if (checker.enablesDic[key]) { Rect r = checker.gridsDic[key]; checkData.checkPoints.Add(r.center); } } EditorUtility.SetDirty(checker.checkData); AssetDatabase.SaveAssets(); } } }
void CreateGrid() { PaintCompleteChecker checker = target as PaintCompleteChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); if (painter && painter.sourceTex && painter.penTex) { checker.gridsDic = new Dictionary <string, Rect> (); checker.enablesDic = new Dictionary <string, bool> (); Vector2 gridSize = GetGridSize(); int gridW = (int)gridSize.x; int gridH = (int)gridSize.y; int canvasW = painter.sourceTex.width; int canvasH = painter.sourceTex.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.gridsDic[key] = value; checker.enablesDic[key] = checker.gridDefaultStatus; } } } }
Vector2 GetGridSize() { PaintCompleteChecker checker = target as PaintCompleteChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); int gridW = Mathf.FloorToInt(painter.penTex.width * painter.brushScale / 4f); int gridH = Mathf.FloorToInt(painter.penTex.height * painter.brushScale / 4f); return(new Vector2(gridW, gridH)); }
void SaveDataToFile() { //序列化存储 PaintCompleteChecker checker = target as PaintCompleteChecker; if (checker.gridsDic != null) { AssetDatabase.CreateAsset(GetGridData(), "Assets/" + checker.name + "_ScribbleCheckData.asset"); } }
void OnSceneGUI() { PaintCompleteChecker checker = target as PaintCompleteChecker; Handles.color = Color.blue; int controlID = GUIUtility.GetControlID(FocusType.Passive); Event current = Event.current; if (checker.gridsDic != 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.gridsDic.Keys) { Rect rect = checker.gridsDic[key]; if (Intersect(ref rect, ref brushSize)) { checker.enablesDic[key] = true; } } } else if (current.alt) { foreach (string key in checker.gridsDic.Keys) { Rect rect = checker.gridsDic[key]; if (Intersect(ref rect, ref brushSize)) { checker.enablesDic[key] = false; } } } Event.current.Use(); break; case EventType.Layout: HandleUtility.AddDefaultControl(controlID); break; } } }
public override void OnInspectorGUI() { EditorGUILayout.Space(); serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("gridDefaultStatus"), true); EditorGUILayout.PropertyField(serializedObject.FindProperty("brushSize"), 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(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("(Ctrl+)Read Data")) { ReadGrid(); } if (GUILayout.Button("Show Source Tex")) { PaintCompleteChecker checker = target as PaintCompleteChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); if (painter && painter.sourceTex) { SpriteRenderer render = checker.GetComponent <SpriteRenderer>(); if (!render) { render = checker.gameObject.AddComponent <SpriteRenderer>(); } render.sprite = Sprite.Create((Texture2D)painter.sourceTex, new Rect(0, 0, painter.sourceTex.width, painter.sourceTex.height), Vector2.one * 0.5f); } } 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"); }
ScribbleCheckData GetGridData() { PaintCompleteChecker checker = target as PaintCompleteChecker; ScribbleCheckData checkData = ScriptableObject.CreateInstance <ScribbleCheckData>(); checkData.checkPoints = new List <Vector2>(); checkData.gridSize = GetGridSize(); foreach (string key in checker.gridsDic.Keys) { if (checker.enablesDic[key]) { Rect r = checker.gridsDic[key]; checkData.checkPoints.Add(r.center); } } return(checkData); }
void ReadGrid() { PaintCompleteChecker checker = target as PaintCompleteChecker; if (checker.checkData != null) { checker.gridsDic = new Dictionary <string, Rect>(); checker.enablesDic = 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.gridsDic[key] = rect; checker.enablesDic[key] = true; } } }
Vector2 GetGridSize() { PaintCompleteChecker checker = target as PaintCompleteChecker; RenderTexturePainter painter = checker.gameObject.GetComponent <RenderTexturePainter>(); Texture2D pen = checker.penTexture 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); }
// Use this for initialization void Start() { _painter = GetComponent <RenderTexturePainter>(); _completeChecker = GetComponent <PaintCompleteChecker>(); }