예제 #1
0
    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 ) ;
    }