update
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using Unity.FPS.Game;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.FPS.Gameplay
|
||||
{
|
||||
public class ObjectiveKillEnemies : Objective
|
||||
{
|
||||
[Tooltip("Chose whether you need to kill every enemies or only a minimum amount")]
|
||||
public bool MustKillAllEnemies = true;
|
||||
|
||||
[Tooltip("If MustKillAllEnemies is false, this is the amount of enemy kills required")]
|
||||
public int KillsToCompleteObjective = 5;
|
||||
|
||||
[Tooltip("Start sending notification about remaining enemies when this amount of enemies is left")]
|
||||
public int NotificationEnemiesRemainingThreshold = 3;
|
||||
|
||||
int m_KillTotal;
|
||||
|
||||
protected override void Start()
|
||||
{
|
||||
base.Start();
|
||||
|
||||
EventManager.AddListener<EnemyKillEvent>(OnEnemyKilled);
|
||||
|
||||
// set a title and description specific for this type of objective, if it hasn't one
|
||||
if (string.IsNullOrEmpty(Title))
|
||||
Title = "Eliminate " + (MustKillAllEnemies ? "all the" : KillsToCompleteObjective.ToString()) +
|
||||
" enemies";
|
||||
|
||||
if (string.IsNullOrEmpty(Description))
|
||||
Description = GetUpdatedCounterAmount();
|
||||
}
|
||||
|
||||
void OnEnemyKilled(EnemyKillEvent evt)
|
||||
{
|
||||
if (IsCompleted)
|
||||
return;
|
||||
|
||||
m_KillTotal++;
|
||||
|
||||
if (MustKillAllEnemies)
|
||||
KillsToCompleteObjective = evt.RemainingEnemyCount + m_KillTotal;
|
||||
|
||||
int targetRemaining = MustKillAllEnemies ? evt.RemainingEnemyCount : KillsToCompleteObjective - m_KillTotal;
|
||||
|
||||
// update the objective text according to how many enemies remain to kill
|
||||
if (targetRemaining == 0)
|
||||
{
|
||||
CompleteObjective(string.Empty, GetUpdatedCounterAmount(), "Objective complete : " + Title);
|
||||
}
|
||||
else if (targetRemaining == 1)
|
||||
{
|
||||
string notificationText = NotificationEnemiesRemainingThreshold >= targetRemaining
|
||||
? "One enemy left"
|
||||
: string.Empty;
|
||||
UpdateObjective(string.Empty, GetUpdatedCounterAmount(), notificationText);
|
||||
}
|
||||
else
|
||||
{
|
||||
// create a notification text if needed, if it stays empty, the notification will not be created
|
||||
string notificationText = NotificationEnemiesRemainingThreshold >= targetRemaining
|
||||
? targetRemaining + " enemies to kill left"
|
||||
: string.Empty;
|
||||
|
||||
UpdateObjective(string.Empty, GetUpdatedCounterAmount(), notificationText);
|
||||
}
|
||||
}
|
||||
|
||||
string GetUpdatedCounterAmount()
|
||||
{
|
||||
return m_KillTotal + " / " + KillsToCompleteObjective;
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
EventManager.RemoveListener<EnemyKillEvent>(OnEnemyKilled);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user