Exemplo n.º 1
0
    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();
            }
        }
    }
Exemplo n.º 2
0
    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();
        }
    }
Exemplo n.º 3
0
 private void LoopChecker(CallbackLoopChecker callback)
 {
     for (int i = 0; i < _listChecker.Count; i++)
     {
         PainterChecker checker = _listChecker[i];
         callback.Invoke(checker);
     }
 }
Exemplo n.º 4
0
    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;
            }
        }
    }
Exemplo n.º 5
0
    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);
    }
Exemplo n.º 6
0
    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;
            }
        }
    }
Exemplo n.º 7
0
    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;
                }
            }
        }
    }
Exemplo n.º 8
0
    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);
    }
Exemplo n.º 9
0
    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");
    }
Exemplo n.º 10
0
    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);
        }
    }