void ToolbarGUI() { using (hGUI.Enabled(Events != null && Characters.Selected != null && Characters.Selected.Prefab.Load())) { if (ToolbarButton("Animation.PrevKey")) { HitboxKeyframe nextKeyframe = Events.PrevKeyframe(SeekTime); SeekTime = nextKeyframe != null ? nextKeyframe.Time : 1.0f; } play = ToolbarToggle("Animation.Play", play); if (ToolbarButton("Animation.NextKey")) { HitboxKeyframe prevKeyframe = Events.NextKeyframe(SeekTime); SeekTime = prevKeyframe != null ? prevKeyframe.Time : 0.0f; } if (ToolbarButton("Animation.AddKeyframe")) { HitboxKeyframe keyframe = Events.AddKeyframe(SeekTime); if (keyframe != null && Keyframes[0] == keyframe) { Assert.IsTrue(Check.Range(keyframe.States.Count, IDs)); for (var i = 0; i < keyframe.States.Count; i++) { keyframe.States[i] = GetType(IDs[i]); } } } if (hGUI.ToolbarButton(hGUI.BuiltinContent("Animation.AddEvent"))) { } ToggleSpawn(hGUI.ToolbarToggle("Spawn", Spawn, GUILayout.Width(40))); } hGUI.Space(); Characters.Draw(GUIContent.none, EditorStyles.toolbarPopup, GUILayout.Width(100)); }
void SeekAreaGUI() { using ( EditorGUILayout.HorizontalScope seekScope = hGUI.Horizontal("AnimationEventBackground", GUILayout.Height(18))) { seekArea = seekScope.rect; SeekListener.EventCheck(seekArea); if (Events != null) { for (keyframeIndex = 0; keyframeIndex < Keyframes.Count; keyframeIndex++) { HitboxKeyframe keyframe = Keyframes[keyframeIndex]; float time = Keyframes[keyframeIndex].Time; using (hGUI.Color(keyframe == selectedKeyframe ? Color.red : GUI.color)) { EditorGUI.LabelField(GetSlicedRect(seekArea, time, 0), GUIContent.none, "TL Playhead"); } Rect checkRect = GetSlicedRect(seekArea, time, 12); KeyframeListener.EventCheck(checkRect); } foreach (AnimationEvent evt in OtherEvents) { GUI.DrawTexture(GetSlicedRect(seekArea, evt.time, 5), EditorGUIUtility.FindTexture("Animation.EventMarker")); } } hGUI.Space(); } }
void SetKeyframeTime(Event evt, HitboxKeyframe keyframe) { Assert.IsNotNull(Events); Assert.IsNotNull(keyframe); Vector2 pos = evt.mousePosition; keyframe.Time = Mathf.Clamp01((pos.x - seekArea.x) / seekArea.width); Events.Sortkeyframes(); Repaint(); }
public void UpdateSpawn() { if (Spawn == null) { return; } HitboxKeyframe frame = Keyframes.FindLast(h => h.Time < SeekTime); for (var i = 0; i < IDs.Count; i++) { Hitbox hitbox = GetHitbox(IDs[i]); if (hitbox == null) { continue; } hitbox.CurrentType = frame != null ? frame.States[i] : hitbox.DefaultType; } SceneView.RepaintAll(); }
public bool AddKeyframe(int frame) { var index = GetKeyframeIndex(frame); if (index >= 0 && _keyframes[index].Frame == frame) { return(false); } var keyframe = new HitboxKeyframe { Frame = frame, Hitboxes = index >= 0 ? _keyframes[index].Hitboxes.ToArray() : new Hitbox[] {} }; ArrayUtility.Insert(ref _keyframes, index + 1, keyframe); return(true); }
public void AddHitboxes(int startFrame, Hitbox[] hitboxes) { var index = GetKeyframeIndex(startFrame); var hitboxKeyframe = new HitboxKeyframe { Frame = startFrame, Hitboxes = hitboxes }; if (_keyframes == null) { _keyframes = new[] { hitboxKeyframe }; } else if (_keyframes[index].Frame == startFrame) { _keyframes[index].Hitboxes = hitboxKeyframe.Hitboxes; } else { ArrayUtility.Insert(ref _keyframes, index + 1, hitboxKeyframe); } }
/// <summary> Unity callback. Called when the EditorWindow is created. </summary> void OnEnable() { changes = new List <Edit>(); DragListener = new EventListener().AddListener(EventType.DragUpdated, delegate { DragAndDrop.visualMode = Behaviour && GetObjectHitboxes(DragAndDrop.objectReferences).Any() ? DragAndDropVisualMode.Generic : DragAndDropVisualMode.None; }) .AddListeners(new[] { EventType.DragExited, EventType.DragPerform }, delegate { if (Events == null) { return; } DragAndDrop.AcceptDrag(); foreach (Hitbox hb in GetObjectHitboxes(DragAndDrop.objectReferences)) { Events.AddHitbox(hb); } }); GeneralEventListener = new EventListener().AddListener(EventType.MouseDrag, delegate(Event evt) { if (dragStart == DragStart.SeekBar) { SetSeekTime(evt); } if (dragStart == DragStart.Keyframe) { SetKeyframeTime(evt, selectedKeyframe); } }) .AddListener(EventType.MouseUp, delegate { dragStart = DragStart.None; }) .AddListener(EventType.KeyDown, delegate(Event evt) { if (evt.keyCode == KeyCode.Delete && selectedKeyframe != null) { Events.DeleteKeyframe(selectedKeyframe); Repaint(); } }); SeekListener = new EventListener().AddListeners(new[] { EventType.MouseDown, EventType.MouseDrag }, delegate(Event evt) { if (evt.type == EventType.MouseDown) { dragStart = DragStart.SeekBar; } if (evt.type == EventType.MouseDrag && dragStart != DragStart.SeekBar) { return; } SetSeekTime(evt); }); SetListener = new EventListener().AddListeners(new[] { EventType.MouseDown, EventType.MouseDrag }, delegate(Event evt) { if (evt.type == EventType.MouseDown) { dragStart = DragStart.EditArea; } if (evt.type == EventType.MouseDrag && dragStart != DragStart.EditArea) { return; } Hitbox.Type type = evt.button == 0 ? state : GetTypeOrDefault(hitboxIndex); if (Events == null || Events.GetState(hitboxIndex, keyframeIndex) == type) { return; } changes.Add(new Edit { index = hitboxIndex, keyframe = keyframeIndex, type = type }); }); KeyframeListener = new EventListener().AddListener(EventType.MouseDown, delegate { dragStart = DragStart.Keyframe; selectedKeyframe = Keyframes[keyframeIndex]; }); HitboxListener = new EventListener().AddListener(EventType.MouseDown, delegate { Hitbox hitbox = GetHitbox(IDs[hitboxIndex]); if (hitbox != null) { Selection.activeGameObject = hitbox.gameObject; } }); OnAssetEdit += Repaint; Characters = new ObjectSelector <CharacterData>(c => c.name, c => c != null); Characters.SelectionChanged += UpdateCharacter; Refresh(); }