mirror of
https://github.com/ryzij/Cube-Tower-Defense.git
synced 2026-07-14 01:56:57 +00:00
Добавил возможность отслеживать спавн и уничтожение врагов
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
@@ -27,6 +28,12 @@ public class Enemy : MonoBehaviour
|
|||||||
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; }
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user