From 8f6f30c8131d032ef96918d0c9c3e198a65570cc Mon Sep 17 00:00:00 2001 From: logictc Date: Tue, 24 May 2022 16:29:28 -0400 Subject: [PATCH] implement persist energy --- .../emu/grasscutter/game/avatar/Avatar.java | 39 +++++++++++++------ .../grasscutter/game/entity/EntityAvatar.java | 6 ++- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/avatar/Avatar.java b/src/main/java/emu/grasscutter/game/avatar/Avatar.java index b32414550..572bfb173 100644 --- a/src/main/java/emu/grasscutter/game/avatar/Avatar.java +++ b/src/main/java/emu/grasscutter/game/avatar/Avatar.java @@ -81,6 +81,7 @@ public class Avatar { private int satiation; // ? private int satiationPenalty; // ? private float currentHp; + private float currentEnergy; @Transient private final Int2ObjectMap equips; @Transient private final Int2FloatOpenHashMap fightProp; @@ -149,7 +150,7 @@ public class Avatar { this.recalcStats(); this.currentHp = getFightProperty(FightProperty.FIGHT_PROP_MAX_HP); setFightProperty(FightProperty.FIGHT_PROP_CUR_HP, this.currentHp); - + this.currentEnergy = 0f; // Load handler this.onLoad(); } @@ -358,6 +359,30 @@ public class Avatar { this.currentHp = currentHp; } + public void setCurrentEnergy() { + this.setCurrentEnergy(this.currentEnergy); + } + + public void setCurrentEnergy(float currentEnergy) { + if (this.getSkillDepot() != null && this.getSkillDepot().getEnergySkillData() != null) { + ElementType element = this.getSkillDepot().getElementType(); + this.setFightProperty(element.getMaxEnergyProp(), this.getSkillDepot().getEnergySkillData().getCostElemVal()); + + if (GAME_OPTIONS.energyUsage) { + this.setFightProperty(element.getCurEnergyProp(), currentEnergy); + } + else { + this.setFightProperty(element.getCurEnergyProp(), this.getSkillDepot().getEnergySkillData().getCostElemVal()); + } + } + } + + public void setCurrentEnergy(FightProperty curEnergyProp, float currentEnergy) { + this.setFightProperty(curEnergyProp, currentEnergy); + this.currentEnergy = currentEnergy; + this.save(); + } + public Int2FloatOpenHashMap getFightProperties() { return fightProp; } @@ -516,17 +541,7 @@ public class Avatar { } // Set energy usage - if (this.getSkillDepot() != null && this.getSkillDepot().getEnergySkillData() != null) { - ElementType element = this.getSkillDepot().getElementType(); - this.setFightProperty(element.getMaxEnergyProp(), this.getSkillDepot().getEnergySkillData().getCostElemVal()); - - if (GAME_OPTIONS.energyUsage) { - this.setFightProperty(element.getCurEnergyProp(), currentEnergy); - } - else { - this.setFightProperty(element.getCurEnergyProp(), this.getSkillDepot().getEnergySkillData().getCostElemVal()); - } - } + setCurrentEnergy(currentEnergy); // Artifacts for (int slotId = 1; slotId <= 5; slotId++) { diff --git a/src/main/java/emu/grasscutter/game/entity/EntityAvatar.java b/src/main/java/emu/grasscutter/game/entity/EntityAvatar.java index 0d6ec5c75..e082355f8 100644 --- a/src/main/java/emu/grasscutter/game/entity/EntityAvatar.java +++ b/src/main/java/emu/grasscutter/game/entity/EntityAvatar.java @@ -46,6 +46,7 @@ public class EntityAvatar extends GameEntity { public EntityAvatar(Scene scene, Avatar avatar) { super(scene); this.avatar = avatar; + this.avatar.setCurrentEnergy(); this.id = getScene().getWorld().getNextEntityId(EntityIdType.AVATAR); GameItem weapon = this.getAvatar().getWeapon(); @@ -57,6 +58,7 @@ public class EntityAvatar extends GameEntity { public EntityAvatar(Avatar avatar) { super(null); this.avatar = avatar; + this.avatar.setCurrentEnergy(); } public Player getPlayer() { @@ -128,7 +130,7 @@ public class EntityAvatar extends GameEntity { public void clearEnergy(PropChangeReason reason) { FightProperty curEnergyProp = this.getAvatar().getSkillDepot().getElementType().getCurEnergyProp(); - this.setFightProperty(curEnergyProp, 0); + this.avatar.setCurrentEnergy(curEnergyProp, 0); this.getScene().broadcastPacket(new PacketAvatarFightPropUpdateNotify(this.getAvatar(), curEnergyProp)); this.getScene().broadcastPacket(new PacketEntityFightPropChangeReasonNotify(this, curEnergyProp, 0f, reason)); @@ -158,7 +160,7 @@ public class EntityAvatar extends GameEntity { // Set energy and notify. if (newEnergy != curEnergy) { - this.setFightProperty(curEnergyProp, newEnergy); + this.avatar.setCurrentEnergy(curEnergyProp, newEnergy); this.getScene().broadcastPacket(new PacketAvatarFightPropUpdateNotify(this.getAvatar(), curEnergyProp)); this.getScene().broadcastPacket(new PacketEntityFightPropChangeReasonNotify(this, curEnergyProp, newEnergy, reason));