forked from MattRix/UnityDecompiled
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaterialAnimationUtility.cs
More file actions
94 lines (94 loc) · 4.6 KB
/
Copy pathMaterialAnimationUtility.cs
File metadata and controls
94 lines (94 loc) · 4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using UnityEditor;
using UnityEngine;
namespace UnityEditorInternal
{
internal static class MaterialAnimationUtility
{
private const string kMaterialPrefix = "material.";
private static UndoPropertyModification[] CreateUndoPropertyModifications(int count, UnityEngine.Object target)
{
UndoPropertyModification[] array = new UndoPropertyModification[count];
for (int i = 0; i < array.Length; i++)
{
array[i].propertyModification = new PropertyModification();
array[i].propertyModification.target = target;
}
return array;
}
private static void SetupPropertyModification(string name, float value, UndoPropertyModification prop)
{
prop.propertyModification.propertyPath = "material." + name;
prop.propertyModification.value = value.ToString();
}
private static void ApplyMaterialModificationToAnimationRecording(MaterialProperty materialProp, UnityEngine.Object target, float value)
{
UndoPropertyModification[] array = MaterialAnimationUtility.CreateUndoPropertyModifications(1, target);
MaterialAnimationUtility.SetupPropertyModification(materialProp.name, value, array[0]);
Undo.postprocessModifications(array);
}
private static void ApplyMaterialModificationToAnimationRecording(MaterialProperty materialProp, UnityEngine.Object target, Color color)
{
UndoPropertyModification[] array = MaterialAnimationUtility.CreateUndoPropertyModifications(4, target);
MaterialAnimationUtility.SetupPropertyModification(materialProp.name + ".r", color.r, array[0]);
MaterialAnimationUtility.SetupPropertyModification(materialProp.name + ".g", color.g, array[1]);
MaterialAnimationUtility.SetupPropertyModification(materialProp.name + ".b", color.b, array[2]);
MaterialAnimationUtility.SetupPropertyModification(materialProp.name + ".a", color.a, array[3]);
Undo.postprocessModifications(array);
}
private static void ApplyMaterialModificationToAnimationRecording(string name, UnityEngine.Object target, Vector4 vec)
{
UndoPropertyModification[] array = MaterialAnimationUtility.CreateUndoPropertyModifications(4, target);
MaterialAnimationUtility.SetupPropertyModification(name + ".x", vec.x, array[0]);
MaterialAnimationUtility.SetupPropertyModification(name + ".y", vec.y, array[1]);
MaterialAnimationUtility.SetupPropertyModification(name + ".z", vec.z, array[2]);
MaterialAnimationUtility.SetupPropertyModification(name + ".w", vec.w, array[3]);
Undo.postprocessModifications(array);
}
public static bool IsAnimated(MaterialProperty materialProp, Renderer target)
{
if (materialProp.type == MaterialProperty.PropType.Texture)
{
return AnimationMode.IsPropertyAnimated(target, "material." + materialProp.name + "_ST");
}
return AnimationMode.IsPropertyAnimated(target, "material." + materialProp.name);
}
public static void SetupMaterialPropertyBlock(MaterialProperty materialProp, int changedMask, Renderer target)
{
MaterialPropertyBlock materialPropertyBlock = new MaterialPropertyBlock();
target.GetPropertyBlock(materialPropertyBlock);
materialProp.WriteToMaterialPropertyBlock(materialPropertyBlock, changedMask);
target.SetPropertyBlock(materialPropertyBlock);
}
public static bool ApplyMaterialModificationToAnimationRecording(MaterialProperty materialProp, int changedMask, Renderer target, object oldValue)
{
switch (materialProp.type)
{
case MaterialProperty.PropType.Color:
MaterialAnimationUtility.SetupMaterialPropertyBlock(materialProp, changedMask, target);
MaterialAnimationUtility.ApplyMaterialModificationToAnimationRecording(materialProp, target, (Color)oldValue);
return true;
case MaterialProperty.PropType.Vector:
MaterialAnimationUtility.SetupMaterialPropertyBlock(materialProp, changedMask, target);
MaterialAnimationUtility.ApplyMaterialModificationToAnimationRecording(materialProp, target, (Vector4)oldValue);
return true;
case MaterialProperty.PropType.Float:
case MaterialProperty.PropType.Range:
MaterialAnimationUtility.SetupMaterialPropertyBlock(materialProp, changedMask, target);
MaterialAnimationUtility.ApplyMaterialModificationToAnimationRecording(materialProp, target, (float)oldValue);
return true;
case MaterialProperty.PropType.Texture:
if (MaterialProperty.IsTextureOffsetAndScaleChangedMask(changedMask))
{
string name = materialProp.name + "_ST";
MaterialAnimationUtility.SetupMaterialPropertyBlock(materialProp, changedMask, target);
MaterialAnimationUtility.ApplyMaterialModificationToAnimationRecording(name, target, (Vector4)oldValue);
return true;
}
return false;
default:
return false;
}
}
}
}