mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
82 lines
3.1 KiB
C#
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");
|
|
}
|
|
}
|
|
} |