Ejemplo n.º 1
0
        private void HandleOnSpawnButtonClicked(IntVector2 tileCoords)
        {
            var       selectedIndex = (uint)_dropdown.value;
            int       numUnits      = _unitAmountDropdown.value + 1;
            IUnitData unitData;

            if (selectedIndex < _numPlayers)
            {
                unitData = _unitDataIndexResolver.ResolveUnitData(UnitType.Player, selectedIndex);
            }
            else
            {
                unitData = _unitDataIndexResolver.ResolveUnitData(UnitType.NonPlayer, selectedIndex - _numPlayers);
            }

            if (unitData == null)
            {
                _logger.LogError(LoggedFeature.Units, "Invalid unit index: {0}", selectedIndex);
                return;
            }

            // If only one unit, just spawn at the point.
            if (numUnits == 1)
            {
                SpawnUnit(unitData, tileCoords);
                return;
            }

            // For multiple units, spawn randomly around the position.
            IntVector2[] tilePositions = _randomGridPositionProvider.GetRandomUniquePositions(tileCoords, 1, numUnits);
            foreach (var tilePosition in tilePositions)
            {
                SpawnUnit(unitData, tilePosition);
            }
        }
        private void SpawnUnit(UnitDataReference unitDataReference, IntVector2 tileCoords)
        {
            IUnitData unitData =
                _unitDataIndexResolver.ResolveUnitData(unitDataReference.UnitType, unitDataReference.UnitIndex);

            if (unitData == null)
            {
                _logger.LogError(LoggedFeature.Units, "UnitData reference not found: {0}", unitDataReference);
                return;
            }

            UnitCommandData unitCommandData = _unitCommandDataFactory.Create(unitData);
            SpawnUnitData   spawnUnitData   = new SpawnUnitData(unitCommandData, tileCoords, isInitialSpawn: true);

            _commandQueue.Enqueue <SpawnUnitCommand, SpawnUnitData>(spawnUnitData, CommandSource.Game);
        }