119 lines
2.7 KiB
C#
119 lines
2.7 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
public class PlayerController : Character
|
|
{
|
|
[SerializeField]
|
|
private Sprite _regularSprite;
|
|
[SerializeField]
|
|
private Sprite _noHammerSprite;
|
|
|
|
private GameObject _hammer;
|
|
|
|
private bool _isHoldingHammer = true;
|
|
|
|
public event EventHandler<TreasureType> OnPlayerTakeItem;
|
|
|
|
private InputManager _inputManager;
|
|
private PlayerState _playerState;
|
|
private HammerThrower _hammerThrower;
|
|
private Vector2 _currentMovement;
|
|
|
|
private void Awake()
|
|
{
|
|
_inputManager = GetComponent<InputManager>();
|
|
_playerState = GetComponent<PlayerState>();
|
|
_hammerThrower = GetComponent<HammerThrower>();
|
|
|
|
_inputManager.OnFire += OnFireButtonPressed;
|
|
_inputManager.OnMovementChanged += OnMovementChanged;
|
|
base.Init();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
_inputManager.OnEnable();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
_inputManager.OnDisable();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (_inputManager != null)
|
|
{
|
|
_inputManager.OnFire -= OnFireButtonPressed;
|
|
_inputManager.OnMovementChanged -= OnMovementChanged;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (_hammer == null && !_isHoldingHammer)
|
|
{
|
|
_spriteRenderer.sprite = _regularSprite;
|
|
_isHoldingHammer = true;
|
|
}
|
|
|
|
MoveTo(_currentMovement.x, isAllowVertical ? _currentMovement.y : 0);
|
|
_hammerThrower.SetFacingDirection(_facingRight);
|
|
}
|
|
|
|
private void OnMovementChanged(Vector2 movement)
|
|
{
|
|
_currentMovement = movement;
|
|
}
|
|
|
|
private void OnFireButtonPressed()
|
|
{
|
|
if (_hammerThrower.CanThrow)
|
|
{
|
|
_animator.SetTrigger("Body_ThrowHammer");
|
|
}
|
|
}
|
|
|
|
// Animation event
|
|
public void ThrowHammerObject()
|
|
{
|
|
_hammerThrower.TryThrowHammer();
|
|
UpdatePlayerSprite();
|
|
}
|
|
|
|
private void UpdatePlayerSprite()
|
|
{
|
|
_spriteRenderer.sprite = _hammerThrower.HasHammer
|
|
? _regularSprite
|
|
: _noHammerSprite;
|
|
}
|
|
protected override void SetWalkingAnimation(bool isWalking)
|
|
{
|
|
_bonesBack.SetActive(false);
|
|
_bonesSide.SetActive(true);
|
|
_animator.SetBool("Legs_Walk", isWalking);
|
|
_animator.SetBool("Body_Walk", isWalking);
|
|
}
|
|
|
|
protected override void SetClimbingAnimation(bool isClimbing)
|
|
{
|
|
if (isClimbing)
|
|
{
|
|
_bonesBack.SetActive(true);
|
|
_bonesSide.SetActive(false);
|
|
}
|
|
_animator.SetBool("Climb", isClimbing);
|
|
}
|
|
|
|
protected void OnDeath()
|
|
{
|
|
_playerState.Lives--;
|
|
|
|
if (_playerState.Lives == 0)
|
|
{
|
|
Debug.Log("Game over");
|
|
}
|
|
}
|
|
}
|
|
|