From d5a364782060a9bd9b9e448d8b111a26c171b4bd Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Mon, 30 Oct 2023 00:07:17 -0700 Subject: [PATCH] Move scene group loading into `SceneEntityLoader` --- .../game/challenge/ChallengeEntityLoader.java | 10 +++++++++ .../game/challenge/ChallengeInstance.java | 11 ++-------- .../game/challenge/ChallengeManager.java | 3 --- .../game/rogue/RogueEntityLoader.java | 19 +++++++++++++++++ .../lunarcore/game/rogue/RogueInstance.java | 7 +------ .../lunarcore/game/rogue/RogueManager.java | 8 +++---- .../java/emu/lunarcore/game/scene/Scene.java | 21 +++---------------- .../game/scene/SceneEntityLoader.java | 13 ++++++++++++ 8 files changed, 52 insertions(+), 40 deletions(-) diff --git a/src/main/java/emu/lunarcore/game/challenge/ChallengeEntityLoader.java b/src/main/java/emu/lunarcore/game/challenge/ChallengeEntityLoader.java index 2511d69..0c94c92 100644 --- a/src/main/java/emu/lunarcore/game/challenge/ChallengeEntityLoader.java +++ b/src/main/java/emu/lunarcore/game/challenge/ChallengeEntityLoader.java @@ -16,6 +16,16 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; public class ChallengeEntityLoader extends SceneEntityLoader { + @Override + public void onSceneLoad(Scene scene) { + // Get challenge instance + ChallengeInstance instance = scene.getPlayer().getChallengeInstance(); + if (instance == null) return; + + // Setup first stage + scene.loadGroup(instance.getExcel().getMazeGroupID1()); + } + @Override public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) { // Get challenge instance diff --git a/src/main/java/emu/lunarcore/game/challenge/ChallengeInstance.java b/src/main/java/emu/lunarcore/game/challenge/ChallengeInstance.java index 7f32141..595c32c 100644 --- a/src/main/java/emu/lunarcore/game/challenge/ChallengeInstance.java +++ b/src/main/java/emu/lunarcore/game/challenge/ChallengeInstance.java @@ -67,14 +67,6 @@ public class ChallengeInstance { this.currentExtraLineup = type.getNumber(); } - protected void setupStage1() { - this.getScene().loadGroup(excel.getMazeGroupID1()); - } - - protected void setupStage2() { - this.getScene().loadGroup(excel.getMazeGroupID2()); - } - private int getRoundsElapsed() { return getExcel().getChallengeCountDown() - this.roundsLeft; } @@ -112,7 +104,8 @@ public class ChallengeInstance { } else { // Increment and reset stage this.currentStage++; - this.setupStage2(); + // Load scene group for stage 2 + this.getScene().loadGroup(excel.getMazeGroupID2()); // Change player line up this.setCurrentExtraLineup(ExtraLineupType.LINEUP_CHALLENGE_2); player.getLineupManager().setCurrentExtraLineup(this.getCurrentExtraLineup(), true); diff --git a/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java b/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java index 60c7201..38eef99 100644 --- a/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java +++ b/src/main/java/emu/lunarcore/game/challenge/ChallengeManager.java @@ -79,9 +79,6 @@ public class ChallengeManager extends BasePlayerManager { // Save start positions instance.getStartPos().set(getPlayer().getPos()); instance.getStartRot().set(getPlayer().getRot()); - - // Setup first challenge stage - instance.setupStage1(); // Send packet getPlayer().sendPacket(new PacketStartChallengeScRsp(getPlayer(), challengeId)); diff --git a/src/main/java/emu/lunarcore/game/rogue/RogueEntityLoader.java b/src/main/java/emu/lunarcore/game/rogue/RogueEntityLoader.java index f34c0ce..fffafaa 100644 --- a/src/main/java/emu/lunarcore/game/rogue/RogueEntityLoader.java +++ b/src/main/java/emu/lunarcore/game/rogue/RogueEntityLoader.java @@ -21,6 +21,23 @@ import emu.lunarcore.util.Utils; public class RogueEntityLoader extends SceneEntityLoader { + @Override + public void onSceneLoad(Scene scene) { + // Make sure player is in a rogue instance + RogueInstance rogue = scene.getPlayer().getRogueInstance(); + if (rogue == null) return; + + // Get current room + RogueRoomData room = rogue.getCurrentRoom(); + if (room == null) return; + + // Load scene groups + for (int key : room.getExcel().getGroupWithContent().keySet()) { + scene.loadGroup(key); + } + } + + @Override public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) { // Make sure player is in a rogue instance RogueInstance rogue = scene.getPlayer().getRogueInstance(); @@ -45,6 +62,7 @@ public class RogueEntityLoader extends SceneEntityLoader { return monster; } + @Override public EntityProp loadProp(Scene scene, GroupInfo group, PropInfo propInfo) { // Make sure player is in a rogue instance RogueInstance rogue = scene.getPlayer().getRogueInstance(); @@ -102,6 +120,7 @@ public class RogueEntityLoader extends SceneEntityLoader { return prop; } + @Override public EntityNpc loadNpc(Scene scene, GroupInfo group, NpcInfo npcInfo) { // Create npc from group npc info EntityNpc npc = super.loadNpc(scene, group, npcInfo); diff --git a/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java b/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java index 19d0396..7076827 100644 --- a/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java +++ b/src/main/java/emu/lunarcore/game/rogue/RogueInstance.java @@ -169,7 +169,7 @@ public class RogueInstance { public synchronized RogueRoomData enterRoom(int siteId) { // Set status on previous room - RogueRoomData prevRoom = getCurrentRoom(); + RogueRoomData prevRoom = this.getCurrentRoom(); if (prevRoom != null) { // Make sure the site we want to go into is connected to the current room we are in if (!Utils.arrayContains(prevRoom.getNextSiteIds(), siteId)) { @@ -199,11 +199,6 @@ public class RogueInstance { getPlayer().getRot().set(anchor.getRot()); } - // Load scene groups. THIS NEEDS TO BE LAST - for (int key : nextRoom.getExcel().getGroupWithContent().keySet()) { - getPlayer().getScene().loadGroup(key); - } - // Send packet if we are not entering the rogue instance for the first time if (prevRoom != null) { getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, prevRoom)); diff --git a/src/main/java/emu/lunarcore/game/rogue/RogueManager.java b/src/main/java/emu/lunarcore/game/rogue/RogueManager.java index 38c0d31..c124b78 100644 --- a/src/main/java/emu/lunarcore/game/rogue/RogueManager.java +++ b/src/main/java/emu/lunarcore/game/rogue/RogueManager.java @@ -95,15 +95,15 @@ public class RogueManager extends BasePlayerManager { } // Get entrance id - RogueInstance data = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel); - getPlayer().setRogueInstance(data); + RogueInstance instance = new RogueInstance(getPlayer(), rogueAreaExcel, aeonExcel); + getPlayer().setRogueInstance(instance); // Reset hp/sp lineup.forEachAvatar(avatar -> { avatar.setCurrentHp(lineup, 10000); avatar.setCurrentSp(lineup, avatar.getMaxSp()); - data.getBaseAvatarIds().add(avatar.getAvatarId()); + instance.getBaseAvatarIds().add(avatar.getAvatarId()); }); lineup.setMp(5); // Set technique points @@ -111,7 +111,7 @@ public class RogueManager extends BasePlayerManager { getPlayer().getLineupManager().setCurrentExtraLineup(ExtraLineupType.LINEUP_ROGUE, false); // Enter rogue - RogueRoomData room = data.enterRoom(data.getStartSiteId()); + RogueRoomData room = instance.enterRoom(instance.getStartSiteId()); if (room == null) { // Reset lineup/instance if entering scene failed diff --git a/src/main/java/emu/lunarcore/game/scene/Scene.java b/src/main/java/emu/lunarcore/game/scene/Scene.java index 508e0b1..b64f0f8 100644 --- a/src/main/java/emu/lunarcore/game/scene/Scene.java +++ b/src/main/java/emu/lunarcore/game/scene/Scene.java @@ -5,7 +5,6 @@ import java.util.List; import emu.lunarcore.data.GameData; import emu.lunarcore.data.config.*; -import emu.lunarcore.data.config.GroupInfo.GroupLoadSide; import emu.lunarcore.data.excel.MazePlaneExcel; import emu.lunarcore.game.avatar.GameAvatar; import emu.lunarcore.game.enums.PlaneType; @@ -85,28 +84,14 @@ public class Scene { this.floorInfo = GameData.getFloorInfo(this.planeId, this.floorId); if (floorInfo == null) return; - // Spawn from groups - if (getExcel().getPlaneType() != PlaneType.Challenge && getExcel().getPlaneType() != PlaneType.Rogue) { - this.initSpawns(); - } + // Spawn entities from groups + this.getPlaneType().getSceneEntityLoader().onSceneLoad(this); } public PlaneType getPlaneType() { return this.getExcel().getPlaneType(); } - private void initSpawns() { - for (GroupInfo group : getFloorInfo().getGroups().values()) { - // Skip non-server groups - if (group.getLoadSide() != GroupLoadSide.Server) { - continue; - } - - // Load group - this.loadGroup(group); - } - } - public void loadGroup(int groupId) { GroupInfo group = getFloorInfo().getGroups().get(groupId); if (group != null) { @@ -114,7 +99,7 @@ public class Scene { } } - private void loadGroup(GroupInfo group) { + public void loadGroup(GroupInfo group) { // Add monsters if (group.getMonsterList() != null && group.getMonsterList().size() > 0) { for (MonsterInfo monsterInfo : group.getMonsterList()) { diff --git a/src/main/java/emu/lunarcore/game/scene/SceneEntityLoader.java b/src/main/java/emu/lunarcore/game/scene/SceneEntityLoader.java index dcc543e..c6f7016 100644 --- a/src/main/java/emu/lunarcore/game/scene/SceneEntityLoader.java +++ b/src/main/java/emu/lunarcore/game/scene/SceneEntityLoader.java @@ -5,6 +5,7 @@ import emu.lunarcore.data.config.GroupInfo; import emu.lunarcore.data.config.MonsterInfo; import emu.lunarcore.data.config.NpcInfo; import emu.lunarcore.data.config.PropInfo; +import emu.lunarcore.data.config.GroupInfo.GroupLoadSide; import emu.lunarcore.data.excel.NpcMonsterExcel; import emu.lunarcore.data.excel.PropExcel; import emu.lunarcore.game.enums.PropState; @@ -16,6 +17,18 @@ import emu.lunarcore.game.scene.entity.GameEntity; public class SceneEntityLoader { + public void onSceneLoad(Scene scene) { + for (GroupInfo group : scene.getFloorInfo().getGroups().values()) { + // Skip non-server groups + if (group.getLoadSide() != GroupLoadSide.Server) { + continue; + } + + // Load group + scene.loadGroup(group); + } + } + public EntityMonster loadMonster(Scene scene, GroupInfo group, MonsterInfo monsterInfo) { // Don't spawn entity if they have the IsDelete flag in group info if (monsterInfo.isIsDelete()) return null;