From e1bbf5589fe31fc8c83f22b82b45f01435bbaeaa Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Fri, 29 Sep 2023 02:21:47 -0700 Subject: [PATCH] Rework how avatar skills and rank are stored --- .../emu/lunarcore/game/avatar/AvatarData.java | 32 ++++++++++++++++ .../emu/lunarcore/game/avatar/AvatarRank.java | 18 --------- .../lunarcore/game/avatar/AvatarStorage.java | 2 +- .../emu/lunarcore/game/avatar/GameAvatar.java | 38 ++++++++++--------- .../emu/lunarcore/game/avatar/HeroPath.java | 36 +++++++++++------- 5 files changed, 75 insertions(+), 51 deletions(-) create mode 100644 src/main/java/emu/lunarcore/game/avatar/AvatarData.java delete mode 100644 src/main/java/emu/lunarcore/game/avatar/AvatarRank.java diff --git a/src/main/java/emu/lunarcore/game/avatar/AvatarData.java b/src/main/java/emu/lunarcore/game/avatar/AvatarData.java new file mode 100644 index 0000000..b68b1be --- /dev/null +++ b/src/main/java/emu/lunarcore/game/avatar/AvatarData.java @@ -0,0 +1,32 @@ +package emu.lunarcore.game.avatar; + +import java.util.HashMap; +import java.util.Map; + +import dev.morphia.annotations.Entity; +import emu.lunarcore.data.excel.AvatarExcel; +import lombok.Getter; +import lombok.Setter; + +/** + * A helper class that contains information about an avatar's rank. + */ +@Entity(useDiscriminator = false) +public class AvatarData { + @Getter @Setter + private int rank; // Eidolons + @Getter + private Map skills; // Skill tree + + @Deprecated + public AvatarData() { + + } + + public AvatarData(AvatarExcel excel) { + this.skills = new HashMap<>(); + for (var skillTree : excel.getDefaultSkillTrees()) { + this.skills.put(skillTree.getPointID(), skillTree.getLevel()); + } + } +} diff --git a/src/main/java/emu/lunarcore/game/avatar/AvatarRank.java b/src/main/java/emu/lunarcore/game/avatar/AvatarRank.java deleted file mode 100644 index b0eb5a7..0000000 --- a/src/main/java/emu/lunarcore/game/avatar/AvatarRank.java +++ /dev/null @@ -1,18 +0,0 @@ -package emu.lunarcore.game.avatar; - -import dev.morphia.annotations.Entity; -import lombok.Getter; -import lombok.Setter; - -@Entity(useDiscriminator = false) -public class AvatarRank { - @Getter @Setter - private int value; - - /** - * A helper class that contains information about an avatar's rank. - */ - public AvatarRank() { - - } -} diff --git a/src/main/java/emu/lunarcore/game/avatar/AvatarStorage.java b/src/main/java/emu/lunarcore/game/avatar/AvatarStorage.java index 4a32fe0..2edf639 100644 --- a/src/main/java/emu/lunarcore/game/avatar/AvatarStorage.java +++ b/src/main/java/emu/lunarcore/game/avatar/AvatarStorage.java @@ -120,7 +120,7 @@ public class AvatarStorage extends BasePlayerManager implements Iterable skills; + private AvatarData data; private int currentHp; private int currentSp; @@ -73,17 +72,8 @@ public class GameAvatar implements GameEntity { public GameAvatar(AvatarExcel excel) { this(); - this.excel = excel; this.avatarId = excel.getId(); - - // Set defaults - this.rank = new AvatarRank(); - this.skills = new HashMap<>(); - - // Add skills - for (var skillTree : excel.getDefaultSkillTrees()) { - this.skills.put(skillTree.getPointID(), skillTree.getLevel()); - } + this.setExcel(excel); } public GameAvatar(HeroPath path) { @@ -91,6 +81,15 @@ public class GameAvatar implements GameEntity { this.avatarId = GameConstants.TRAILBLAZER_AVATAR_ID; this.setHeroPath(path); } + + public void setExcel(AvatarExcel excel) { + if (this.excel == null) { + this.excel = excel; + } + if (this.data == null) { + this.data = new AvatarData(excel); + } + } public void setOwner(Player player) { this.owner = player; @@ -119,11 +118,15 @@ public class GameAvatar implements GameEntity { } public int getRank() { - return this.rank.getValue(); + return this.getData().getRank(); } public void setRank(int rank) { - this.rank.setValue(rank); + this.getData().setRank(rank); + } + + public Map getSkills() { + return this.getData().getSkills(); } public void setHeroPath(HeroPath heroPath) { @@ -132,9 +135,8 @@ public class GameAvatar implements GameEntity { this.getHeroPath().setAvatar(null); } - this.rank = heroPath.getRank(); - this.skills = heroPath.getSkills(); - this.excel = heroPath.getExcel(); + this.data = heroPath.getData(); + this.excel = heroPath.getExcel(); // DO NOT USE GameAvatar::setExcel for this this.heroPath = heroPath; this.heroPath.setAvatar(this); } diff --git a/src/main/java/emu/lunarcore/game/avatar/HeroPath.java b/src/main/java/emu/lunarcore/game/avatar/HeroPath.java index 20aed7e..af962ed 100644 --- a/src/main/java/emu/lunarcore/game/avatar/HeroPath.java +++ b/src/main/java/emu/lunarcore/game/avatar/HeroPath.java @@ -1,16 +1,17 @@ package emu.lunarcore.game.avatar; -import java.util.HashMap; import java.util.Map; import dev.morphia.annotations.Entity; import dev.morphia.annotations.Id; import dev.morphia.annotations.Indexed; + import emu.lunarcore.LunarRail; import emu.lunarcore.data.excel.AvatarExcel; import emu.lunarcore.game.player.Player; import emu.lunarcore.proto.AvatarSkillTreeOuterClass.AvatarSkillTree; import emu.lunarcore.proto.HeroBasicTypeInfoOuterClass.HeroBasicTypeInfo; + import lombok.Getter; import lombok.Setter; @@ -22,11 +23,10 @@ public class HeroPath { @Indexed private int ownerUid; - private AvatarRank rank; - private Map skills; + private AvatarData data; @Setter private transient GameAvatar avatar; - @Setter private transient AvatarExcel excel; + private transient AvatarExcel excel; @Deprecated // Morphia only! public HeroPath() { @@ -37,22 +37,30 @@ public class HeroPath { // Set excel avatar id as id this.id = excel.getId(); this.ownerUid = player.getUid(); - this.excel = excel; - - // Set defaults - this.rank = new AvatarRank(); - this.skills = new HashMap<>(); - - // Add skills - for (var skillTree : excel.getDefaultSkillTrees()) { - this.skills.put(skillTree.getPointID(), skillTree.getLevel()); + this.setExcel(excel); + } + + public void setExcel(AvatarExcel excel) { + if (this.excel == null) { + this.excel = excel; } + if (this.data == null) { + this.data = new AvatarData(excel); + } + } + + public int getRank() { + return this.getData().getRank(); + } + + public Map getSkills() { + return this.getData().getSkills(); } public HeroBasicTypeInfo toProto() { var proto = HeroBasicTypeInfo.newInstance() .setBasicTypeValue(this.getId()) - .setRank(this.getRank().getValue()); + .setRank(this.getRank()); for (var skill : getSkills().entrySet()) { proto.addSkillTreeList(AvatarSkillTree.newInstance().setPointId(skill.getKey()).setLevel(skill.getValue()));