public SpriteAnimation(SpriteAnimationDefinition definition, SpriteDefinition spriteDefinition) { Definition = definition; SpriteDefinition = spriteDefinition; Paused = definition.Frames.Length <= 1; // Pause the animation if there's only one frame. currentFrame = 0; resetWaitTime(); }
public Sprite(Texture2D texture, SpriteDefinition spriteDefinition, string spritePath) { Texture2D = texture; SpriteDefinition = spriteDefinition; CurrentAnimationName = "idle"; this.spritePath = spritePath; animation = new SpriteAnimation(SpriteDefinition.AnimationDefinitions[CurrentAnimationName], SpriteDefinition); }
public Sprite(Texture2D texture, SpriteDefinition spriteDefinition, string spritePath) { Texture2D = texture; SpriteDefinition = spriteDefinition; CurrentAnimationName = "idle"; this.spritePath = spritePath; animation = new SpriteAnimation(SpriteDefinition.AnimationDefinitions[CurrentAnimationName], SpriteDefinition); }
/// <summary>Reloads the texture and sprite definition from disk.</summary> public void Reload() { var currentAnimationFrame = animation.GetCurrentFrame(); var currentAnimationName = animation.Definition.Name; var currentPlayOnce = animation.GetPlayOnce(); var reloadedSprite = Sprite.LoadSprite(spritePath); Texture2D = reloadedSprite.Texture2D; SpriteDefinition = reloadedSprite.SpriteDefinition; var oldAnim = animation; animation = reloadedSprite.animation; animation.SetDefinition(SpriteDefinition.AnimationDefinitions[currentAnimationName], false); animation.SetFrame(currentAnimationFrame); animation.SetPlayOnce(currentPlayOnce); animation.currentWaitTime = oldAnim.currentWaitTime; animation.waitTimeTarget = oldAnim.waitTimeTarget; animation.animationDirection = oldAnim.animationDirection; animation.Paused = oldAnim.Paused; animation.lastAnimationName = oldAnim.lastAnimationName; }
/// <summary>Reloads the texture and sprite definition from disk.</summary> public void Reload() { var currentAnimationFrame = animation.GetCurrentFrame(); var currentAnimationName = animation.Definition.Name; var currentPlayOnce = animation.GetPlayOnce(); var reloadedSprite = Sprite.LoadSprite(spritePath); Texture2D = reloadedSprite.Texture2D; SpriteDefinition = reloadedSprite.SpriteDefinition; var oldAnim = animation; animation = reloadedSprite.animation; animation.SetDefinition(SpriteDefinition.AnimationDefinitions[currentAnimationName], false); animation.SetFrame(currentAnimationFrame); animation.SetPlayOnce(currentPlayOnce); animation.currentWaitTime = oldAnim.currentWaitTime; animation.waitTimeTarget = oldAnim.waitTimeTarget; animation.animationDirection = oldAnim.animationDirection; animation.Paused = oldAnim.Paused; animation.lastAnimationName = oldAnim.lastAnimationName; }
public SpriteAnimation(SpriteAnimationDefinition definition, SpriteDefinition spriteDefinition) { Definition = definition; SpriteDefinition = spriteDefinition; Paused = definition.Frames.Length <= 1; // Pause the animation if there's only one frame. currentFrame = 0; resetWaitTime(); }
public static SpriteDefinition LoadSpriteDefinition(string spritePath) { spritePath = Utility.GetContentDir("sprites/" + spritePath); if (!File.Exists(spritePath)) return null; var definition = new SpriteDefinition(); string jsonDefinition = File.ReadAllText(spritePath); var jDefinition = JsonConvert.DeserializeObject<JToken>(Utility.JsonRemoveComments(jsonDefinition)); definition.DefaultAnimationFPS = jDefinition["defaultFps"].Value<float>(); definition.Scale = jDefinition["scale"].Value<float>(); definition.AnimationDefinitions = new Dictionary<string, SpriteAnimationDefinition>(); // Add animations var jAnimations = jDefinition["animations"].Value<JArray>(); foreach (JObject jAnimation in jAnimations) { var animDefinition = new SpriteAnimationDefinition(); animDefinition.Name = jAnimation["name"].Value<string>(); animDefinition.FPS = jAnimation["fps"] != null ? jAnimation["fps"].Value<float>() : definition.DefaultAnimationFPS; var jType = jAnimation["type"]; if (jType != null) animDefinition.AnimationType = (SpriteAnimationType)Enum.Parse(typeof (SpriteAnimationType), jType.Value<string>(), true); var jOffsetArray = jAnimation["origin"] as JArray; if (jOffsetArray != null) { if (jOffsetArray.Count != 2) throw new InvalidOperationException("Expected 2 value array in animations' origin. (" + animDefinition.Name + ")"); animDefinition.Origin = new Vector2(jOffsetArray[0].Value<float>(), jOffsetArray[1].Value<float>()); } var jFrames = jAnimation["frames"].Value<JArray>(); animDefinition.Frames = new SpriteAnimFrame[jFrames.Count]; for (int i = 0; i < jFrames.Count; i++) { var jFrame = jFrames[i].Value<JArray>(); var animFrame = new SpriteAnimFrame(); int x = jFrame[0].Value<int>(); int y = jFrame[1].Value<int>(); int w = jFrame[2].Value<int>(); int h = jFrame[3].Value<int>(); animFrame.SubRectangle = new Rectangle(x, y, w, h); if (jFrame.Count > 4) animFrame.WaitTime = jFrame[4].Value<float>(); animDefinition.Frames[i] = animFrame; } if (animDefinition.Frames.Length == 0) Console.Error.WriteLine("Warning: Sprite definition animation contains no frames! (" + spritePath + ", " + animDefinition.Name + ")"); definition.AnimationDefinitions.Add(animDefinition.Name, animDefinition); } if (!definition.AnimationDefinitions.ContainsKey("idle")) throw new InvalidOperationException("Error: Sprite definition animation does not contain an idle frame!"); return definition; }
public static SpriteDefinition LoadSpriteDefinition(string spritePath) { spritePath = Utility.GetContentDir("sprites/" + spritePath); if (!File.Exists(spritePath)) { return(null); } var definition = new SpriteDefinition(); string jsonDefinition = File.ReadAllText(spritePath); var jDefinition = JsonConvert.DeserializeObject <JToken>(Utility.JsonRemoveComments(jsonDefinition)); definition.DefaultAnimationFPS = jDefinition["defaultFps"].Value <float>(); definition.Scale = jDefinition["scale"].Value <float>(); definition.AnimationDefinitions = new Dictionary <string, SpriteAnimationDefinition>(); // Add animations var jAnimations = jDefinition["animations"].Value <JArray>(); foreach (JObject jAnimation in jAnimations) { var animDefinition = new SpriteAnimationDefinition(); animDefinition.Name = jAnimation["name"].Value <string>(); animDefinition.FPS = jAnimation["fps"] != null ? jAnimation["fps"].Value <float>() : definition.DefaultAnimationFPS; var jType = jAnimation["type"]; if (jType != null) { animDefinition.AnimationType = (SpriteAnimationType)Enum.Parse(typeof(SpriteAnimationType), jType.Value <string>(), true); } var jOffsetArray = jAnimation["origin"] as JArray; if (jOffsetArray != null) { if (jOffsetArray.Count != 2) { throw new InvalidOperationException("Expected 2 value array in animations' origin. (" + animDefinition.Name + ")"); } animDefinition.Origin = new Vector2(jOffsetArray[0].Value <float>(), jOffsetArray[1].Value <float>()); } var jFrames = jAnimation["frames"].Value <JArray>(); animDefinition.Frames = new SpriteAnimFrame[jFrames.Count]; for (int i = 0; i < jFrames.Count; i++) { var jFrame = jFrames[i].Value <JArray>(); var animFrame = new SpriteAnimFrame(); int x = jFrame[0].Value <int>(); int y = jFrame[1].Value <int>(); int w = jFrame[2].Value <int>(); int h = jFrame[3].Value <int>(); animFrame.SubRectangle = new Rectangle(x, y, w, h); if (jFrame.Count > 4) { animFrame.WaitTime = jFrame[4].Value <float>(); } animDefinition.Frames[i] = animFrame; } if (animDefinition.Frames.Length == 0) { Console.Error.WriteLine("Warning: Sprite definition animation contains no frames! (" + spritePath + ", " + animDefinition.Name + ")"); } definition.AnimationDefinitions.Add(animDefinition.Name, animDefinition); } if (!definition.AnimationDefinitions.ContainsKey("idle")) { throw new InvalidOperationException("Error: Sprite definition animation does not contain an idle frame!"); } return(definition); }