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

82 lines
3.1 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.GameObjects.Base.Components.AI;
using ProjectZ.InGame.SaveLoad;
using ProjectZ.InGame.Things;
namespace ProjectZ.InGame.GameObjects.MidBoss
{
internal class MBossDesertLanmolaHead : GameObject
{
public bool IsVisible = true;
public readonly CSprite Sprite;
private readonly MBossDesertLanmola _owner;
private readonly Animator _animator;
private readonly ShadowBodyDrawComponent _shadowComponent;
private readonly DamageFieldComponent _damageComponent;
private int _direction;
public MBossDesertLanmolaHead(Map.Map map, MBossDesertLanmola owner, Vector2 position) : base(map)
{
EntityPosition = new CPosition(position.X, position.Y, 0);
EntitySize = new Rectangle(-8, -48, 16, 48);
_owner = owner;
_animator = AnimatorSaveLoad.LoadAnimator("MidBoss/desertLanmola");
_animator.Play("head_0");
Sprite = new CSprite(EntityPosition);
var animationComponent = new AnimationComponent(_animator, Sprite, new Vector2(0, 0));
var damageBox = new CBox(EntityPosition, -7, -15, 0, 14, 14, 8, true);
AddComponent(DamageFieldComponent.Index, _damageComponent = new DamageFieldComponent(damageBox, HitType.Enemy, 4));
var hittableBox = new CBox(EntityPosition, -7, -15, 0, 14, 14, 8, true);
AddComponent(HittableComponent.Index, new HittableComponent(hittableBox, OnHit));
AddComponent(AnimationComponent.Index, animationComponent);
AddComponent(DrawComponent.Index, new DrawCSpriteComponent(Sprite, Values.LayerPlayer));
AddComponent(DrawShadowComponent.Index, _shadowComponent = new ShadowBodyDrawComponent(EntityPosition));
}
private Values.HitCollision OnHit(GameObject originObject, Vector2 direction, HitType type, int damage, bool pieceOfPower)
{
if (!IsVisible)
return Values.HitCollision.None;
return _owner.OnHit(originObject, direction, type, damage, pieceOfPower);
}
public void Hide()
{
IsVisible = false;
Sprite.IsVisible = false;
_shadowComponent.IsActive = false;
_damageComponent.IsActive = false;
}
public void Spawn(Vector2 direction)
{
IsVisible = true;
Sprite.IsVisible = true;
_shadowComponent.IsActive = true;
_damageComponent.IsActive = true;
if (Math.Abs(direction.Y) > Math.Abs(direction.X))
_direction = direction.Y > 0 ? 3 : 1;
else
_direction = direction.X > 0 ? 2 : 0;
_animator.Play("head_" + _direction);
}
public void SetDown()
{
_animator.Play("head_3");
}
}
}