blob: a6bf39350a54b12c83e98e6ffa2b899eb684b7f7 (
plain)
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
|
using System;
using System.Linq;
using Microsoft.Xna.Framework;
namespace MonoGame.Extended.Sprites
{
public class AnimatedSprite : Sprite
{
private readonly SpriteSheet _spriteSheet;
private SpriteSheetAnimation _currentAnimation;
public AnimatedSprite(SpriteSheet spriteSheet, string playAnimation = null)
: base(spriteSheet.TextureAtlas[0])
{
_spriteSheet = spriteSheet;
if (playAnimation != null)
Play(playAnimation);
}
public SpriteSheetAnimation Play(string name, Action onCompleted = null)
{
if (_currentAnimation == null || _currentAnimation.IsComplete || _currentAnimation.Name != name)
{
var cycle = _spriteSheet.Cycles[name];
var keyFrames = cycle.Frames.Select(f => _spriteSheet.TextureAtlas[f.Index]).ToArray();
_currentAnimation = new SpriteSheetAnimation(name, keyFrames, cycle.FrameDuration, cycle.IsLooping, cycle.IsReversed, cycle.IsPingPong);
if(_currentAnimation != null)
_currentAnimation.OnCompleted = onCompleted;
}
return _currentAnimation;
}
public void Update(float deltaTime)
{
if (_currentAnimation != null && !_currentAnimation.IsComplete)
{
_currentAnimation.Update(deltaTime);
TextureRegion = _currentAnimation.CurrentFrame;
}
}
public void Update(GameTime gameTime)
{
Update(gameTime.GetElapsedSeconds());
}
}
}
|