コード例 #1
0
 void Import(VPaintGroup paintable)
 {
     foreach (var layer in paintable.GetLayerStack().layers)
     {
         VPaint.Instance.layerStack.layers.Add(layer.Clone());
     }
     VPaint.Instance.layerStack.Sanitize();
     VPaint.Instance.ReloadLayers();
 }
コード例 #2
0
//	int layerToImport = -1;
    public override void OnValidatedGUI()
    {
//		IVPaintable paintable = VPaint.GetIVPaintable(Selection.activeGameObject);
//		if(paintable != null)
//		{
//			var obj = paintable as UnityEngine.Object;
//			if(EditorUtility.IsPersistent(obj)) paintable = null;
//		}
//		if(paintable == VPaint.Instance.layerCache) paintable = null;

        VPaintGroup paintable = null;

        if (Selection.activeGameObject)
        {
            paintable = Selection.activeGameObject.GetComponent <VPaintGroup>();
        }

        GUIStyle style = GetWordWrappedLabel();

        GUILayout.Label("Select a VPaint Group to import into the currently selected layer stack.", style);

        GUILayout.Space(10);

        EditorGUILayout.ObjectField(new GUIContent("Import Target:"), paintable, typeof(VPaintGroup), true);

//		List<string> layerNames = new List<string>();
//		layerNames.Add("All Layers");
//		if(paintable != null) {
//			foreach(var l in paintable.GetLayerStack().layers) {
//				layerNames.Add(l.name);
//			}
//			GUI.enabled = true;
//		}else{
//			layerToImport = -1;
//			GUI.enabled = false;
//		}
//		layerToImport = EditorGUILayout.Popup("Import Layers", layerToImport+1, layerNames.ToArray())-1;

        GUILayout.FlexibleSpace();

        EditorGUILayout.BeginHorizontal();

        GUILayout.FlexibleSpace();

        GUI.enabled = paintable != null;
        if (GUILayout.Button("Import"))
        {
            Import(paintable);
        }

        EditorGUILayout.EndHorizontal();

        maxSize = new Vector2(400, 120);
    }
コード例 #3
0
    public virtual void CachePaintGroup(VPaintGroup grp)
    {
        foreach (var obj in storageObjects)
        {
            GameObject.DestroyImmediate(obj, true);
        }
        storageObjects.Clear();

        layerStack = grp.layerStack.Clone();

        try
        {
            var swaps = new Dictionary <VPaintObject, VPaintStorageObject>();
            for (int i = 0; i < grp.colorers.Count; i++)
            {
                EditorUtility.DisplayProgressBar("Caching VPaint Data", "Transferring color data", (float)i / grp.colorers.Count);
                var obj = grp.colorers[i];
                var t   = CreateStorageObject(obj);
                AssetDatabase.AddObjectToAsset(t, this);
                swaps.Add(obj, t);
                storageObjects.Add(t);
            }

            for (int i = 0; i < layerStack.layers.Count; i++)
            {
                float offset = (float)i / layerStack.layers.Count;
                float factor = ((float)(i + 1) / layerStack.layers.Count) - offset;
                var   layer  = layerStack.layers[i];
                for (int d = 0; d < layer.paintData.Count; d++)
                {
                    EditorUtility.DisplayProgressBar("Caching VPaint Data", "Updating layer data", offset + ((float)d / layer.paintData.Count) * factor);
                    var data = layer.paintData[d];
                    var vp   = data.vpaintObject as VPaintObject;
                    if (!vp)
                    {
                        continue;
                    }
                    if (!swaps.ContainsKey(vp))
                    {
                        data.vpaintObject = null;
                        continue;
                    }
                    data.colorer = swaps[vp];
                }
            }

            for (int i = 0; i < grp.vertexCache.Count; i++)
            {
                EditorUtility.DisplayProgressBar("Copying Vertex Cache", "Copying cache " + i, (float)i / grp.vertexCache.Count);
                var cache = grp.vertexCache[i];
                var t     = CreateStorageObject(cache.vpaintObject);
                AssetDatabase.AddObjectToAsset(t, this);
                storageObjects.Add(t);
                vertexCache.Add(new VPaintVertexCache()
                {
                    obj      = t,
                    vertices = cache.vertices
                });
            }
        }finally{
            EditorUtility.ClearProgressBar();
        }

        EditorUtility.SetDirty(this);
    }