Добавил возможность отслеживать спавн и уничтожение врагов

This commit is contained in:
2026-05-13 00:46:42 +03:00
parent bf9099c8b5
commit 87a0218d3b
6 changed files with 92 additions and 8 deletions
+23 -1
View File
@@ -3964,6 +3964,7 @@ MonoBehaviour:
_gameManager: {fileID: 1875710079} _gameManager: {fileID: 1875710079}
_sandPathBuildService: {fileID: 305503} _sandPathBuildService: {fileID: 305503}
_turretShop: {fileID: 1311268619} _turretShop: {fileID: 1311268619}
_spawnDeathControl: {fileID: 694046010}
--- !u!1 &645921916 --- !u!1 &645921916
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -4217,6 +4218,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 694046009} - component: {fileID: 694046009}
- component: {fileID: 694046008} - component: {fileID: 694046008}
- component: {fileID: 694046010}
m_Layer: 0 m_Layer: 0
m_Name: EnemySpawner m_Name: EnemySpawner
m_TagString: Untagged m_TagString: Untagged
@@ -4240,7 +4242,9 @@ MonoBehaviour:
_pathBuildService: {fileID: 305503} _pathBuildService: {fileID: 305503}
_enemyHolder: {fileID: 180146475} _enemyHolder: {fileID: 180146475}
_spawnPoint: {fileID: 0} _spawnPoint: {fileID: 0}
_wallet: {fileID: 1030979928} _onEnemySpawned:
m_PersistentCalls:
m_Calls: []
--- !u!4 &694046009 --- !u!4 &694046009
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -4257,6 +4261,24 @@ Transform:
- {fileID: 180146475} - {fileID: 180146475}
m_Father: {fileID: 481586150} m_Father: {fileID: 481586150}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &694046010
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 694046007}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 584d2a34a7bab574594a37606a39be8e, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::SpawnDeathEnemyController
_gameManager: {fileID: 1875710079}
_enemySpawner: {fileID: 694046008}
_wallet: {fileID: 1030979928}
_onLastEnemyDestroyed:
m_PersistentCalls:
m_Calls: []
--- !u!1001 &697685528 --- !u!1001 &697685528
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
+8
View File
@@ -5,6 +5,7 @@ public class Debugger : MonoBehaviour
[SerializeField] private GameManager _gameManager; [SerializeField] private GameManager _gameManager;
[SerializeField] private SandPathBuildService _sandPathBuildService; [SerializeField] private SandPathBuildService _sandPathBuildService;
[SerializeField] private TurretsShop _turretShop; [SerializeField] private TurretsShop _turretShop;
[SerializeField] private SpawnDeathEnemyController _spawnDeathControl;
private void OnEnable() private void OnEnable()
{ {
@@ -12,6 +13,7 @@ public class Debugger : MonoBehaviour
_sandPathBuildService.OnBuildComplete += OnBuildComplete; _sandPathBuildService.OnBuildComplete += OnBuildComplete;
_turretShop.OnTurretSelected += OnTurretSelected; _turretShop.OnTurretSelected += OnTurretSelected;
_turretShop.OnTurretDeselected += OnTurretDeselected; _turretShop.OnTurretDeselected += OnTurretDeselected;
_spawnDeathControl.OnLastEnemyDestroyed += OnLastEnemyDestroyed;
} }
private void OnDisable() private void OnDisable()
@@ -20,6 +22,7 @@ public class Debugger : MonoBehaviour
_sandPathBuildService.OnBuildComplete -= OnBuildComplete; _sandPathBuildService.OnBuildComplete -= OnBuildComplete;
_turretShop.OnTurretSelected -= OnTurretSelected; _turretShop.OnTurretSelected -= OnTurretSelected;
_turretShop.OnTurretDeselected -= OnTurretDeselected; _turretShop.OnTurretDeselected -= OnTurretDeselected;
_spawnDeathControl.OnLastEnemyDestroyed -= OnLastEnemyDestroyed;
} }
private static void OnGameStateChanged(GameManager.GameState newState) private static void OnGameStateChanged(GameManager.GameState newState)
@@ -41,4 +44,9 @@ public class Debugger : MonoBehaviour
{ {
print("Turret deselected"); print("Turret deselected");
} }
private void OnLastEnemyDestroyed()
{
print("Last enemy destroyed");
}
} }
+10 -1
View File
@@ -11,6 +11,7 @@ public class Enemy : MonoBehaviour
[SerializeField] private int _killReward = 10; [SerializeField] private int _killReward = 10;
[SerializeField] private UnityEvent<float> _onHealthChanged; [SerializeField] private UnityEvent<float> _onHealthChanged;
[SerializeField] private UnityEvent<OnEnemyDeathEventArgs> _onDeath; [SerializeField] private UnityEvent<OnEnemyDeathEventArgs> _onDeath;
[SerializeField] private UnityEvent _onDestroyed;
private Queue<Vector3> _path; private Queue<Vector3> _path;
private Vector3 _target; private Vector3 _target;
@@ -26,7 +27,13 @@ public class Enemy : MonoBehaviour
add => _onDeath.AddListener(value); add => _onDeath.AddListener(value);
remove => _onDeath.RemoveListener(value); remove => _onDeath.RemoveListener(value);
} }
public event UnityAction OnDestroyed
{
add => _onDestroyed.AddListener(value);
remove => _onDestroyed.RemoveListener(value);
}
public SandPathBuildService PathBuildService public SandPathBuildService PathBuildService
{ {
get => _pathService; get => _pathService;
@@ -82,6 +89,8 @@ public class Enemy : MonoBehaviour
} }
} }
private void OnDestroy() => _onDestroyed?.Invoke();
public class OnEnemyDeathEventArgs public class OnEnemyDeathEventArgs
{ {
public int KillReward { get; set; } public int KillReward { get; set; }
+8 -6
View File
@@ -1,7 +1,6 @@
using System;
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
using System.Collections.Generic; using UnityEngine.Events;
public class EnemySpawner : MonoBehaviour public class EnemySpawner : MonoBehaviour
{ {
@@ -9,9 +8,13 @@ public class EnemySpawner : MonoBehaviour
[SerializeField] private SandPathBuildService _pathBuildService; [SerializeField] private SandPathBuildService _pathBuildService;
[SerializeField] private Transform _enemyHolder; [SerializeField] private Transform _enemyHolder;
[SerializeField] private Transform _spawnPoint; [SerializeField] private Transform _spawnPoint;
[SerializeField] private Wallet _wallet; [SerializeField] private UnityEvent<Enemy> _onEnemySpawned;
//private readonly List<Enemy> _enemies = new(); public event UnityAction<Enemy> OnEnemySpawned
{
add => _onEnemySpawned.AddListener(value);
remove => _onEnemySpawned.RemoveListener(value);
}
private void Awake() private void Awake()
{ {
@@ -42,8 +45,7 @@ public class EnemySpawner : MonoBehaviour
{ {
var enemy = Instantiate(prefab, _spawnPoint.position, _spawnPoint.rotation, _enemyHolder); var enemy = Instantiate(prefab, _spawnPoint.position, _spawnPoint.rotation, _enemyHolder);
enemy.PathBuildService = _pathBuildService; enemy.PathBuildService = _pathBuildService;
enemy.OnDeath += e => _wallet.AddMoney(e.KillReward); _onEnemySpawned?.Invoke(enemy);
//_enemies.Add(enemy);
yield return wait; yield return wait;
} }
@@ -0,0 +1,41 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class SpawnDeathEnemyController : MonoBehaviour
{
[SerializeField] private GameManager _gameManager;
[SerializeField] private EnemySpawner _enemySpawner;
[SerializeField] private Wallet _wallet;
[SerializeField] private UnityEvent _onLastEnemyDestroyed;
public event UnityAction OnLastEnemyDestroyed
{
add => _onLastEnemyDestroyed.AddListener(value);
remove => _onLastEnemyDestroyed.RemoveListener(value);
}
private readonly List<Enemy> _enemies = new();
private void OnEnable()
{
_enemySpawner.OnEnemySpawned += OnEnemySpawned;
}
private void OnDisable()
{
_enemySpawner.OnEnemySpawned -= OnEnemySpawned;
}
private void OnEnemySpawned(Enemy enemy)
{
enemy.OnDeath += e => _wallet.AddMoney(e.KillReward);
enemy.OnDestroyed += () =>
{
_enemies.Remove(enemy);
if (_enemies.Count == 0)
_onLastEnemyDestroyed?.Invoke();
};
_enemies.Add(enemy);
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 584d2a34a7bab574594a37606a39be8e