Update AdventureQuestStage.java

format
This commit is contained in:
Anthony Calosa
2023-04-17 00:55:09 +08:00
committed by GitHub
parent 21d4478f28
commit 3948a6df8a

View File

@@ -50,8 +50,8 @@ public class AdventureQuestStage implements Serializable {
public UUID stageID; public UUID stageID;
public void initialize(){ public void initialize() {
if (stageID == null){ if (stageID == null) {
stageID = UUID.randomUUID(); stageID = UUID.randomUUID();
} }
} }
@@ -60,12 +60,12 @@ public class AdventureQuestStage implements Serializable {
//Todo - implement //Todo - implement
} }
public AdventureQuestController.QuestStatus getStatus(){ public AdventureQuestController.QuestStatus getStatus() {
return status; return status;
} }
public void setStatus(AdventureQuestController.QuestStatus newStatus){ public void setStatus(AdventureQuestController.QuestStatus newStatus) {
if (!status.equals(newStatus) && newStatus.equals(AdventureQuestController.QuestStatus.Active)){ if (!status.equals(newStatus) && newStatus.equals(AdventureQuestController.QuestStatus.Active)) {
AdventureQuestController.instance().addQuestSprites(this); AdventureQuestController.instance().addQuestSprites(this);
} }
status = newStatus; status = newStatus;
@@ -80,30 +80,26 @@ public class AdventureQuestStage implements Serializable {
targetPOI = target; targetPOI = target;
} }
public void setTargetPOI(Dictionary<String, PointOfInterest> poiTokens){ public void setTargetPOI(Dictionary<String, PointOfInterest> poiTokens) {
if (POIToken != null && POIToken.length() > 0) {
if (POIToken != null && POIToken.length() > 0){
PointOfInterest tokenTarget = poiTokens.get(POIToken); PointOfInterest tokenTarget = poiTokens.get(POIToken);
if (tokenTarget != null){ if (tokenTarget != null) {
setTargetPOI(tokenTarget); setTargetPOI(tokenTarget);
return; return;
} } else {
else{ System.out.println("Quest Stage '" + this.name + "' failed to generate POI from token reference: '" + POIToken + "'");
System.out.println("Quest Stage '" + this.name+ "' failed to generate POI from token reference: '" + POIToken +"'");
} }
} }
if (here){ if (here) {
setTargetPOI(AdventureQuestController.instance().mostRecentPOI); setTargetPOI(AdventureQuestController.instance().mostRecentPOI);
return; return;
} }
if (!anyPOI) { if (!anyPOI) {
List<PointOfInterest> candidates = Current.world().getAllPointOfInterest(); List<PointOfInterest> candidates = Current.world().getAllPointOfInterest();
for (String tag : POITags) for (String tag : POITags) {
{
candidates.removeIf(q -> Arrays.stream(q.getData().questTags).noneMatch(tag::equals)); candidates.removeIf(q -> Arrays.stream(q.getData().questTags).noneMatch(tag::equals));
} }
if (candidates.size() < 1) if (candidates.size() < 1) {
{
//no POI matched, fall back to anyPOI valid for the objective that doesn't match all tags //no POI matched, fall back to anyPOI valid for the objective that doesn't match all tags
candidates = Current.world().getAllPointOfInterest(); candidates = Current.world().getAllPointOfInterest();
if (objective == AdventureQuestController.ObjectiveTypes.Clear) if (objective == AdventureQuestController.ObjectiveTypes.Clear)
@@ -112,16 +108,15 @@ public class AdventureQuestStage implements Serializable {
candidates.removeIf(q -> Arrays.asList(q.getData().questTags).contains("Hostile")); candidates.removeIf(q -> Arrays.asList(q.getData().questTags).contains("Hostile"));
return; return;
} }
count1 = (count1* candidates.size()/ 100); count1 = (count1 * candidates.size() / 100);
count2 = (count2* candidates.size()) /100; count2 = (count2 * candidates.size()) / 100;
int targetIndex = Math.max(0,(int) (count1 - count2 + (new Random().nextFloat() * count2 * 2))); int targetIndex = Math.max(0, (int) (count1 - count2 + (new Random().nextFloat() * count2 * 2)));
if (targetIndex < candidates.size() && targetIndex > 0 && count1 > 0) { if (targetIndex < candidates.size() && targetIndex > 0 && count1 > 0) {
candidates.sort(new AdventureQuestController.DistanceSort()); candidates.sort(new AdventureQuestController.DistanceSort());
setTargetPOI(candidates.get(targetIndex)); setTargetPOI(candidates.get(targetIndex));
} } else {
else{ if (count1 != 0 || count2 != 0) {
if (count1 !=0 || count2 != 0) {
System.out.println("Quest Stage '" + this.name + "' has invalid count1 ('" + count1 + "') and/or count2 ('" + count2 + "') value"); System.out.println("Quest Stage '" + this.name + "' has invalid count1 ('" + count1 + "') and/or count2 ('" + count2 + "') value");
} }
setTargetPOI(Aggregates.random(candidates)); setTargetPOI(Aggregates.random(candidates));
@@ -133,11 +128,13 @@ public class AdventureQuestStage implements Serializable {
public EnemySprite getTargetSprite() { public EnemySprite getTargetSprite() {
return targetSprite; return targetSprite;
} }
public void setTargetEnemyData(EnemyData target) { public void setTargetEnemyData(EnemyData target) {
targetEnemyData = target; targetEnemyData = target;
} }
public EnemyData getTargetEnemyData() { public EnemyData getTargetEnemyData() {
if (targetEnemyData == null & targetSprite!=null) if (targetEnemyData == null & targetSprite != null)
return targetSprite.getData(); return targetSprite.getData();
return targetEnemyData; return targetEnemyData;
} }
@@ -147,13 +144,11 @@ public class AdventureQuestStage implements Serializable {
} }
public AdventureQuestController.QuestStatus updateEnterPOI(PointOfInterest entered) { public AdventureQuestController.QuestStatus updateEnterPOI(PointOfInterest entered) {
if (getStatus() == AdventureQuestController.QuestStatus.Complete){ if (getStatus() == AdventureQuestController.QuestStatus.Complete) {
return status; return status;
} } else if (getStatus() == AdventureQuestController.QuestStatus.Failed) {
else if (getStatus() == AdventureQuestController.QuestStatus.Failed){
return status; return status;
} } else {
else{
checkIfInTargetLocation(entered); checkIfInTargetLocation(entered);
if (inTargetLocation && if (inTargetLocation &&
(this.objective == AdventureQuestController.ObjectiveTypes.Delivery || (this.objective == AdventureQuestController.ObjectiveTypes.Delivery ||
@@ -164,14 +159,12 @@ public class AdventureQuestStage implements Serializable {
return status; return status;
} }
public AdventureQuestController.QuestStatus updateMapFlag(String mapFlag, int mapFlagValue){ public AdventureQuestController.QuestStatus updateMapFlag(String mapFlag, int mapFlagValue) {
if (getStatus() == AdventureQuestController.QuestStatus.Complete){ if (getStatus() == AdventureQuestController.QuestStatus.Complete) {
return status; return status;
} } else if (getStatus() == AdventureQuestController.QuestStatus.Failed) {
else if (getStatus() == AdventureQuestController.QuestStatus.Failed){
return status; return status;
} } else {
else {
if (this.objective == AdventureQuestController.ObjectiveTypes.MapFlag) { if (this.objective == AdventureQuestController.ObjectiveTypes.MapFlag) {
if (mapFlag.equals(this.mapFlag) && mapFlagValue >= this.mapFlagValue) if (mapFlag.equals(this.mapFlag) && mapFlagValue >= this.mapFlagValue)
status = AdventureQuestController.QuestStatus.Complete; status = AdventureQuestController.QuestStatus.Complete;
@@ -179,38 +172,36 @@ public class AdventureQuestStage implements Serializable {
return status; return status;
} }
} }
public AdventureQuestController.QuestStatus updateLeave(){
if (status == AdventureQuestController.QuestStatus.Complete){ public AdventureQuestController.QuestStatus updateLeave() {
if (status == AdventureQuestController.QuestStatus.Complete) {
return status; return status;
} }
if (status == AdventureQuestController.QuestStatus.Failed){ if (status == AdventureQuestController.QuestStatus.Failed) {
return status; return status;
} }
inTargetLocation = false; //todo: handle case when called between multi-map PoIs (if necessary) inTargetLocation = false; //todo: handle case when called between multi-map PoIs (if necessary)
if (this.objective == AdventureQuestController.ObjectiveTypes.Leave){ if (this.objective == AdventureQuestController.ObjectiveTypes.Leave) {
status = AdventureQuestController.QuestStatus.Complete; status = AdventureQuestController.QuestStatus.Complete;
} }
return status; return status;
} }
public AdventureQuestController.QuestStatus updateWin(EnemySprite defeated, boolean mapCleared){ public AdventureQuestController.QuestStatus updateWin(EnemySprite defeated, boolean mapCleared) {
//todo - Does this need to also be called for alternate mob removal types? //todo - Does this need to also be called for alternate mob removal types?
if (status == AdventureQuestController.QuestStatus.Complete){ if (status == AdventureQuestController.QuestStatus.Complete) {
return status; return status;
} }
if (status == AdventureQuestController.QuestStatus.Failed){ if (status == AdventureQuestController.QuestStatus.Failed) {
return status; return status;
} }
if (this.objective == AdventureQuestController.ObjectiveTypes.Clear) if (this.objective == AdventureQuestController.ObjectiveTypes.Clear) {
{ if (mapCleared && inTargetLocation) {
if (mapCleared && inTargetLocation)
{
status = AdventureQuestController.QuestStatus.Complete; status = AdventureQuestController.QuestStatus.Complete;
} }
} } else if (this.objective == AdventureQuestController.ObjectiveTypes.Defeat) {
else if (this.objective == AdventureQuestController.ObjectiveTypes.Defeat) {
{ {
if (mixedEnemies){ if (mixedEnemies) {
List<String> defeatedTags = Arrays.stream(defeated.getData().questTags).collect(Collectors.toList()); List<String> defeatedTags = Arrays.stream(defeated.getData().questTags).collect(Collectors.toList());
for (String targetTag : enemyTags) { for (String targetTag : enemyTags) {
if (!defeatedTags.contains(targetTag)) { if (!defeatedTags.contains(targetTag)) {
@@ -218,50 +209,45 @@ public class AdventureQuestStage implements Serializable {
return status; return status;
} }
} }
} } else {
else{ if (defeated.getData() != targetEnemyData)
if (defeated.getData()!=targetEnemyData)
//Does not count //Does not count
return status; return status;
} }
//All tags matched, kill confirmed //All tags matched, kill confirmed
if (++progress1 >= count1){ if (++progress1 >= count1) {
status = AdventureQuestController.QuestStatus.Complete; status = AdventureQuestController.QuestStatus.Complete;
} }
} }
} } else if (this.objective == AdventureQuestController.ObjectiveTypes.Hunt) {
else if (this.objective == AdventureQuestController.ObjectiveTypes.Hunt) if (defeated.equals(targetSprite)) {
{
if (defeated.equals(targetSprite)){
status = AdventureQuestController.QuestStatus.Complete; status = AdventureQuestController.QuestStatus.Complete;
} }
} }
return status; return status;
} }
public void checkIfInTargetLocation(PointOfInterest entered){ public void checkIfInTargetLocation(PointOfInterest entered) {
if (targetPOI == null){ if (targetPOI == null) {
List<String> enteredTags = Arrays.stream(entered.getData().questTags).collect(Collectors.toList()); List<String> enteredTags = Arrays.stream(entered.getData().questTags).collect(Collectors.toList());
for (String tag : POITags){ for (String tag : POITags) {
if (!enteredTags.contains(tag)) { if (!enteredTags.contains(tag)) {
inTargetLocation = false; inTargetLocation = false;
return; return;
} }
} }
} } else if (!targetPOI.getPosition().equals(entered.getPosition())) {
else if (!targetPOI.getPosition().equals(entered.getPosition())){
inTargetLocation = false; inTargetLocation = false;
return; return;
} }
inTargetLocation = true; inTargetLocation = true;
} }
public AdventureQuestController.QuestStatus updateLose(EnemySprite defeatedBy){ public AdventureQuestController.QuestStatus updateLose(EnemySprite defeatedBy) {
if (status != AdventureQuestController.QuestStatus.Failed && this.objective == AdventureQuestController.ObjectiveTypes.Defeat) { if (status != AdventureQuestController.QuestStatus.Failed && this.objective == AdventureQuestController.ObjectiveTypes.Defeat) {
{ {
if (mixedEnemies){ if (mixedEnemies) {
List<String> defeatedByTags = Arrays.stream(defeatedBy.getData().questTags).collect(Collectors.toList()); List<String> defeatedByTags = Arrays.stream(defeatedBy.getData().questTags).collect(Collectors.toList());
for (String targetTag : enemyTags) { for (String targetTag : enemyTags) {
if (!defeatedByTags.contains(targetTag)) { if (!defeatedByTags.contains(targetTag)) {
@@ -269,58 +255,53 @@ public class AdventureQuestStage implements Serializable {
return status; return status;
} }
} }
} } else {
else{ if (defeatedBy.getData() != targetEnemyData)
if (defeatedBy.getData()!=targetEnemyData)
//Does not count //Does not count
return status; return status;
} }
//All tags matched //All tags matched
//progress2: number of times defeated by a matching enemy //progress2: number of times defeated by a matching enemy
//count2: if > 0, fail once defeated this many times //count2: if > 0, fail once defeated this many times
if (status == AdventureQuestController.QuestStatus.Active && ++progress2 >= count2 && count2 > 0){ if (status == AdventureQuestController.QuestStatus.Active && ++progress2 >= count2 && count2 > 0) {
status = AdventureQuestController.QuestStatus.Failed; status = AdventureQuestController.QuestStatus.Failed;
} }
} }
} } else if (status == AdventureQuestController.QuestStatus.Active && this.objective == AdventureQuestController.ObjectiveTypes.Hunt) {
else if (status == AdventureQuestController.QuestStatus.Active && this.objective == AdventureQuestController.ObjectiveTypes.Hunt) if (defeatedBy.equals(targetSprite)) {
{
if (defeatedBy.equals(targetSprite)){
status = AdventureQuestController.QuestStatus.Failed; status = AdventureQuestController.QuestStatus.Failed;
} }
} }
return status; return status;
} }
public AdventureQuestController.QuestStatus updateDespawn(EnemySprite despawned){ public AdventureQuestController.QuestStatus updateDespawn(EnemySprite despawned) {
if (status == AdventureQuestController.QuestStatus.Active && this.objective == AdventureQuestController.ObjectiveTypes.Hunt) if (status == AdventureQuestController.QuestStatus.Active && this.objective == AdventureQuestController.ObjectiveTypes.Hunt) {
{ if (despawned.equals(targetSprite)) {
if (despawned.equals(targetSprite)){
status = AdventureQuestController.QuestStatus.Failed; status = AdventureQuestController.QuestStatus.Failed;
} }
} }
return status; return status;
} }
public void updateArenaComplete(boolean winner){ public void updateArenaComplete(boolean winner) {
if (this.objective == AdventureQuestController.ObjectiveTypes.Arena) if (this.objective == AdventureQuestController.ObjectiveTypes.Arena) {
{ if (inTargetLocation) {
if (inTargetLocation){ if (winner) {
if (winner){
status = AdventureQuestController.QuestStatus.Complete; status = AdventureQuestController.QuestStatus.Complete;
} } else {
else {
status = AdventureQuestController.QuestStatus.Failed; status = AdventureQuestController.QuestStatus.Failed;
} }
} }
} }
} }
public AdventureQuestStage(){ public AdventureQuestStage() {
} }
public AdventureQuestStage(AdventureQuestStage other){
public AdventureQuestStage(AdventureQuestStage other) {
this.status = other.status; this.status = other.status;
this.prologueDisplayed = other.prologueDisplayed; this.prologueDisplayed = other.prologueDisplayed;
this.prologue = new DialogData(other.prologue); this.prologue = new DialogData(other.prologue);