// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-09-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
using UnityEngine;
namespace G
{
///
///
///
public class EntityCart : Entity
{
#region Field
public Transform horse;
public AudioClip snd_break;
public Transform pt_hit;
public Transform cart_destroy;
private Animation _myAnimation;
private Animation _horseAnimation;
private float _delay;
private int _maxHp;
private int _hp;
private bool _life = true;
private bool _super;
///
///
///
private BloodBoard _hpBar;
///
///
///
private AudioSource _audioSource;
#endregion
#region Method
public bool Init(EntityInfo info)
{
if (info != null)
{
this.id = info.guid;
this.position = info.position;
}
_maxHp = 30;
_hp = _maxHp;
this.InitView();
return true;
}
protected override void OnViewInitCompleted()
{
}
public void ShowDistance()
{
Vector3 position = transform.position;
var endPoint = GameLevel.Instance.endPosition;
GameLevel.Instance.stageProgress = position.z / endPoint.z;
if (position.z > endPoint.z)
{
GameLevel.Instance.MissionSuccess();
Instance = null;
Destroy(this.gameObject, 2f);
_super = true;
CancelInvoke(nameof(ShowDistance));
DestoryHpBar();
}
}
public void Damaged(Vector3 _damageVector)
{
if (_life && !_super)
{
_delay = 2f;
_hp = Mathf.Max(0, _hp - 1);
SetHp();
_myAnimation.Stop();
_myAnimation.Play("cart_damage");
_horseAnimation.Stop();
_audioSource.Stop();
_audioSource.PlayOneShot(snd_break);
pt_hit.GetComponent().ParticleOn();
if (_hp <= 0)
{
Transform destory = Object.Instantiate(cart_destroy, transform.position, transform.rotation);
destory.GetComponent()["cart_destroy"].speed = 0.2f;
Destroy(destory.gameObject, 5f);
horse.parent = null;
_horseAnimation["horse_run"].speed = 0.6f;
_horseAnimation.Play("horse_run");
this.transform.position = Vector3.up * 16f;
_life = false;
DestoryHpBar();
//GameCamera.Instance.LookTarget(destory, 30, 0f);
Invoke(nameof(FailStage), 1.5f);
}
}
}
private void FailStage()
{
Instance = null;
Destroy(this.gameObject, 2f);
GameLevel.Instance.MissionFail();
}
private void CreateHpBar()
{
_hpBar = BoardManager.Instance.CreateBloodBoard("BloodBoard2");
_hpBar.SetTarget(this.transform, Vector3.up * 0.3f);
_hpBar.HideSlider();
}
private void DestoryHpBar()
{
if (_hpBar)
{
_hpBar.Release();
_hpBar = null;
}
}
private void SetHp()
{
if (_hpBar)
{
_hpBar.SetHpValue(_hp, _maxHp, 0.3f, 0);
}
}
#endregion
#region Unity
public static EntityCart Instance;
private void Awake()
{
Instance = this;
_myAnimation = this.GetComponent();
_horseAnimation = horse.GetComponent();
_audioSource = GetComponent();
SoundProxy.Instance.SetAudioMixer(_audioSource, SoundProxy.FX_LAYER_INDEX);
this.transform.position = Vector3.forward * 0.5f;
}
private System.Collections.IEnumerator Start()
{
_hp = _maxHp;
SetHp();
_myAnimation["cart_run"].speed = 0.3f;
_myAnimation["cart_damage"].speed = 0.3f;
_horseAnimation["horse_walk"].speed = 0.4f;
_audioSource.Play();
InvokeRepeating(nameof(ShowDistance), 0.1f, 1f);
yield return new WaitForSeconds(0.5f);
CreateHpBar();
SetHp();
}
private void OnDestroy()
{
if (horse)
{
Destroy(horse.gameObject);
}
}
private void Update()
{
if (!_life)
{
horse.position += Vector3.forward * (Time.deltaTime * 1f);
}
else if (_delay > 0f)
{
_delay -= Time.deltaTime;
if (_delay <= 0f)
{
_myAnimation.CrossFade("cart_run");
_horseAnimation.CrossFade("horse_walk");
_audioSource.Play();
}
else if (_delay < 1.5f)
{
pt_hit.gameObject.SetActive(false);
}
}
else
{
transform.position += Vector3.forward * (Time.deltaTime * 0.1f);
}
}
#endregion
}
}