mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
141 lines
4.9 KiB
C#
141 lines
4.9 KiB
C#
|
using ProjectZ.InGame.GameObjects.Base;
|
||
|
using ProjectZ.InGame.GameObjects.Base.Components;
|
||
|
using ProjectZ.InGame.GameObjects.Base.CObjects;
|
||
|
using ProjectZ.InGame.Things;
|
||
|
using Microsoft.Xna.Framework;
|
||
|
using Microsoft.Xna.Framework.Graphics;
|
||
|
using ProjectZ.InGame.Map;
|
||
|
|
||
|
namespace ProjectZ.InGame.GameObjects.Dungeon
|
||
|
{
|
||
|
internal class ObjTower : GameObject
|
||
|
{
|
||
|
private readonly Animator _animatorTop0;
|
||
|
private readonly Animator _animatorTop1;
|
||
|
private readonly Animator _animatorTop2;
|
||
|
private readonly Animator _animatorBottom;
|
||
|
|
||
|
private readonly string _strKey;
|
||
|
|
||
|
private bool _opening;
|
||
|
private bool _opened;
|
||
|
private bool _isRotating;
|
||
|
|
||
|
private float _shakeCounter;
|
||
|
private bool _shakeScreen;
|
||
|
|
||
|
public ObjTower() : base("tower") { }
|
||
|
|
||
|
public ObjTower(Map.Map map, int posX, int posY, string strKey) : base(map)
|
||
|
{
|
||
|
EntityPosition = new CPosition(posX - 16, posY - 16, 0);
|
||
|
EntitySize = new Rectangle(0, 0, 80, 80);
|
||
|
|
||
|
_strKey = strKey;
|
||
|
|
||
|
_animatorTop0 = SaveLoad.AnimatorSaveLoad.LoadAnimator("Objects/d7 tower");
|
||
|
_animatorTop0.Play("idle");
|
||
|
_animatorTop0.Pause();
|
||
|
|
||
|
_animatorTop1 = SaveLoad.AnimatorSaveLoad.LoadAnimator("Objects/d7 tower top 1");
|
||
|
_animatorTop1.Play("idle");
|
||
|
_animatorTop1.Pause();
|
||
|
|
||
|
_animatorTop2 = SaveLoad.AnimatorSaveLoad.LoadAnimator("Objects/d7 tower top 2");
|
||
|
_animatorTop2.Play("idle");
|
||
|
|
||
|
_animatorBottom = SaveLoad.AnimatorSaveLoad.LoadAnimator("Objects/d7 tower bottom");
|
||
|
_animatorBottom.Play("idle");
|
||
|
_animatorBottom.Pause();
|
||
|
|
||
|
var opened = !string.IsNullOrEmpty(strKey) && Game1.GameManager.SaveManager.GetString(strKey) == "1";
|
||
|
|
||
|
if (!opened)
|
||
|
{
|
||
|
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(OnKeyChange));
|
||
|
AddComponent(CollisionComponent.Index, new BoxCollisionComponent(new CBox(posX + 8, posY + 48, 0, 16, 16, 16), Values.CollisionTypes.Normal));
|
||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_animatorBottom.Play("opened");
|
||
|
}
|
||
|
|
||
|
AddComponent(DrawComponent.Index, new DrawComponent(Draw, Values.LayerBottom, EntityPosition));
|
||
|
}
|
||
|
|
||
|
private void Open()
|
||
|
{
|
||
|
if (_opening || _opened)
|
||
|
return;
|
||
|
|
||
|
_animatorTop0.Continue();
|
||
|
_animatorTop1.Continue();
|
||
|
_animatorBottom.Continue();
|
||
|
|
||
|
_opening = true;
|
||
|
|
||
|
Game1.GameManager.PlaySoundEffect("D378-04-04");
|
||
|
Game1.GameManager.StopMusic();
|
||
|
}
|
||
|
|
||
|
private void OnKeyChange()
|
||
|
{
|
||
|
if (!string.IsNullOrEmpty(_strKey))
|
||
|
{
|
||
|
var keyState = Game1.GameManager.SaveManager.GetString(_strKey);
|
||
|
if (keyState == "1")
|
||
|
Open();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
if (!_opening || _opened)
|
||
|
return;
|
||
|
|
||
|
MapManager.ObjLink.FreezePlayer();
|
||
|
|
||
|
_animatorTop0.Update();
|
||
|
_animatorTop1.Update();
|
||
|
_animatorBottom.Update();
|
||
|
|
||
|
_shakeCounter += Game1.DeltaTime;
|
||
|
|
||
|
if (!_shakeScreen && _shakeCounter > 2000)
|
||
|
{
|
||
|
_shakeScreen = true;
|
||
|
Game1.GameManager.ShakeScreen(2750, 1, 0, 5, 5);
|
||
|
Game1.GameManager.PlaySoundEffect("D378-29-1D");
|
||
|
}
|
||
|
|
||
|
if (_opening && !_animatorTop0.IsPlaying)
|
||
|
{
|
||
|
if (!_isRotating)
|
||
|
{
|
||
|
_isRotating = true;
|
||
|
_animatorTop0.Play("rotate");
|
||
|
_animatorTop1.Play("rotate");
|
||
|
_animatorBottom.Play("rotate");
|
||
|
Game1.GameManager.PlaySoundEffect("D360-46-2E");
|
||
|
}
|
||
|
else if (_isRotating)
|
||
|
{
|
||
|
_opened = true;
|
||
|
Game1.GameManager.PlaySoundEffect("D360-02-02");
|
||
|
Game1.GameManager.PlayMusic();
|
||
|
|
||
|
RemoveComponent(CollisionComponent.Index);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void Draw(SpriteBatch spriteBatch)
|
||
|
{
|
||
|
_animatorTop0.Draw(spriteBatch, new Vector2(EntityPosition.X, EntityPosition.Y), Color.White);
|
||
|
_animatorTop1.Draw(spriteBatch, new Vector2(EntityPosition.X, EntityPosition.Y), Color.White);
|
||
|
_animatorTop2.Draw(spriteBatch, new Vector2(EntityPosition.X + 16, EntityPosition.Y - 96), Color.White);
|
||
|
_animatorBottom.Draw(spriteBatch, new Vector2(EntityPosition.X, EntityPosition.Y), Color.White);
|
||
|
}
|
||
|
}
|
||
|
}
|