LADXHD/InGame/GameObjects/Things/ObjAnimator.cs
2023-12-14 17:21:22 -05:00

55 lines
2.3 KiB
C#

using System;
using Microsoft.Xna.Framework;
using ProjectZ.InGame.GameObjects.Base;
using ProjectZ.InGame.GameObjects.Base.CObjects;
using ProjectZ.InGame.GameObjects.Base.Components;
using ProjectZ.InGame.SaveLoad;
using ProjectZ.InGame.Things;
namespace ProjectZ.InGame.GameObjects.Things
{
internal class ObjAnimator : GameObject
{
public Animator Animator;
public AnimationComponent AnimationComponent;
public CSprite Sprite;
public ObjAnimator(Map.Map map, int posX, int posY, int offsetX, int offsetY,
int layer, string animatorName, string animationName, bool deleteOnFinish) : base(map)
{
SprEditorImage = Resources.SprItem;
EditorIconSource = new Rectangle(64, 168, 16, 16);
EntityPosition = new CPosition(posX, posY, 0);
Animator = AnimatorSaveLoad.LoadAnimator(animatorName);
// this should never happen...
if (Animator == null)
{
Console.WriteLine("Error: could not load animation \"{0}\"", animatorName);
IsDead = true;
return;
}
Animator.Play(animationName);
EntitySize = new Rectangle(
offsetX + Animator.CurrentAnimation.Offset.X + Animator.CurrentAnimation.AnimationLeft,
offsetY + Animator.CurrentAnimation.Offset.Y + Animator.CurrentAnimation.AnimationTop,
Animator.CurrentAnimation.AnimationWidth, Animator.CurrentAnimation.AnimationHeight);
Sprite = new CSprite(EntityPosition);
AnimationComponent = new AnimationComponent(Animator, Sprite, new Vector2(offsetX, offsetY));
if (deleteOnFinish)
Animator.OnAnimationFinished = () => Map.Objects.DeleteObjects.Add(this);
AddComponent(BaseAnimationComponent.Index, AnimationComponent);
AddComponent(DrawComponent.Index, new DrawCSpriteComponent(Sprite, layer));
}
public ObjAnimator(Map.Map map, int posX, int posY, int layer, string animatorName, string animationName,
bool deleteOnFinish) : this(map, posX, posY, 0, 0, layer, animatorName, animationName, deleteOnFinish)
{ }
}
}