Implemented mod: MoveSprite

This commit is contained in:
quinnvoker
2018-12-31 08:01:24 -08:00
parent 73bbbf9dda
commit 70d7680cf0
6 changed files with 84 additions and 20 deletions
+1
View File
@@ -93,6 +93,7 @@
</Compile>
<Compile Include="Modifications\ModHelper.cs" />
<Compile Include="Modifications\SelectionState.cs" />
<Compile Include="Modifications\SpriteDragArgs.cs" />
<Compile Include="MonoGame.Framework.Content.Pipeline\ContentIdentity.cs" />
<Compile Include="MonoGame.Framework.Content.Pipeline\InvalidContentException.cs" />
<Compile Include="MonoGame.Framework.Content.Pipeline\NamedValueDictionary.cs" />
+41 -7
View File
@@ -36,6 +36,8 @@ namespace AnimationEditor
private MouseState mState;
private MouseState mState_old;
private Vector2 totalDragDist;
private Vector2 centerPoint
{
get { return new Vector2((Editor.graphics.PresentationParameters.BackBufferWidth / 2), (Editor.graphics.PresentationParameters.BackBufferHeight / 2)); }
@@ -54,16 +56,29 @@ namespace AnimationEditor
}
}
private EventHandler onSpriteMoved;
public event EventHandler SpriteMoved
private EventHandler onSpriteDragUpdate;
public event EventHandler SpriteDragUpdate
{
add
{
onSpriteMoved += value;
onSpriteDragUpdate += value;
}
remove
{
onSpriteMoved -= value;
onSpriteDragUpdate -= value;
}
}
private EventHandler onSpriteDragCompleted;
public event EventHandler SpriteDragCompleted
{
add
{
onSpriteDragCompleted += value;
}
remove
{
onSpriteDragCompleted -= value;
}
}
@@ -180,10 +195,23 @@ namespace AnimationEditor
}
if (mState.LeftButton == ButtonState.Pressed && mState.RightButton != ButtonState.Pressed && mState_old.LeftButton != ButtonState.Pressed)
{
dragging = hovering;
if (dragging)
{
totalDragDist = Vector2.Zero;
}
}
if (mState.LeftButton != ButtonState.Pressed)
{
if(dragging && totalDragDist != Vector2.Zero)
{
OnSpriteDragCompleted(new Modifications.SpriteDragArgs(totalDragDist));
}
dragging = false;
}
if (dragging)
{
@@ -194,11 +222,12 @@ namespace AnimationEditor
if (distMoved != Vector2.Zero)
{
totalDragDist += distMoved;
foreach(Sprite spr in EditSprites)
{
spr.Offset += distMoved;
}
OnSpriteMoved(new EventArgs());
OnSpriteDragUpdate(new EventArgs());
}
}
}
@@ -231,9 +260,14 @@ namespace AnimationEditor
}
}
protected virtual void OnSpriteMoved(EventArgs e)
protected virtual void OnSpriteDragCompleted(EventArgs e)
{
onSpriteDragCompleted?.Invoke(this, e);
}
protected virtual void OnSpriteDragUpdate(EventArgs e)
{
onSpriteMoved?.Invoke(this, e);
onSpriteDragUpdate?.Invoke(this, e);
}
protected virtual void OnFrameChanged(EventArgs e)
+21 -4
View File
@@ -57,7 +57,17 @@ namespace AnimationEditor
importDelayBox.Value = 0;
animationPreview.FrameChanged += animationPreview_FrameChanged;
animationPreview.AnimationEnded += animationPreview_AnimationEnded;
animationPreview.SpriteMoved += animationPreview_SpriteMoved;
animationPreview.SpriteDragUpdate += animationPreview_SpriteDragUpdate;
animationPreview.SpriteDragCompleted += animationPreview_SpriteDragComplete;
}
private void animationPreview_SpriteDragComplete(object sender, EventArgs e)
{
var args = e as SpriteDragArgs;
var mod = new MoveSprite(frameSprites, frameSpriteListBox, args.DragDistance);
mod.Undo();
ModHelper.DoModificationWithSelectionTracking(mod, animationBox, frameListBox, frameSpriteListBox);
undoHistory.Add(mod);
}
private void frameListBox_SetSingleSelection(int index)
@@ -116,6 +126,7 @@ namespace AnimationEditor
{
if(frames?.Count > 0)
{
//update currentAnimation's data
if(currentAnimation == null)
currentAnimation = new Animation("unnamed", frames.ToArray(), true);
else
@@ -124,13 +135,19 @@ namespace AnimationEditor
currentAnimation.Frames = frames.ToArray();
currentAnimation.IsLooping = animationLoopCheckBox.Checked;
}
//ensure frameTrackBar length matches current animation
frameTrackBar.Maximum = currentAnimation.Frames.Count() - 1;
//send currentAnimation to animationPreview
if (animationPreview.PreviewSprite == null)
animationPreview.PreviewSprite = new AnimatedSprite(currentAnimation);
else
animationPreview.PreviewSprite.CurrentAnimation = currentAnimation;
frameTrackBar.Maximum = currentAnimation.Frames.Count() - 1;
if(frameListBox.SelectedIndices.Count < 2 && frameListBox.SelectedIndex != frameTrackBar.Value)
//restore currently viewed frame
if (frameListBox.SelectedIndices.Count < 2)
frameListBox_SetSingleSelection(frameTrackBar.Value);
else
frameListBox.SelectedIndex = frameTrackBar.Value;
//if animations list is empty, send created currentAnimation to it
if(animations.Count < 1)
{
animations.Add(currentAnimation);
@@ -722,7 +739,7 @@ namespace AnimationEditor
}
}
private void animationPreview_SpriteMoved(object sender, EventArgs e)
private void animationPreview_SpriteDragUpdate(object sender, EventArgs e)
{
if(frameSpriteListBox.SelectedIndices.Count == 1)
ReadSpriteOffset();
+1 -8
View File
@@ -19,7 +19,6 @@ namespace AnimationEditor.Modifications
private BindingList<Sprite> sprites;
private ListBox listBox;
private List<int> indices;
private Dictionary<int, Vector2> originalPositions;
private Vector2 dist;
public MoveSprite(BindingList<Sprite> spriteList, ListBox spriteListBox, Vector2 distance)
@@ -27,12 +26,6 @@ namespace AnimationEditor.Modifications
sprites = spriteList;
listBox = spriteListBox;
indices = new List<int>();
originalPositions = new Dictionary<int, Vector2>();
foreach (int i in spriteListBox.SelectedIndices)
{
indices.Add(i);
originalPositions.Add(i, sprites[i].Offset);
}
dist = distance;
}
@@ -48,7 +41,7 @@ namespace AnimationEditor.Modifications
{
foreach (int index in indices)
{
sprites[index].Offset = originalPositions[index];
sprites[index].Offset -= dist;
}
}
@@ -65,7 +65,7 @@ namespace AnimationEditor.Modifications
public override string ToString()
{
return "Move Sprite";
return "Reorder Sprite";
}
}
}
@@ -0,0 +1,19 @@
using System;
using Microsoft.Xna.Framework;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AnimationEditor.Modifications
{
class SpriteDragArgs : EventArgs
{
public Vector2 DragDistance { get; private set; }
public SpriteDragArgs(Vector2 drag)
{
DragDistance = drag;
}
}
}