Olá! O professor pediu para realizarmos a criação do status do inimigo e status do player via herança. Realizei a criação dos status para cada e fiz algumas mudanças no que foi feito no projeto até o momento. Por isso, gostaria de saber se o que fiz fez algum sentido e que melhorias posso fazer.
De início, pensei na ideia de que como o status que guarda a vida utiliza-lo para guardar os métodos de tomar dano e morrer. Com isso, em vez de utilizar a interface no ControlaJogador, passei para os scripts de status do jogador e de status do inimigo. Além disso, adicionei o tipo de zumbi no status do inimigo em vez de deixar no ControlaInimigo.
Script de status do Jogador:
public class StatusPlayer : Status, IMatavel
{
public int Protection = 5;
public string TypeWeapon = "Pistola";
public Controlador_Interface scriptControladorInterface;
public AudioClip DamageSound;
new public void CalcularDano()
{
if (TypeWeapon == "Pistola") // Verifica Tipo Arma
Damage = 1;
}
public void TomarDano(int damage)
{
CurrentLife -= (damage - Protection);
scriptControladorInterface.AtualizadorSlider(); // Chamando atualizador de barra de vida
Controlador_Audio.instance.PlayOneShot(DamageSound); // Play som de dano
if (CurrentLife <= 0)
{
Morrer();
}
}
public void Morrer()
{
Time.timeScale = 0; // Pause Game
GetComponent<Movimentacao_Player>().GameOver.SetActive(true); // Enviar aviso de game over
}
}
Script de Status do Inimigo:
public class StatusEnemy : Status, IMatavel
{
public int ZombieType;
public AudioClip DeathZombieSound;
public float counterWalk;
public float timeToWalk = 4;
void Start()
{
GenerateZombieType();
}
void GenerateZombieType()
{
ZombieType = Random.Range(1, 28); // Escolha aleatoria de skin
transform.GetChild(ZombieType).gameObject.SetActive(true); // Ativar Skin zumbi
}
new public void CalcularDano()
{
Damage = Random.Range(20,31); // Aleatorizando dano
}
public void TomarDano(int dano)
{
CurrentLife -= dano;
if (CurrentLife <= 0) // Verificar vida
{
Morrer();
}
}
public void Morrer()
{
Destroy(gameObject); // Destruir zumbi
Controlador_Audio.instance.PlayOneShot(DeathZombieSound); // Play som de morte
}
}
Script Status:
public class Status : MonoBehaviour
{
public float Life;
[HideInInspector]
public float CurrentLife;
public float MovementSpeed;
public int Damage;
void Awake()
{
CurrentLife = Life;
}
public void CalcularDano() { }
}
Acabei utilizando o método de CalcularDano como herança para os outros status pois ambos iriam calcular o dano que os personagens vão realizar. Entretanto, como são formas diferentes de cálculo, seria melhor utilizar uma interface para colocar o método em ambos em vez de puxar do script de Status? Ou utilizar métodos próprios com nomes diferentes?
Outra coisa que eu pensei, mas para realizar um pouco mais a frente, seria bom criar um status para a arma e me basear no dano que dou ao inimigo a partir dela e não a partir do status do jogador? Meio que abrindo portas para o uso de diferentes tipo de armas no jogo e mudando algumas propriedades como fire rate, dano etc.