Files
MonoGame.Extended/Source/MonoGame.Extended.Tiled/TiledMapTilesetAnimatedTile.cs
T
Dylan WilsonandGitHub b3a631aff5 Gui dialogs (#410)
* started refactoring for gui windows

* a bit more work on gui windows

* fixed some bugs and broken build stuff

* fixed some bugs in gui controls

* a little code cleanup

* got gui dialogs positioning and experimenting with named styles by type

* apply control styles directly in the constructor of controls

* got everything compiling again

* all gui controls have skinnable constructors

* rework uniform grid desired size calculations

* turns out gui layouts are complicated

* include pdb files in nuget packages

* fixed a bug in find nearest glyph

* custom control styling

* added a range constructor overload that takes one value

* rethinking control desired size behaviour

* made particle emitters more editable at runtime

* moved the auto trigger code to the particle effect instead of the emitters

* tweaks

* changed the particle modifer interface to an abstract base with an optional name

* changed the particle modifer interface to an abstract base with an optional name

* an attempt at creating a gui combo box

* rolled back the nested control experiment

* pretty good (but not perfect) combo boxes

* tweaks

* name property bindings on lists

* removed and cleaned up the hacks from the gui combo box

* minor combo box styling tweaks

* minor bug fix in gui combo box

* experiments with data binding

* fixed a mistake on the texture region service interface

* working on the ability to serialize particles

* finished particle serialization

* more robust range deserialization

* added editor browable attributes

* fixed some broken demos

* made the particle modifiers editable at runtime

* fixed some issues with particle serialization

* fixed some issues with interpolators
2017-07-22 21:22:13 +10:00

50 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
namespace MonoGame.Extended.Tiled
{
public class TiledMapTilesetAnimatedTile : TiledMapTilesetTile
{
private readonly List<TiledMapTilesetTileAnimationFrame> _animationFrames =
new List<TiledMapTilesetTileAnimationFrame>();
private int _frameIndex;
private TimeSpan _timer;
public ReadOnlyCollection<TiledMapTilesetTileAnimationFrame> AnimationFrames { get; }
public TiledMapTilesetTileAnimationFrame CurrentAnimationFrame { get; private set; }
internal TiledMapTilesetAnimatedTile(TiledMapTileset tileset, ContentReader input, int localTileIdentifier, int animationFramesCount)
: base(localTileIdentifier,input)
{
AnimationFrames = new ReadOnlyCollection<TiledMapTilesetTileAnimationFrame>(_animationFrames);
_timer = TimeSpan.Zero;
for (var i = 0; i < animationFramesCount; i++)
{
var localTileIdentifierForFrame = input.ReadInt32();
var frameDurationInMilliseconds = input.ReadInt32();
var tileSetTileFrame = new TiledMapTilesetTileAnimationFrame(tileset, localTileIdentifierForFrame, frameDurationInMilliseconds);
_animationFrames.Add(tileSetTileFrame);
CurrentAnimationFrame = AnimationFrames[0];
}
}
public void Update(GameTime gameTime)
{
if (_animationFrames.Count == 0)
return;
_timer += gameTime.ElapsedGameTime;
if (_timer <= CurrentAnimationFrame.Duration)
return;
_timer -= CurrentAnimationFrame.Duration;
_frameIndex = (_frameIndex + 1) % AnimationFrames.Count;
CurrentAnimationFrame = AnimationFrames[_frameIndex];
}
}
}