public static void DrawTreesElements(DataCreator creator, EditorWindow editor) { if (creator.selectedBlendTree == -1 || creator.blendTrees.Count == 0 || creator.selectedBlendTree >= creator.blendTrees.Count) { creator.selectedBlendTree = -1; GUILayout.Label("No blend tree item is selected"); return; } BlendTreeInfo blendTree = creator.blendTrees[creator.selectedBlendTree]; GUILayoutElements.DrawHeader(blendTree.name, GUIResources.GetLightHeaderStyle_MD()); blendTree.name = EditorGUILayout.TextField( new GUIContent("Blend Tree name"), blendTree.name ); blendTree.findInYourself = EditorGUILayout.Toggle(new GUIContent("Find in yourself"), blendTree.findInYourself); blendTree.blendToYourself = EditorGUILayout.Toggle(new GUIContent("Blend to yourself"), blendTree.blendToYourself); blendTree.useSpaces = EditorGUILayout.Toggle(new GUIContent("Use spaces"), blendTree.useSpaces); if (blendTree.useSpaces) { if (blendTree.clips.Count == 2) { blendTree.spaces = EditorGUILayout.IntField(new GUIContent("Spaces"), blendTree.spaces); } else { GUILayout.Label("You can use \"Spaces\" with only 2 animations!"); } } DrawElement(blendTree, creator.selectedBlendTree); }
private static void DrawTrajectoryTimes(DataCreator creator) { if (creator.trajectoryStepTimes == null) { creator.trajectoryStepTimes = new List <float>(); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Add Trajectory Time")) { if (creator.trajectoryStepTimes.Count < 10) { if (creator.trajectoryStepTimes.Count == 0) { creator.trajectoryStepTimes.Add(0); } else { creator.trajectoryStepTimes.Add(creator.trajectoryStepTimes[creator.trajectoryStepTimes.Count - 1] + 0.33f); } } else { Debug.LogWarning("Max number of trajectorySteps is equal 10"); } } if (GUILayout.Button("Sort Trajectory")) { creator.trajectoryStepTimes.Sort(); } GUILayout.EndHorizontal(); for (int i = 0; i < creator.trajectoryStepTimes.Count; i++) { GUILayout.BeginHorizontal(); GUILayout.Space(10); GUILayout.Label( new GUIContent(string.Format("Time {0}", i + 1)), GUILayout.Width(75) ); creator.trajectoryStepTimes[i] = EditorGUILayout.FloatField( creator.trajectoryStepTimes[i] ); if (GUILayout.Button("X", GUILayout.Width(25))) { creator.trajectoryStepTimes.RemoveAt(i); i--; } GUILayout.Space(10); GUILayout.EndHorizontal(); } }
public static void DrawSelectedSequence(DataCreator creator, EditorWindow editor, float rectWidth) { if (creator.selectedSequence == -1 || creator.sequences.Count == 0 || creator.selectedSequence >= creator.sequences.Count) { creator.selectedSequence = -1; GUILayout.Label("No aniamations sequence item is selected"); return; } DrawSequence( creator, creator.sequences[creator.selectedSequence], creator.selectedSequence, rectWidth ); }
public static void DrawOptions(DataCreator creator) { float space = 5f; GUILayout.Space(space); GUILayoutElements.DrawHeader( "Options", GUIResources.GetLightHeaderStyle_MD(), GUIResources.GetDarkHeaderStyle_MD(), ref creator.basicOptionFold ); if (creator.basicOptionFold) { DrawBasicOptions(creator); } GUILayout.Space(space); GUILayoutElements.DrawHeader( "Bones used to motion matching", GUIResources.GetLightHeaderStyle_MD(), GUIResources.GetDarkHeaderStyle_MD(), ref creator.maskFold ); if (creator.maskFold) { DrawNeededBones(creator); } GUILayout.Space(space); GUILayoutElements.DrawHeader( "Trajectory Times", GUIResources.GetLightHeaderStyle_MD(), GUIResources.GetDarkHeaderStyle_MD(), ref creator.trajectoryFold ); if (creator.trajectoryFold) { DrawTrajectoryTimes(creator); } }
private void DrawCreatorPlacing() { GUILayout.BeginArea(creatorPlacing); GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.Space(10); creator = (DataCreator)EditorGUILayout.ObjectField( new GUIContent("Data creator"), creator, typeof(DataCreator), true ); if (GUILayout.Button("Calculate Data") && creator != null) { if (creator.gameObjectTransform != null && creator.avatarMask != null) { CalculateDataButton(); } } GUILayout.Space(10); GUILayout.EndHorizontal(); GUILayout.EndArea(); }
private static void DrawBasicOptions(DataCreator creator) { creator.gameObjectTransform = (Transform)EditorGUILayout.ObjectField(new GUIContent("Game Object transform"), creator.gameObjectTransform, typeof(Transform), true); GUILayout.Space(5); creator.posesPerSecond = Mathf.Clamp( EditorGUILayout.IntField(new GUIContent("Poses per second"), creator.posesPerSecond), 1, 1000000 ); GUILayout.Space(5); creator.findInYourself = EditorGUILayout.Toggle(new GUIContent("Find in yourself"), creator.findInYourself); GUILayout.Space(5); creator.blendToYourself = EditorGUILayout.Toggle(new GUIContent("Blending to yourself"), creator.blendToYourself); GUILayout.Space(5); GUILayout.Label("Only for single clips:"); GUILayout.BeginHorizontal(); GUILayout.Space(25); GUILayout.BeginVertical(); creator.cutTimeFromStart = EditorGUILayout.FloatField( new GUIContent("Cut time from start"), creator.cutTimeFromStart ); creator.cutTimeToEnd = EditorGUILayout.FloatField( new GUIContent("Cut time to end"), creator.cutTimeToEnd ); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.Space(5); }
private static void DrawNeededBones(DataCreator creator) { GUILayout.BeginHorizontal(); creator.avatarMask = (AvatarMask)EditorGUILayout.ObjectField( new GUIContent("Skeleton Mask"), creator.avatarMask, typeof(AvatarMask), true ); GUILayout.EndHorizontal(); GUILayout.Space(5); int activeBones = 0; if (creator.bonesWeights == null) { creator.bonesWeights = new List <Vector2>(); } else if (creator.avatarMask != null) { if (creator.gameObjectTransform != null) { for (int i = 0; i < creator.avatarMask.transformCount; i++) { if (creator.avatarMask.GetTransformActive(i)) { if (creator.gameObjectTransform.Find(creator.avatarMask.GetTransformPath(i)) != null) { string name = creator.gameObjectTransform.Find(creator.avatarMask.GetTransformPath(i)).name; if (name != creator.gameObjectTransform.name) { activeBones++; GUILayoutElements.DrawHeader(string.Format("{0} weights", name), GUIResources.GetLightHeaderStyle_SM()); if ((creator.bonesWeights.Count) < activeBones) { creator.bonesWeights.Add(Vector2.one); } //float posW = creator.bonesWeights[activeBones - 1].x; //float velW = creator.bonesWeights[activeBones - 1].y; //GUILayout.BeginHorizontal(); //GUILayout.Label(new GUIContent("Position"), GUILayout.Width(75)); //posW = EditorGUILayout.Slider( // posW, 0, 1f // ); //GUILayout.EndHorizontal(); //GUILayout.BeginHorizontal(); //GUILayout.Label(new GUIContent("Velocity"), GUILayout.Width(75)); //velW = EditorGUILayout.Slider( // velW, 0, 1f // ); //GUILayout.EndHorizontal(); //creator.bonesWeights[activeBones - 1] = new Vector2(posW, velW); GUILayout.Space(5); } } else { Debug.LogWarning("Game object transform is wrong"); return; } } } if (creator.bonesWeights.Count > activeBones) { for (; creator.bonesWeights.Count > activeBones;) { creator.bonesWeights.RemoveAt(creator.bonesWeights.Count - 1); } } } } if (activeBones > 10) { GUILayout.Label("Max number of matched bones is equal 10"); } }
public static void DrawAnimationList(DataCreator creator) { GUILayout.Space(5); GUILayout.Label("Drag And droop animations here", GUIResources.GetLightHeaderStyle_MD()); Event e = Event.current; Rect dropRect = GUILayoutUtility.GetLastRect(); if (dropRect.Contains(e.mousePosition)) { if (Event.current.type == EventType.DragUpdated) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; Event.current.Use(); } else if (Event.current.type == EventType.DragPerform) { bool correctData = true; List <AnimationClip> newData = new List <AnimationClip>(); for (int i = 0; i < DragAndDrop.objectReferences.Length; i++) { try { newData.Add((AnimationClip)DragAndDrop.objectReferences[i]); } catch (Exception) { correctData = false; break; } } if (correctData) { for (int i = 0; i < newData.Count; i++) { creator.clips.Add(newData[i]); } } Event.current.Use(); } } GUILayout.Space(10); for (int i = 0; i < creator.clips.Count; i++) { GUILayout.BeginHorizontal(); GUILayout.Space(10); EditorGUILayout.ObjectField(creator.clips[i], typeof(AnimationClip), false); if (GUILayout.Button("X", GUILayout.Width(25))) { creator.clips.RemoveAt(i); i--; } GUILayout.EndHorizontal(); } GUILayout.Space(10); GUILayout.BeginHorizontal(); if (GUILayout.Button("Clear")) { creator.clips.Clear(); } if (GUILayout.Button("Remove nulls")) { for (int i = 0; i < creator.clips.Count; i++) { if (creator.clips[i] == null) { creator.clips.RemoveAt(i); i--; } } } GUILayout.EndHorizontal(); GUILayout.Space(5); }
public static void DrawTreesList(DataCreator creator, EditorWindow editor) { GUILayoutElements.DrawHeader("Blend Trees", GUIResources.GetDarkHeaderStyle_MD()); GUILayout.BeginHorizontal(); if (GUILayout.Button("Add")) { creator.blendTrees.Add(new BlendTreeInfo("New info")); } //if (GUILayout.Button("Clear")) //{ // creator.blendTrees.Clear(); //} GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.BeginHorizontal(); GUILayout.Label("Find", GUILayout.Width(50)); creator.findingBlendTree = GUILayout.TextField(creator.findingBlendTree); GUILayout.EndHorizontal(); GUILayout.Space(5); for (int i = 0; i < creator.blendTrees.Count; i++) { if (creator.findingBlendTree != "" && !creator.blendTrees[i].name.ToLower().Contains(creator.findingBlendTree.ToLower())) { continue; } GUILayout.BeginHorizontal(); GUILayout.Space(5); GUILayout.Label( creator.blendTrees[i].name, i == creator.selectedBlendTree ? GUIResources.GetDarkHeaderStyle_SM() : GUIResources.GetLightHeaderStyle_SM() ); Event e = Event.current; Rect r = GUILayoutUtility.GetLastRect(); if (r.Contains(e.mousePosition) && e.type == EventType.MouseDown && e.button == 0) { if (creator.selectedBlendTree == i) { creator.selectedBlendTree = -1; } else { creator.selectedBlendTree = i; } e.Use(); editor.Repaint(); } if (GUILayout.Button("Copy", GUILayout.Width(40))) { creator.blendTrees.Add(new BlendTreeInfo(creator.blendTrees[i].name + "_NEW")); for (int j = 0; j < creator.blendTrees[i].clips.Count; j++) { creator.blendTrees[creator.blendTrees.Count - 1].AddClip(creator.blendTrees[i].clips[j]); } } if (GUILayout.Button("X", GUILayout.Width(25))) { creator.blendTrees.RemoveAt(i); i--; } GUILayout.EndHorizontal(); GUILayout.Space(5); } GUILayout.Space(5); }
public static void DrawSequencesList(DataCreator creator, EditorWindow editor) { GUILayoutElements.DrawHeader("Sequences", GUIResources.GetDarkHeaderStyle_MD()); GUILayout.BeginHorizontal(); if (GUILayout.Button("Add")) { creator.sequences.Add(new AnimationsSequence("new Sequence")); } //if (GUILayout.Button("Clear")) //{ // creator.sequences.Clear(); //} GUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.BeginHorizontal(); GUILayout.Label("Find", GUILayout.Width(50)); creator.findingSequence = EditorGUILayout.TextField(creator.findingSequence); GUILayout.EndHorizontal(); GUILayout.Space(5); for (int i = 0; i < creator.sequences.Count; i++) { if (creator.findingSequence != "" && !creator.sequences[i].name.ToLower().Contains(creator.findingSequence.ToLower())) { continue; } GUILayout.BeginHorizontal(); GUILayout.Space(5); GUILayout.Label( creator.sequences[i].name, i == creator.selectedSequence ? GUIResources.GetDarkHeaderStyle_SM() : GUIResources.GetLightHeaderStyle_SM() ); Event e = Event.current; Rect r = GUILayoutUtility.GetLastRect(); if (r.Contains(e.mousePosition) && e.type == EventType.MouseDown && e.button == 0) { if (creator.selectedSequence == i) { creator.selectedSequence = -1; } else { creator.selectedSequence = i; } e.Use(); editor.Repaint(); } if (GUILayout.Button("Copy", GUILayout.Width(40))) { AnimationsSequence info = new AnimationsSequence(creator.sequences[i].name + "_New"); for (int j = 0; j < creator.sequences[i].clips.Count; j++) { info.clips.Add(creator.sequences[i].clips[j]); info.neededInfo.Add(creator.sequences[i].neededInfo[j]); info.findPoseInClip.Add(creator.sequences[i].findPoseInClip[j]); } creator.sequences.Insert(i + 1, info); } if (GUILayout.Button("X", GUILayout.Width(25))) { creator.sequences.RemoveAt(i); i--; } GUILayout.Space(10); GUILayout.EndHorizontal(); GUILayout.Space(5); } GUILayout.Space(5); }
private static void DrawSequence(DataCreator creator, AnimationsSequence seq, int index, float rectWidth) { if (seq.findPoseInClip.Count != seq.clips.Count) { for (int i = 0; i < seq.clips.Count; i++) { seq.findPoseInClip.Add(true); } } GUILayoutElements.DrawHeader( seq.name, GUIResources.GetLightHeaderStyle_MD() ); GUILayout.Space(5); seq.name = EditorGUILayout.TextField( new GUIContent("Animation sequence name"), seq.name ); //seq.loop = EditorGUILayout.Toggle( // new GUIContent("Loop"), // seq.loop // ); seq.findInYourself = EditorGUILayout.Toggle(new GUIContent("Find in yourself"), seq.findInYourself); seq.blendToYourself = EditorGUILayout.Toggle(new GUIContent("Blend to yourself"), seq.blendToYourself); GUILayout.Space(5); GUILayout.BeginHorizontal(); if (GUILayout.Button("Add clip")) { seq.AddClip(null); } GUILayout.EndHorizontal(); GUILayout.Space(5); float floatWidth = 60f; float buttonWidth = 25f; float findPose = 60f; GUILayout.BeginHorizontal(); GUILayout.Label("Animation"); GUILayout.Label("Find pose", GUILayout.Width(findPose)); GUILayout.Label("Start", GUILayout.Width(floatWidth)); GUILayout.Label("End", GUILayout.Width(floatWidth)); GUILayout.Label("Blend", GUILayout.Width(floatWidth)); GUILayout.Space(buttonWidth); GUILayout.EndHorizontal(); for (int i = 0; i < seq.clips.Count; i++) { GUILayout.BeginHorizontal(); //GUILayout.Label(string.Format("{0}.", i + 1)); seq.clips[i] = (AnimationClip)EditorGUILayout.ObjectField( seq.clips[i], typeof(AnimationClip), true ); seq.findPoseInClip[i] = EditorGUILayout.Toggle(seq.findPoseInClip[i], GUILayout.Width(findPose)); float x = seq.neededInfo[i].x; float y = seq.neededInfo[i].y; float z = seq.neededInfo[i].z; //GUILayout.Label("Start time"); x = EditorGUILayout.FloatField(x, GUILayout.Width(floatWidth)); //GUILayout.Label("Blend start time"); y = EditorGUILayout.FloatField(y, GUILayout.Width(floatWidth)); //GUILayout.Label("Blend time"); z = EditorGUILayout.FloatField(z, GUILayout.Width(floatWidth)); seq.neededInfo[i] = new Vector3(x, y, z); if (GUILayout.Button("X", GUILayout.Width(buttonWidth))) { seq.RemoveAnimationsAt(i); } GUILayout.EndHorizontal(); } GUILayout.Space(10); //deltaTimeCaculation = Time.realtimeSinceStartup; seq.CalculateLength(); GUILayout.Label(string.Format("Sequence length: \t {0}", seq.length)); GUILayout.Space(10); }
private void SetAsset(DataCreator asset) { this.creator = asset; }