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

64 lines
2.4 KiB
C#

using Microsoft.Xna.Framework;
using ProjectZ.InGame.GameObjects.Base;
using ProjectZ.InGame.GameObjects.Base.Components;
using ProjectZ.InGame.GameObjects.Base.CObjects;
using ProjectZ.InGame.SaveLoad;
using ProjectZ.InGame.Things;
using ProjectZ.InGame.GameObjects.Base.Components.AI;
namespace ProjectZ.InGame.GameObjects.Enemies
{
internal class EnemyPodobooSplash : GameObject
{
private readonly BodyComponent _body;
private readonly AnimationComponent _animationComponent;
private readonly AiComponent _aiComponent;
private readonly CSprite _sprite;
public EnemyPodobooSplash(Map.Map map, Vector2 position, Vector2 velocity) : base(map)
{
Tags = Values.GameObjectTag.Enemy;
EntityPosition = new CPosition(position.X, position.Y, 0);
EntitySize = new Rectangle(-5, -5, 10, 10);
var animator = AnimatorSaveLoad.LoadAnimator("Enemies/podoboo");
animator.Play("splash");
_sprite = new CSprite(EntityPosition);
_animationComponent = new AnimationComponent(animator, _sprite, Vector2.Zero);
_body = new BodyComponent(EntityPosition, -5, -5, 10, 10, 8)
{
Gravity2D = 0.065f,
CollisionTypes = Values.CollisionTypes.None,
Velocity = new Vector3(velocity.X, velocity.Y, 0),
SplashEffect = false
};
_aiComponent = new AiComponent();
var stateFlying = new AiState();
stateFlying.Trigger.Add(new AiTriggerCountdown(500, DespawnTick, () => Map.Objects.DeleteObjects.Add(this)));
_aiComponent.States.Add("flying", stateFlying);
_aiComponent.ChangeState("flying");
AddComponent(BodyComponent.Index, _body);
AddComponent(AiComponent.Index, _aiComponent);
AddComponent(BaseAnimationComponent.Index, _animationComponent);
AddComponent(DrawComponent.Index, new DrawCSpriteComponent(_sprite, Values.LayerBottom));
}
private void DespawnTick(double time)
{
// 4 frame blink effect
_sprite.SpriteShader = Game1.TotalGameTime % (8000 / 60f) >= (4000 / 60f) ? Resources.DamageSpriteShader0 : null;
// fade out
if (time < 75)
_sprite.Color = Color.White * (float)(time / 75);
}
}
}