public void ExtractSkeleton(Transform[] bones) { ArrayExtensions.Clear(ref Bones); Action <Transform, Bone> recursion = null; recursion = new Action <Transform, Bone>((transform, parent) => { if (System.Array.Find(bones, x => x == transform)) { Bone bone = new Bone(this, transform, Bones.Length); ArrayExtensions.Append(ref Bones, bone); if (parent != null) { bone.Parent = parent.Index; ArrayExtensions.Append(ref parent.Childs, bone.Index); } parent = bone; } for (int i = 0; i < transform.childCount; i++) { recursion(transform.GetChild(i), parent); } }); recursion(GetRoot(), null); BoneNames = new string[0]; }
public Sensor AddSensor(string id, string[] bones, Vector3 offset, float threshold, float velocity, LayerMask mask) { Names = null; Sensor sensor = new Sensor(this, id, Data.Source.GetBoneIndices(bones), offset, threshold, velocity); sensor.Mask = mask; ArrayExtensions.Append(ref Sensors, sensor); return(sensor); }
public StyleFunction AddStyle(string name) { if (HasStyle(name)) { Debug.Log("Style with name " + name + " already exists."); return(GetStyle(name)); } else { Identifiers = null; return(ArrayExtensions.Append(ref Functions, new StyleFunction(this, name))); } }
public void Feed(float value, string name, float weight = 1f) { if (!Setup) { ArrayExtensions.Append(ref Values, value); ArrayExtensions.Append(ref Names, name); ArrayExtensions.Append(ref Weights, weight); } else { Dim += 1; Values[Dim - 1] = value; } }
public void LoadAnimations() { Animations = new AnimationClip[0]; Import = new bool[0]; foreach (string file in System.IO.Directory.GetFiles(Source)) { AnimationClip clip = (AnimationClip)AssetDatabase.LoadAssetAtPath(file, typeof(AnimationClip)); if (clip != null) { ArrayExtensions.Append(ref Animations, clip); ArrayExtensions.Append(ref Import, true); } } }
public Value AddValue(string name, Func <float> func) { Value value = System.Array.Find(Values, x => x.Name == name); if (value != null) { Debug.Log("Value with name " + name + " already contained."); } else { value = new Value(name, func); ArrayExtensions.Append(ref Values, value); } return(value); }
public Function AddFunction(string name, Func <float, float> func) { Function function = System.Array.Find(Functions, x => x.Name == name); if (function != null) { Debug.Log("Function with name " + name + " already contained."); } else { function = new Function(name, func); ArrayExtensions.Append(ref Functions, function); } return(function); }
private Module CreateModule(string id) { Module module = (Module)ScriptableObject.CreateInstance(id); if (module == null) { Debug.Log("Module of class type " + id + " could not be loaded in " + GetName() + "."); } else { ArrayExtensions.Append(ref Modules, module.Initialize(this)); AssetDatabase.AddObjectToAsset(Modules.Last(), this); } return(module); }
public Logic AddLogic(string name, Func <bool> func) { Logic item = System.Array.Find(Logics, x => x.Name == name); if (item != null) { Debug.Log("Logic with name " + name + " already contained."); } else { item = new Logic(name, func); ArrayExtensions.Append(ref Logics, item); } return(item); }
public void Import(string fn, string id) { for (int i = 0; i < Buffers.Length; i++) { if (Buffers[i] != null) { if (Buffers[i].ID == id) { Debug.Log("Buffer with ID " + id + " already contained."); return; } } } ArrayExtensions.Append(ref Buffers, ReadBinary(fn, id)); }
private void InspectSkeleton(Transform transform, int indent) { float indentSpace = 10f; Bone bone = Target.FindBone(transform.name); Utility.SetGUIColor(bone == null ? UltiDraw.LightGrey : UltiDraw.Mustard); using (new EditorGUILayout.HorizontalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.BeginHorizontal(); for (int i = 0; i < indent; i++) { EditorGUILayout.LabelField("|", GUILayout.Width(indentSpace)); } EditorGUILayout.LabelField("-", GUILayout.Width(indentSpace)); EditorGUILayout.LabelField(transform.name, GUILayout.Width(400f - indent * indentSpace)); GUILayout.FlexibleSpace(); if (bone != null) { EditorGUILayout.LabelField("Index: " + bone.Index.ToString(), GUILayout.Width(60f)); EditorGUILayout.LabelField("Length: " + bone.GetLength().ToString("F3"), GUILayout.Width(90f)); bone.Color = EditorGUILayout.ColorField(bone.Color); } if (Utility.GUIButton("Bone", bone == null ? UltiDraw.White : UltiDraw.DarkGrey, bone == null ? UltiDraw.DarkGrey : UltiDraw.White)) { Transform[] bones = new Transform[Target.Bones.Length]; for (int i = 0; i < bones.Length; i++) { bones[i] = Target.Bones[i].Transform; } if (bone == null) { ArrayExtensions.Append(ref bones, transform); Target.ExtractSkeleton(bones); } else { ArrayExtensions.Remove(ref bones, transform); Target.ExtractSkeleton(bones); } } EditorGUILayout.EndHorizontal(); } for (int i = 0; i < transform.childCount; i++) { InspectSkeleton(transform.GetChild(i), indent + 1); } }
public ObjectData GetVersion(string key) { bool isNNull = objData != null && objData.Length > 0; // && !objData.Any(x => x == null); ObjectData data = isNNull ? objData.SingleOrDefault(x => x != null && x.Version == key) : null; if (isNNull && data != null) { return(data); } else if (data == null || !isNNull) { Console.WriteLine("Creating a new version: {0}...", key); ObjectData obj = new ObjectData() { Version = key }; ArrayExtensions.Append(ref objData, obj); return(objData[objData.Length - 1]); } Console.WriteLine("Something went wrong creating a new version for {0}...", key); return(null); }
public void AddBone(int index) { ArrayExtensions.Append(ref Bones, index); }
public void AddSequence(int start, int end) { ArrayExtensions.Append(ref Sequences, new Sequence(start, end)); }
public static Model BuildModel(Model reference, Transform root, params Transform[] objectives) { if (reference == null) { reference = new Model(); } if (reference.GetRoot() == root && reference.Objectives.Length == objectives.Length) { for (int i = 0; i < objectives.Length; i++) { if (reference.Bones[reference.Objectives[i].Bone].Transform != objectives[i]) { break; } if (i == objectives.Length - 1) { return(reference); } } } objectives = Verify(root, objectives); Model model = new Model(); for (int i = 0; i < objectives.Length; i++) { Transform[] chain = GetChain(root, objectives[i]); Objective objective = reference.FindObjective(objectives[i]); if (objective == null) { objective = new Objective(); } for (int j = 0; j < chain.Length; j++) { Bone bone = model.FindBone(chain[j]); if (bone == null) { bone = reference.FindBone(chain[j]); if (bone != null) { bone.Childs = new int[0]; bone.Objectives = new int[0]; } if (bone == null) { bone = new Bone(); bone.Transform = chain[j]; bone.ZeroPosition = chain[j].localPosition; bone.ZeroRotation = chain[j].localRotation; } Bone parent = model.FindBone(chain[j].parent); if (parent != null) { ArrayExtensions.Append(ref parent.Childs, model.Bones.Length); } bone.Index = model.Bones.Length; ArrayExtensions.Append(ref model.Bones, bone); } ArrayExtensions.Append(ref bone.Objectives, i); } objective.Bone = model.FindBone(chain.Last()).Index; objective.TargetPosition = objectives[i].transform.position; objective.TargetRotation = objectives[i].transform.rotation; objective.Index = model.Objectives.Length; ArrayExtensions.Append(ref model.Objectives, objective); } model.Iterations = reference.Iterations; model.Threshold = reference.Threshold; model.Activation = reference.Activation; model.AvoidBoneLimits = reference.AvoidBoneLimits; model.AllowRootUpdateX = reference.AllowRootUpdateX; model.AllowRootUpdateY = reference.AllowRootUpdateY; model.AllowRootUpdateZ = reference.AllowRootUpdateZ; model.SeedZeroPose = reference.SeedZeroPose; return(model); }
public void Inspector() { Target.Refresh(); //IMPORT SECTION Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Utility.SetGUIColor(UltiDraw.Yellow); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.LabelField("Import Settings"); } Utility.SetGUIColor(UltiDraw.LightGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (Utility.GUIButton("Add Folder", UltiDraw.DarkGrey, UltiDraw.White, 100f, 18f)) { ArrayExtensions.Append(ref Target.Folders, string.Empty); ArrayExtensions.Append(ref Target.Imports, true); } if (Utility.GUIButton("Remove Folder", UltiDraw.DarkGrey, UltiDraw.White, 100f, 18f)) { ArrayExtensions.Shrink(ref Target.Folders); ArrayExtensions.Shrink(ref Target.Imports); } if (Utility.GUIButton(Target.GetLoadStrategy(), UltiDraw.LightGrey, UltiDraw.Black, 100f, 18f)) { Target.ToggleLoadStrategy(); } if (Utility.GUIButton(Target.LoadTagged ? "Tagged" : "Any", UltiDraw.LightGrey, UltiDraw.Black, 100f, 18f)) { Target.LoadTagged = !Target.LoadTagged; } GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); for (int i = 0; i < Target.Folders.Length; i++) { EditorGUILayout.BeginHorizontal(); Utility.SetGUIColor(Target.IsFolderValid(i) ? (Target.Imports[i] ? UltiDraw.DarkGreen : UltiDraw.Gold) : UltiDraw.DarkRed); Target.Folders[i] = EditorGUILayout.TextField(Target.Folders[i]); Target.Imports[i] = EditorGUILayout.Toggle(Target.Imports[i], GUILayout.Width(20f)); Utility.ResetGUIColor(); EditorGUILayout.EndHorizontal(); } } if (!Target.Importing) { if (Utility.GUIButton("Import", UltiDraw.DarkGrey, UltiDraw.White)) { EditorCoroutines.StartCoroutine(Target.Import(() => ApplyFilter()), this); } } else { EditorGUI.DrawRect(new Rect(EditorGUILayout.GetControlRect().x, EditorGUILayout.GetControlRect().y, Target.Progress * EditorGUILayout.GetControlRect().width, 25f), UltiDraw.Green.Opacity(0.75f)); EditorGUI.LabelField(new Rect(EditorGUILayout.GetControlRect()), Target.CurrentFile + " / " + Target.TotalFiles); EditorGUI.BeginDisabledGroup(!Target.Importing); if (Utility.GUIButton(!Target.Importing ? "Aborting" : "Stop", !Target.Importing ? UltiDraw.Gold : UltiDraw.DarkRed, UltiDraw.White)) { Target.Importing = false; } EditorGUI.EndDisabledGroup(); } } } //DATA SECTION Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Utility.SetGUIColor(UltiDraw.Yellow); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.LabelField("Data Inspector"); } Utility.SetGUIColor(UltiDraw.LightGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); //Selection Browser int pivot = MotionEditor.FindIndex(Assets, Utility.GetAssetGUID(Target.Data)); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); int selectIndex = EditorGUILayout.Popup(pivot, Enums); if (EditorGUI.EndChangeCheck()) { if (selectIndex != -1) { Target.LoadData(Assets[selectIndex]); } } EditorGUI.BeginChangeCheck(); Filter = EditorGUILayout.TextField(Filter, GUILayout.Width(200f)); if (EditorGUI.EndChangeCheck()) { ApplyFilter(); } if (Utility.GUIButton("<", UltiDraw.DarkGrey, UltiDraw.White, 55f)) { LoadPreviousAsset(); } if (Utility.GUIButton(">", UltiDraw.DarkGrey, UltiDraw.White, 55f)) { LoadNextAsset(); } EditorGUILayout.EndHorizontal(); //Slider Browser EditorGUILayout.BeginHorizontal(); if (Assets.Length == 0) { EditorGUILayout.IntSlider(0, 0, 0); } else { EditorGUI.BeginChangeCheck(); int sliderIndex = EditorGUILayout.IntSlider(pivot + 1, 1, Assets.Length); if (EditorGUI.EndChangeCheck()) { Target.LoadData(Assets[sliderIndex - 1]); } } EditorGUILayout.LabelField("/ " + Assets.Length, GUILayout.Width(60f)); EditorGUILayout.EndHorizontal(); if (Target.Data != null) { Frame frame = Target.GetCurrentFrame(); Utility.SetGUIColor(UltiDraw.Grey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Utility.SetGUIColor(UltiDraw.Mustard); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Utility.SetGUIColor(UltiDraw.LightGrey); EditorGUILayout.ObjectField(Target.Data, typeof(MotionData), true); Utility.ResetGUIColor(); EditorGUILayout.HelpBox(Target.Data.GetParentDirectoryPath(), MessageType.None); } EditorGUILayout.BeginVertical(GUILayout.Height(25f)); Rect ctrl = EditorGUILayout.GetControlRect(); Rect rect = new Rect(ctrl.x, ctrl.y, ctrl.width, 25f); EditorGUI.DrawRect(rect, UltiDraw.Black); //Sequences for (int i = 0; i < Target.Data.Sequences.Length; i++) { Target.DrawRect(Target.Data.GetFrame(Target.Data.Sequences[i].Start), Target.Data.GetFrame(Target.Data.Sequences[i].End), 1f, !Target.Data.Export ? UltiDraw.White.Opacity(.25f) : UltiDraw.Green.Opacity(0.25f), rect); } //Valid Window Target.DrawRect(Target.Data.Frames.First(), Target.Data.GetFirstValidFrame(), 1f, UltiDraw.DarkRed.Opacity(0.5f), rect); Target.DrawRect(Target.Data.GetLastValidFrame(), Target.Data.Frames.Last(), 1f, UltiDraw.DarkRed.Opacity(0.5f), rect); //Current Pivot Target.DrawPivot(rect); EditorGUILayout.EndVertical(); Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (Target.Playing) { if (Utility.GUIButton("||", Color.red, Color.black, 50f, 40f)) { Target.StopAnimation(); } } else { if (Utility.GUIButton("|>", Color.green, Color.black, 50f, 40f)) { Target.PlayAnimation(); } } if (Utility.GUIButton("<", UltiDraw.Grey, UltiDraw.White, 20f, 40f)) { Target.LoadFrame(Mathf.Max(frame.Timestamp - Target.Data.GetDeltaTime(), 0f)); } if (Utility.GUIButton(">", UltiDraw.Grey, UltiDraw.White, 20f, 40f)) { Target.LoadFrame(Mathf.Min(frame.Timestamp + Target.Data.GetDeltaTime(), Target.Data.GetTotalTime())); } int index = EditorGUILayout.IntSlider(frame.Index, 1, Target.Data.GetTotalFrames(), GUILayout.Height(40f)); if (index != frame.Index) { Target.LoadFrame(index); } EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("/ " + Target.Data.GetTotalFrames() + " @ " + Mathf.RoundToInt(Target.Data.Framerate) + "Hz", Utility.GetFontColor(Color.white), GUILayout.Width(80f)); EditorGUILayout.LabelField("[" + frame.Timestamp.ToString("F2") + "s / " + Target.Data.GetTotalTime().ToString("F2") + "s]", Utility.GetFontColor(Color.white), GUILayout.Width(80f)); EditorGUILayout.EndVertical(); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } } Target.Data.Inspector(Target); } } } //EDITOR SECTION Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Utility.SetGUIColor(UltiDraw.Yellow); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.LabelField("Editor Settings"); } Utility.SetGUIColor(UltiDraw.LightGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Target.SetModel((Actor)EditorGUILayout.ObjectField("Character", Target.Model, typeof(Actor), true)); Target.SetTargetFramerate(EditorGUILayout.FloatField("Target Framerate", Target.TargetFramerate)); Target.Timescale = EditorGUILayout.FloatField("Timescale", Target.Timescale); Target.SetRandomSeed(EditorGUILayout.IntField("Random Seed", Target.RandomSeed)); Target.Zoom = EditorGUILayout.Slider("Zoom", Target.Zoom, 0f, 1f); Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("Past Keys", Utility.GetFontColor(Color.white), GUILayout.Width(90f)); Target.SetPastKeys(EditorGUILayout.IntField(Target.PastKeys, GUILayout.Width(50f))); EditorGUILayout.LabelField("Future Keys", Utility.GetFontColor(Color.white), GUILayout.Width(90f)); Target.SetFutureKeys(EditorGUILayout.IntField(Target.FutureKeys, GUILayout.Width(50f))); EditorGUILayout.LabelField("Past Window", Utility.GetFontColor(Color.white), GUILayout.Width(90f)); Target.SetPastWindow(EditorGUILayout.FloatField(Target.PastWindow, GUILayout.Width(50f))); EditorGUILayout.LabelField("Future Window", Utility.GetFontColor(Color.white), GUILayout.Width(90f)); Target.SetFutureWindow(EditorGUILayout.FloatField(Target.FutureWindow, GUILayout.Width(50f))); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginHorizontal(); if (Utility.GUIButton("Mark As First Valid Frame", UltiDraw.DarkGrey, UltiDraw.White)) { Target.Data.SetFirstValidFrame(Target.GetCurrentFrame()); } if (Utility.GUIButton("Mark As Last Valid Frame", UltiDraw.DarkGrey, UltiDraw.White)) { Target.Data.SetLastValidFrame(Target.GetCurrentFrame()); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (Utility.GUIButton("Visualize First Frame", Target.VisualizeFirstFrame ? UltiDraw.Cyan : UltiDraw.LightGrey, UltiDraw.Black)) { Target.VisualizeFirstFrame = !Target.VisualizeFirstFrame; } if (Utility.GUIButton("Visualize Last Frame", Target.VisualizeLastFrame ? UltiDraw.Cyan : UltiDraw.LightGrey, UltiDraw.Black)) { Target.VisualizeLastFrame = !Target.VisualizeLastFrame; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (Utility.GUIButton("Visualize", Target.Visualize ? UltiDraw.Cyan : UltiDraw.LightGrey, UltiDraw.Black)) { Target.SetVisualize(!Target.Visualize); } if (Utility.GUIButton("Mirror", Target.Mirror ? UltiDraw.Cyan : UltiDraw.LightGrey, UltiDraw.Black)) { Target.SetMirror(!Target.Mirror); } if (Utility.GUIButton("Precomputable", Target.Precomputable ? UltiDraw.Cyan : UltiDraw.LightGrey, UltiDraw.Black)) { Target.SetPrecomputable(!Target.Precomputable); } EditorGUILayout.EndHorizontal(); Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); if (Utility.GUIButton("Camera Focus", Target.CameraFocus ? UltiDraw.Cyan : UltiDraw.DarkGrey, Target.CameraFocus ? UltiDraw.Black : UltiDraw.White)) { Target.SetCameraFocus(!Target.CameraFocus); } if (Target.CameraFocus) { Utility.SetGUIColor(UltiDraw.LightGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Target.FocusHeight = EditorGUILayout.FloatField("Focus Height", Target.FocusHeight); Target.FocusDistance = EditorGUILayout.FloatField("Focus Distance", Target.FocusDistance); Target.FocusAngle.y = EditorGUILayout.Slider("Focus Angle Horizontal", Target.FocusAngle.y, -180f, 180f); Target.FocusAngle.x = EditorGUILayout.Slider("Focus Angle Vertical", Target.FocusAngle.x, -180f, 180f); Target.FocusSmoothing = EditorGUILayout.Slider("Focus Smoothing", Target.FocusSmoothing, 0f, 1f); } } } Utility.SetGUIColor(UltiDraw.DarkGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); if (Utility.GUIButton("Motion Trail", Target.MotionTrail ? UltiDraw.Cyan : UltiDraw.DarkGrey, Target.MotionTrail ? UltiDraw.Black : UltiDraw.White)) { Target.SetMotionTrail(!Target.MotionTrail); } if (Target.MotionTrail) { Utility.SetGUIColor(UltiDraw.LightGrey); using (new EditorGUILayout.VerticalScope("Box")) { Utility.ResetGUIColor(); Target.CharacterMeshTrail = EditorGUILayout.Toggle("Character Mesh", Target.CharacterMeshTrail); Target.SkeletonSketchTrail = EditorGUILayout.Toggle("Skeleton Sketch", Target.SkeletonSketchTrail); Target.ApplyMotionTrail(); } } } } } //END }
public void AddBone(string name, string parent) { ArrayExtensions.Append(ref Bones, new Bone(Bones.Length, name, parent)); }
public void AddVersion(ModpackData data) { ArrayExtensions.Append(ref Versions, data); }
public void AddSequence() { ArrayExtensions.Append(ref Sequences, new Sequence(1, GetTotalFrames())); }