コード例 #1
0
    public static List <WeightedUnit> GetUnitsForGroupPower(UnitSpawnGroupConfig group)
    {
        int powerLeft = group.GroupPower;

        List <WeightedUnit> possibleUnits = group.SpawnableUnits.Where(u => !u.ForceUnit).ToList();
        List <WeightedUnit> choosenUnits  = group.SpawnableUnits.Where(u => u.ForceUnit).ToList();

        List <WeightedUnit> validUnits = GetUnitsInPowerRange(possibleUnits, powerLeft);

        while (validUnits.Count > 0)
        {
            WeightedUnit choosen = M_Weightable.GetWeighted(validUnits);
            choosenUnits.Add(choosen);
            int unitPower = choosen.UnitConfig.UnitPower;
            if (unitPower <= 0)
            {
                Debug.LogWarning("UNIT POWER 0, aborting to avoid infinite loop");
                return(null);
            }

            powerLeft -= unitPower;

            validUnits = GetUnitsInPowerRange(possibleUnits, powerLeft);
        }

        return(choosenUnits);
    }
コード例 #2
0
ファイル: UnitSpawnManager.cs プロジェクト: phiLyken/RC_1
    void SpawnGroup(UnitSpawnGroupConfig group, List <int> spawnerIDs)
    {
        if (group == null)
        {
            Debug.LogWarning("No Group");
            return;
        }

        globalGroupCounter++;

        List <UnitSpawner> spawnersForGroup = GetSpawnerForGroup(spawnerIDs, group);

        if (spawnersForGroup == null || spawnersForGroup.Count == 0)
        {
            Debug.LogWarning("NO SPAWNERS FOR GROUP");
            return;
        }

        List <WeightedUnit> unitConfigs = RegionLoader.GetUnitsForGroupPower(group);

        if (unitConfigs.Count > spawnersForGroup.Count)
        {
            Debug.LogWarning("Not enough spawners for my group :(   spawners:" + spawnersForGroup.Count + "  units:" + unitConfigs.Count);
            //  return;
        }

        // MDebug.Log(spawnersForGroup.Count+ "   "+unitConfigs.Count);
        while (spawnersForGroup.Count > 0 && unitConfigs.Count > 0)
        {
            // MDebug.Log("SPAWN");
            WeightedUnit unit    = unitConfigs.GetRandom();
            UnitSpawner  spawner = spawnersForGroup.GetRandom();

            unitConfigs.Remove(unit);
            spawnersForGroup.Remove(spawner);

            spawner.SpawnUnit(unit.UnitConfig, unit.TurnTimeOnSpawn, globalGroupCounter, unit.HidePlayerUnit);
        }
    }
コード例 #3
0
ファイル: SquadManager.cs プロジェクト: phiLyken/RC_1
    public static UnitSpawnGroupConfig MakeSquadGroup()
    {
        List <ScriptableUnitConfig> unit_configs = new List <ScriptableUnitConfig>();
        UnitSpawnGroupConfig        conf         = new UnitSpawnGroupConfig();

        conf.ForceGroup     = true;
        conf.SpawnerGroup   = 1;
        conf.SpawnableUnits = new List <WeightedUnit>();

        if (Instance.selected_units.IsNullOrEmpty())
        {
            Debug.LogWarning("NO UNITS SELECTED");

            Instance.unitunlocks.Select(unlock => unlock.Item).ToList().ForEach(unlock => unit_configs.Add(unlock.Tiers.GetRandom().Config));
        }
        else
        {
            foreach (var _selected in Instance.selected_units)
            {
                unit_configs.Add(TieredUnit.Unlocks(_selected.Tiers, PlayerLevel.Instance).GetHighestUnlocked().Config);
            }
        }


        List <ScriptableUnitConfig> selected = unit_configs.GetRandomRemove(Instance.GetMaxSquadsize());

        foreach (ScriptableUnitConfig unit_config in selected)
        {
            WeightedUnit unit = new WeightedUnit();
            unit.ForceUnit       = true;
            unit.TurnTimeOnSpawn = Constants.PLAYER_SQUAD_START_INITIATIVE;
            unit.UnitConfig      = unit_config;

            conf.SpawnableUnits.Add(unit);
        }

        return(conf);
    }