2025-05-18 01:04:31 +08:00

178 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-09-02
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "EntityTank" company="Kimch"></copyright>
// <summary></summary>
// ***********************************************************************
using UnityEngine;
namespace G
{
public class EntityTank : Entity
{
//private Hp_bar script_hpbar;
private Tower_base script_castle;
public AudioClip snd_break;
public AudioClip snd_hit;
public Transform pt_hit;
public Transform tank_destroy;
public Transform behit_collider;
private Transform mytransform;
private Transform hpbar;
private Transform c_destroy;
private Animation myanimation;
private float delay;
private float movespeed = 0.1f;
private int damage;
private short maxhp;
private short hp;
private bool life = true;
#pragma warning disable CS0649 // 从未对字段“Tank.super”赋值字段将一直保持其默认值 false
private bool super;
#pragma warning restore CS0649 // 从未对字段“Tank.super”赋值字段将一直保持其默认值 false
private bool stophit;
private short cur_stage_index;
private GameCamera script_cam;
private void Awake()
{
cur_stage_index = 1;
maxhp = (short)(200 + 3 * cur_stage_index);
hp = maxhp;
mytransform = base.transform;
myanimation = base.GetComponent<Animation>();
mytransform.position = -Vector3.forward * 0.7f;
//hpbar = GameObject.FindWithTag("efs_mon").GetComponent<Monster_efs>().CreatHpbar(new Vector2(0.1f, 0.02f), false, true);
//hpbar.position = mytransform.position + Vector3.up * 0.3f;
//hpbar.parent = mytransform;
//script_hpbar = hpbar.GetComponent<Hp_bar>();
}
private void OnEnable()
{
life = true;
behit_collider.GetComponent<Collider>().enabled = true;
}
private void Start()
{
myanimation["tank_run"].speed = 0.4f;
myanimation["tank_damage"].speed = 0.3f;
myanimation["tank_attack"].speed = 0.3f;
base.GetComponent<AudioSource>().Play();
script_castle = GameObject.FindWithTag("Finish").GetComponent<Tower_base>();
script_cam = Camera.main.GetComponent<GameCamera>();
}
public void Damaged(Vector3 _damageVector)
{
if (!life || super)
{
return;
}
damage = (int)_damageVector.y;
_damageVector[1] = 0f;
myanimation.Stop();
myanimation.Play("tank_damage");
delay = 2f;
base.GetComponent<AudioSource>().Stop();
base.GetComponent<AudioSource>().PlayOneShot(snd_break);
pt_hit.particleEmitter().emit = true;
hp -= (short)damage;
//script_hpbar.Damaged(maxhp, hp, mytransform, 0.2f, -1);
if (hp <= 0)
{
if (c_destroy == null)
{
c_destroy = Object.Instantiate(tank_destroy, mytransform.position, mytransform.rotation);
}
else
{
c_destroy.position = mytransform.position;
c_destroy.gameObject.SetActive(true);
}
behit_collider.GetComponent<Collider>().enabled = false;
mytransform.position = Vector3.up * 20f;
hp = maxhp;
//script_hpbar.Damaged(maxhp, hp, mytransform, 0.2f, -1);
base.gameObject.SetActive(false);
life = false;
}
}
public void HurryUp()
{
movespeed = 0.5f;
myanimation["tank_run"].speed = 2f;
}
public void AttakCastle()
{
if (!script_castle.TankDamage())
{
stophit = true;
}
script_cam.Hitcam();
base.GetComponent<AudioSource>().PlayOneShot(snd_hit);
}
private void Update()
{
if (!life)
{
return;
}
if (delay > 0f)
{
delay -= Time.deltaTime;
if (delay <= 0f)
{
myanimation.CrossFade("tank_run");
base.GetComponent<AudioSource>().Play();
}
else if (delay < 1.5f)
{
pt_hit.particleEmitter().emit = false;
}
}
else if (!stophit)
{
Vector3 position = mytransform.position;
if (position.z > 9.25f)
{
myanimation.Play("tank_attack");
}
else if (life)
{
mytransform.position += Vector3.forward * Time.deltaTime * movespeed;
}
}
}
}
}