[AB-xxx] providing more information in the rank model

This commit is contained in:
Sheldan
2022-12-20 22:15:05 +01:00
parent 4c71ffbb7e
commit abee7b2732
4 changed files with 41 additions and 3 deletions

View File

@@ -104,7 +104,17 @@ public class Rank extends AbstractConditionableCommand {
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(toRender);
AUserExperience experienceObj = userExperienceManagementService.findUserInServer(aUserInAServer);
log.info("Rendering rank for user {} in server {}.", toRender.getId(), toRender.getGuild().getId());
rankModel.setExperienceToNextLevel(experienceLevelService.calculateExperienceToNextLevel(experienceObj.getCurrentLevel().getLevel(), experienceObj.getExperience()));
Long currentExpNeeded = experienceObj.getCurrentLevel().getExperienceNeeded();
Long experienceNeededToNextLevel = experienceLevelService.calculateExperienceToNextLevel(experienceObj.getCurrentLevel().getLevel(), experienceObj.getExperience());
Long nextLevelExperience = experienceLevelService.calculateNextLevel(experienceObj.getCurrentLevel().getLevel()).getExperienceNeeded();
Long levelExperience = nextLevelExperience - currentExpNeeded;
Long inLevelExperience = experienceObj.getExperience() - currentExpNeeded;
rankModel.setExperienceForCurrentLevel(currentExpNeeded);
rankModel.setCurrentLevelPercentage((float) inLevelExperience / levelExperience);
rankModel.setLevelExperience(levelExperience);
rankModel.setExperienceToNextLevel(experienceNeededToNextLevel);
rankModel.setInLevelExperience(inLevelExperience);
rankModel.setNextLevelExperience(nextLevelExperience);
return templateService.renderEmbedTemplate(RANK_POST_EMBED_TEMPLATE, rankModel, toRender.getGuild().getIdLong());
}

View File

@@ -57,9 +57,14 @@ public class ExperienceLevelServiceBean implements ExperienceLevelService {
@Override
public Long calculateExperienceToNextLevel(Integer level, Long currentExperience) {
AExperienceLevel nextLevel = experienceLevelManagementService.getLevelOptional(level + 1)
.orElseThrow(() -> new AbstractoRunTimeException(String.format("Could not find level %s", level)));
AExperienceLevel nextLevel = calculateNextLevel(level);
return nextLevel.getExperienceNeeded() - currentExperience;
}
@Override
public AExperienceLevel calculateNextLevel(Integer level) {
return experienceLevelManagementService.getLevelOptional(level + 1)
.orElseThrow(() -> new AbstractoRunTimeException(String.format("Could not find level %s", level)));
}
}

View File

@@ -23,6 +23,26 @@ public class RankModel {
* The necessary experience to the next level up.
*/
private Long experienceToNextLevel;
/**
* Total experience needed for this level
*/
private Long experienceForCurrentLevel;
/**
* Percentage of progress within this level
*/
private Float currentLevelPercentage;
/**
* The total amount of experience needed for this level
*/
private Long levelExperience;
/**
* The experience which has been reached _within_ this level
*/
private Long inLevelExperience;
/**
* The experience needed to reach the next level
*/
private Long nextLevelExperience;
/**
* The member to show the rank for
*/

View File

@@ -1,5 +1,7 @@
package dev.sheldan.abstracto.experience.service;
import dev.sheldan.abstracto.experience.model.database.AExperienceLevel;
/**
* Service responsible for operations on {@link dev.sheldan.abstracto.experience.model.database.AExperienceLevel experienceLevel}
* This includes creating and calculations.
@@ -20,6 +22,7 @@ public interface ExperienceLevelService {
* @return The amount of experience required necessary to reach the next level
*/
Long calculateExperienceToNextLevel(Integer level, Long currentExperience);
AExperienceLevel calculateNextLevel(Integer level);
/**
* Calculates the required experience to reach this level. This calculated experience is relative, in the sense that