mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Adventure - 1 tile rivers, upping quest enemy spawn
This commit is contained in:
@@ -2,10 +2,12 @@ package forge.adventure.data;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import forge.adventure.util.AdventureQuestController;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
@@ -85,10 +87,12 @@ public class BiomeData implements Serializable {
|
||||
}
|
||||
|
||||
public EnemyData getEnemy(float difficultyFactor) {
|
||||
Map<String, Float> boostedSpawns = AdventureQuestController.instance().getBoostedSpawns(enemyList);
|
||||
EnemyData bestData = null;
|
||||
float biggestNumber = 0.0f;
|
||||
for (EnemyData data : enemyList) {
|
||||
float newNumber = (1.0f + (data.spawnRate * rand.nextFloat())) * difficultyFactor;
|
||||
float boost = boostedSpawns.getOrDefault(data.getName(), 0.0f); //Each active quest stage will divide 1.0f across any valid enemies to defeat
|
||||
float newNumber = (1.0f + ((data.spawnRate + boost) * rand.nextFloat())) * difficultyFactor;
|
||||
if (newNumber > biggestNumber) {
|
||||
biggestNumber = newNumber;
|
||||
bestData = data;
|
||||
|
||||
@@ -17,9 +17,44 @@ import forge.util.Aggregates;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class AdventureQuestController implements Serializable {
|
||||
|
||||
public Map<String, Float> getBoostedSpawns(List<EnemyData> localSpawns) {
|
||||
Map<String,Float> boostedSpawns = new HashMap<>();
|
||||
for (AdventureQuestData q : Current.player().getQuests()){
|
||||
for (AdventureQuestStage c : q.stages){
|
||||
if (c.getStatus().equals(QuestStatus.Active) && c.objective.equals(ObjectiveTypes.Defeat))
|
||||
{
|
||||
List<String> toBoost = new ArrayList<>();
|
||||
if (c.mixedEnemies){
|
||||
for (EnemyData enemy : localSpawns){
|
||||
List<String> candidateTags = Arrays.stream(enemy.questTags).collect(Collectors.toList());
|
||||
for (String targetTag : c.enemyTags) {
|
||||
if (!candidateTags.contains(targetTag)) {
|
||||
continue;
|
||||
}
|
||||
toBoost.add(enemy.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
toBoost.add(c.getTargetEnemyData().getName());
|
||||
}
|
||||
if (!toBoost.isEmpty()) {
|
||||
float value = 1.0f / toBoost.size();
|
||||
for (String key : toBoost) {
|
||||
float existingValue = boostedSpawns.getOrDefault(key, 0.0f);
|
||||
boostedSpawns.put(key, value + existingValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return boostedSpawns;
|
||||
}
|
||||
|
||||
public enum ObjectiveTypes{
|
||||
None,
|
||||
Arena,
|
||||
|
||||
Reference in New Issue
Block a user