public void RemoveUnit(IUnitEnemy unit)
 {
     Units.Remove(unit);
     GameUnitManager.RemoveUnit(unit);
     UnitChainEvaluator.Instance.RemoveUnit(unit);
     OnRemoveUnit(unit);
 }
 private void HandleArrival()
 {
     if (_currentStreak >= GameUnitManager.UnitsOnScreenFromPercent(_fearThresholdPercent))
     {
         GameUnitManager.PerformPostKillFear(_player);
     }
 }
 public void RegisterUnit(IUnitEnemy unit)
 {
     Units.Add(unit);
     GameUnitManager.RegisterUnit(unit);
     UnitChainEvaluator.Instance.AddUnit(unit);
     OnRegisterUnit(unit);
 }
Esempio n. 4
0
    public static Vector2[] Path(IUnitEnemy unitEnemy, Vector2 targetPosition)
    {
        if (Player == null)
        {
            Player = Object.FindObjectOfType <Player>();
        }
        var startingNode = NodeGrid.Instance.NodeFromWorldPosition(unitEnemy.Transform.position);
        var targetNode   = NodeGrid.Instance.NodeFromWorldPosition(targetPosition);

        if (GameUnitManager.IsValidNodeFromUnit(targetNode, unitEnemy) && targetNode.IsWalkable)
        {
            var openSet   = new Heap <Node>(NodeGrid.Instance.MaxSize);
            var closedSet = new HashSet <Node>();

            openSet.Add(startingNode);

            while (openSet.Count > 0)
            {
                var currentNode = openSet.RemoveFirst();
                closedSet.Add(currentNode);

                if (currentNode == targetNode)
                {
                    return(RetracePath(startingNode, targetNode));
                }

                foreach (var neighbor in NodeGrid.Instance.Neighbors(currentNode, _defaultNeighborScalar))
                {
                    if (!GameUnitManager.IsValidNodeFromUnit(neighbor, unitEnemy) ||
                        NodeGrid.Instance.NodeTooCloseToSafetyGrid(Player.transform.position, neighbor) ||
                        !GameUnitManager.IsValidNodeFromPlayer(neighbor, Player) ||
                        !neighbor.IsWalkable ||
                        closedSet.Contains(neighbor))
                    {
                        continue;
                    }

                    var newMovementCostToNeighbor = currentNode.GCost + GetDistance(currentNode, neighbor);

                    if (newMovementCostToNeighbor < neighbor.GCost || !openSet.Contains(neighbor))
                    {
                        neighbor.GCost  = newMovementCostToNeighbor;
                        neighbor.HCost  = GetDistance(neighbor, targetNode);
                        neighbor.Parent = currentNode;

                        if (!openSet.Contains(neighbor))
                        {
                            openSet.Add(neighbor);
                        }
                        else
                        {
                            openSet.UpdateItem(neighbor);
                        }
                    }
                }
            }
        }

        return(null);
    }
Esempio n. 5
0
 public static void Reload()
 {
     Time.timeScale = 1f;
     Pool.ClearPools();
     GameUnitManager.Clear();
     UnitChainEvaluator.Instance.Clear();
     SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
     SceneManager.LoadScene("Game Menu UI Scene", LoadSceneMode.Additive);
 }
Esempio n. 6
0
        public LevelDirector(GameUnitManager gameUnitManager, List <MonsterStats> monsterUnits, int maxUnit)
        {
            _gameUnitManager = gameUnitManager;
            MaxUnit          = maxUnit;
            _monsterStats    = monsterUnits;
            _utilityTheory   = new UtilityTheory();

            _phaseInterfaceDict = SetUpPhaseAI();
            _phaseDictLength    = _phaseInterfaceDict.Count;

            currentPhase = Phase.BuildUp;
            BuildWaveStructure(currentPhase);
        }
Esempio n. 7
0
        public void Init(GameUnitManager gameUnitManager, MapBlockManager mapHolder, MapGrid mapGrid, List <MonsterStats> allMonsterUnits)
        {
            _levelDirector   = new LevelDirector(gameUnitManager, allMonsterUnits, PoolManager.instance.GetObjectLength(VariableFlag.Pooling.MonsterID));
            _spawnQueue      = new Queue <MonsterStats>();
            _gameUnitManager = gameUnitManager;
            _mapHolder       = mapHolder;
            _mapGrid         = mapGrid;
            _monsterUnits    = allMonsterUnits;

            _strategyMapper = new GameStrategyMapper();
            monsterLength   = _monsterUnits.Count;

            _levelDirector.OnCallReinforcement += CallReinforcement;
        }
Esempio n. 8
0
        public void SetUp(GameInputManager gameInputManager, GameUnitManager gameUnitManager, LevelDesignManager levelDesign, MapGrid mapGrid, MapBlockManager mapBlockManager,
                          STPTheme stpTheme, StatsHolder statHolder)
        {
            _gameInputManager = gameInputManager;
            _gameInputManager.OnSelectTileNode += SelectTileListener;

            _gameUnitManager    = gameUnitManager;
            _levelDesignManager = levelDesign;
            _mapGrid            = mapGrid;
            _mapBlockManager    = mapBlockManager;
            _stpTheme           = stpTheme;
            _statHolder         = statHolder;

            if (ConstructionUI != null)
            {
                ConstructionUI.TowerClickEvent += SelectTowerToBuild;
            }
        }
Esempio n. 9
0
    private void Awake()
    {
        var monsterPools = statsHolder.FindObjectByType <MonsterStats>();

        _blockManager = GetComponentInChildren <MapBlockManager>();

        _mapGrid = GetComponentInChildren <MapGrid>();

        _gameInputManager   = GetComponentInChildren <GameInputManager>();
        _gameInteractorCtrl = GetComponentInChildren <InGameUICtrl>();
        _poolManager        = GetComponentInChildren <PoolManager>();
        _gameUnitManager    = GetComponentInChildren <GameUnitManager>();
        _levelDesignManager = GetComponentInChildren <LevelDesignManager>();
        _headView           = GetComponentInChildren <HeaderView>();
        _mapBlockBottomView = GetComponentInChildren <MapBlockBottomView>();

        _mapGrid.SetUp();
        _gameInputManager.SetUp(_mapGrid, _blockManager);
        _gameUnitManager.SetUp(_blockManager, _mapGrid, poolingTheme.total);
        _levelDesignManager.Init(_gameUnitManager, _blockManager, _mapGrid, monsterPools);

        _gameInteractorCtrl.SetUp(_gameInputManager, _gameUnitManager, _levelDesignManager, _mapGrid, _blockManager, poolingTheme, statsHolder);
    }
Esempio n. 10
0
 public void LoadMainMenu()
 {
     SceneManager.LoadScene("Main Menu");
     Pool.ClearPools();
     GameUnitManager.Clear();
 }
Esempio n. 11
0
 private void Start()
 {
     GameUnitManager.RegisterUnit(this);
     UnitChainEvaluator.Instance.AddUnit(this);
 }