public void SpawnEnemy(EnemySpawnData spawnData) { EnemyData data; if (!_enemyDataConfig.TryGetValue(spawnData.EnemyType, out data)) { CustomLogger.Error(nameof(EnemyManager), $"Could not retrieve {nameof(EnemyData)} from id {spawnData.EnemyType}"); return; } // Get a pooled enemy object PooledObject pooledObject; if (!PooledObjectManager.Instance.UsePooledObject(data.UnitPrefabId, out pooledObject)) { PooledObjectManager.Instance.RegisterPooledObject(data.UnitPrefabId, 1); CustomLogger.Log(nameof(EnemyManager), $"{data.UnitPrefabId} not yet registered with object pool. Registering now..."); SpawnEnemy(spawnData); return; } EnemyUnit unit = pooledObject as EnemyUnit; if (unit == null) { CustomLogger.Error(nameof(EnemyManager), $"Pooled Object was not of type {nameof(EnemyUnit)}"); return; } // prep unit unit.transform.position = spawnData.Position; UnitInitializationData initData = new UnitInitializationData() { OverrideUniqueId = spawnData.OverrideId, UnitData = data }; unit.Initialize(initData); unit.CombatController.SetWeapon(data.EquippedWeapon); AddUnitListeners(unit); unit.Spawn(); UnitsManager.Instance.RegisterUnit(unit); // add enemy controller to list and dictionary _enemyUnitsById.Add(unit.UnitId, new EnemyInfo(unit.UnitId, spawnData.PatrolLoopId, unit)); OnEnemySpawned?.Invoke(unit); }
public virtual void Initialize(PooledObjectInitializationData initializationData) { UnitInitializationData initData = initializationData as UnitInitializationData; if (initData == null) { Debug.LogError($"[{name}]: Initialization data was not of type {nameof(UnitInitializationData)}!"); return; } if (!string.IsNullOrEmpty(initData.OverrideUniqueId)) { UnitId = initData.OverrideUniqueId; } else { UnitId = GenerateUniqueUnitId(initData.UnitData.UnitPrefabId); } UnitData = initData.UnitData; _damageable.Initialize(); // to prevent race condition _moveController.Initialize(); _animationController.Initialize(); SubscribeToEvents(); OnUnitInitialized?.Invoke(); }
public UnitInitializationData( UnitInitializationData _src ) { unitName = _src.unitName ; prefabName = _src.prefabName ; unitDataTemplateName = _src.unitDataTemplateName ; raceName = _src.raceName ; sideName = _src.sideName ; initPosition = _src.initPosition ; initOrientation = _src.initOrientation ; supplementalVec = _src.supplementalVec ; }
public void CheckCustomMainCharacter() { if( false == GlobalSingleton.m_CustomActive ) return ; UnitInitializationData data = new UnitInitializationData() ; data.unitName = ConstName.MainCharacterObjectName ; data.prefabName = GlobalSingleton.m_CustomPrefabName ; data.unitDataTemplateName = GlobalSingleton.m_CustomUnitDataName ; data.raceName = "Federation" ; data.sideName = "Ally" ; data.initPosition.Setup( "MainCharacterStartPosition" ) ; GenerateUnit( data.unitName , data.prefabName , data.unitDataTemplateName , data.raceName , data.sideName , data.initPosition.GetPosition() , data.initOrientation , data.supplementalVec ) ; }