]> git.seodisparate.com - TurnBasedMinecraftMod/commitdiff
Allow leaving battle gui temporarily, refactorings
authorStephen Seo <seo.disparate@gmail.com>
Tue, 22 Oct 2024 08:06:02 +0000 (17:06 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 23 Oct 2024 07:23:05 +0000 (16:23 +0900)
src/main/java/com/burnedkirby/TurnBasedMinecraft/client/BattleGui.java
src/main/java/com/burnedkirby/TurnBasedMinecraft/client/ClientProxy.java
src/main/java/com/burnedkirby/TurnBasedMinecraft/common/Battle.java
src/main/java/com/burnedkirby/TurnBasedMinecraft/common/TurnBasedMinecraftMod.java
src/main/java/com/burnedkirby/TurnBasedMinecraft/common/networking/PacketBattleInfo.java
src/main/java/com/burnedkirby/TurnBasedMinecraft/common/networking/PacketBattleRequestInfo.java

index 4e0a1a3b9d5f8582509bc2d0980965829ca425cf..25365f257cbfd6d0f664f9ff746d423f788a431b 100644 (file)
@@ -28,6 +28,7 @@ public class BattleGui extends Screen {
        private MenuState state;
        private boolean stateChanged;
        private String info;
+       private Long waitMissingBattleTicks;
 
        private enum MenuState {
                MAIN_MENU(0), ATTACK_TARGET(1), ITEM_ACTION(2), WAITING(3), SWITCH_ITEM(4), USE_ITEM(5);
@@ -91,6 +92,7 @@ public class BattleGui extends Screen {
                elapsedTime = 0;
                state = MenuState.MAIN_MENU;
                stateChanged = true;
+               waitMissingBattleTicks = null;
        }
 
        private void setState(MenuState state) {
@@ -224,13 +226,29 @@ public class BattleGui extends Screen {
                }
        }
 
+       private int colorFromTicks(final Long ticks) {
+               if (ticks < 20 * 10) {
+                       double value = (20 * 10 - ticks.intValue()) / (20.0 * 10.0);
+                       return 0xFF0000FF | (((int)(value * 255.0)) << 8) |  (((int)(value * 255.0)) << 16);
+               } else {
+                       return 0xFF0000FF;
+               }
+       }
+
        @Override
        public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
                if (TurnBasedMinecraftMod.proxy.getLocalBattle() == null) {
+                       if (waitMissingBattleTicks == null) {
+                               waitMissingBattleTicks = 0L;
+                       } else {
+                               waitMissingBattleTicks += 1L;
+                       }
                        // drawHoveringText("Waiting...", width / 2 - 50, height / 2);
-                       drawString(guiGraphics, "Waiting...", width / 2 - 50, height / 2, 0xFFFFFFFF);
+                       drawString(guiGraphics, "Waiting...", width / 2 - 50, height / 2, colorFromTicks(waitMissingBattleTicks));
                        super.render(guiGraphics, mouseX, mouseY, partialTicks);
                        return;
+               } else {
+                       waitMissingBattleTicks = null;
                }
                if (TurnBasedMinecraftMod.proxy.getLocalBattle().getState() == Battle.State.DECISION
                                && timeRemaining.get() > 0) {
@@ -354,9 +372,13 @@ public class BattleGui extends Screen {
        }
 
        @Override
-       public boolean keyPressed(int a, int b, int c) {
+       public boolean keyPressed(int keyCode, int b, int c) {
                if (getMinecraft().player.isCreative()) {
-                       return super.keyPressed(a, b, c);
+                       return super.keyPressed(keyCode, b, c);
+               } else if (keyCode == 256) {
+                       TurnBasedMinecraftMod.proxy.displayString("Leaving GUI, but the battle continues!");
+                       getMinecraft().setScreen(null);
+                       return true;
                }
                return false; // TODO verify return value
        }
index 65aa3a800554fa50757328dba1cb49a096582670..baaa74f34483b7a65cb7a3e44562039c48a5a905 100644 (file)
@@ -370,6 +370,10 @@ public class ClientProxy extends CommonProxy {
                     break;
                 case TURN_BEGIN:
                     TurnBasedMinecraftMod.proxy.displayString("The turn begins!");
+                    if (TurnBasedMinecraftMod.proxy.getLocalBattle() == null || TurnBasedMinecraftMod.proxy.getLocalBattle().getId() != pkt.getAmount()) {
+                        TurnBasedMinecraftMod.proxy.createLocalBattle(pkt.getAmount());
+                    }
+                    TurnBasedMinecraftMod.proxy.battleStarted();
                     TurnBasedMinecraftMod.proxy.battleGuiTurnBegin();
                     break;
                 case TURN_END:
index 7fc5ae151ad22c5cb673aafe0473c03aa2135302..607436eade2f783b385311f1266d8b39a00ef73c 100644 (file)
@@ -49,6 +49,8 @@ public class Battle {
 
     private ResourceKey<Level> dimension;
 
+    private long infoNanos;
+
     public enum State {
         DECISION(0),
         ACTION(1),
@@ -122,6 +124,7 @@ public class Battle {
         undecidedCount = new AtomicInteger(0);
         random = new Random();
         this.dimension = dimension;
+        infoNanos = 0;
         if (sideA != null) {
             for (Entity e : sideA) {
                 EntityInfo entityInfo;
@@ -447,7 +450,7 @@ public class Battle {
         if (!isServer) {
             return;
         }
-        PacketBattleInfo infoPacket = new PacketBattleInfo(getSideAIDs(), getSideBIDs(), timer, TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever());
+        PacketBattleInfo infoPacket = new PacketBattleInfo(getId(), getSideAIDs(), getSideBIDs(), timer, TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever());
         for (Combatant p : players.values()) {
             TurnBasedMinecraftMod.getHandler().send(infoPacket, PacketDistributor.PLAYER.with((ServerPlayer)p.entity));
         }
@@ -651,6 +654,11 @@ public class Battle {
     }
 
     private boolean update(final long dt) {
+        infoNanos += dt;
+        if (infoNanos >= 4000000000L) {
+            infoNanos = 0;
+            notifyPlayersBattleInfo();
+        }
         if (battleEnded) {
             Collection<Combatant> combatants = new ArrayList<Combatant>();
             combatants.addAll(sideA.values());
index badd885615e5555f66c4434ee227b7c026527a55..63102822243fd11523da94549963db51b4790c61 100644 (file)
@@ -50,7 +50,7 @@ public class TurnBasedMinecraftMod {
     public static final String MUSIC_SILLY = MUSIC_ROOT + "silly/";
     public static final String MUSIC_BATTLE = MUSIC_ROOT + "battle/";
 
-    private static final Integer PROTOCOL_VERSION = 4;
+    private static final Integer PROTOCOL_VERSION = 5;
     private static final ResourceLocation HANDLER_ID = ResourceLocation.fromNamespaceAndPath(MODID, "main_channel");
 
     private static final SimpleChannel HANDLER = ChannelBuilder
index c97c7993027e675607c6da1fbbfa2e7ec7ec909b..d7a68439f69e64242c820e89b712948b115e42f3 100644 (file)
@@ -13,6 +13,7 @@ import java.util.function.Function;
 
 public class PacketBattleInfo
 {
+    private int battleID;
     private Collection<Integer> sideA;
     private Collection<Integer> sideB;
     private long decisionNanos;
@@ -22,6 +23,7 @@ public class PacketBattleInfo
     
     public PacketBattleInfo()
     {
+        battleID = 0;
         sideA = new ArrayList<Integer>();
         sideB = new ArrayList<Integer>();
         decisionNanos = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos();
@@ -29,8 +31,9 @@ public class PacketBattleInfo
         turnTimerEnabled = false;
     }
 
-    public PacketBattleInfo(Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled)
+    public PacketBattleInfo(int battleID, Collection<Integer> sideA, Collection<Integer> sideB, long decisionNanos, long maxDecisionNanos, boolean turnTimerEnabled)
     {
+        this.battleID = battleID;
         this.sideA = sideA;
         this.sideB = sideB;
         this.decisionNanos = decisionNanos;
@@ -43,6 +46,7 @@ public class PacketBattleInfo
 
         @Override
         public void accept(PacketBattleInfo msg, RegistryFriendlyByteBuf buf) {
+            buf.writeInt(msg.battleID);
             buf.writeInt(msg.sideA.size());
             buf.writeInt(msg.sideB.size());
             for(Integer id : msg.sideA) {
@@ -62,6 +66,7 @@ public class PacketBattleInfo
 
         @Override
         public PacketBattleInfo apply(RegistryFriendlyByteBuf buf) {
+            int battleID = buf.readInt();
             int sideACount = buf.readInt();
             int sideBCount = buf.readInt();
             Collection<Integer> sideA = new ArrayList<Integer>(sideACount);
@@ -75,7 +80,7 @@ public class PacketBattleInfo
             long decisionNanos = buf.readLong();
             long maxDecisionNanos = buf.readLong();
             boolean turnTimerEnabled = buf.readBoolean();
-            return new PacketBattleInfo(sideA, sideB, decisionNanos, maxDecisionNanos, turnTimerEnabled);
+            return new PacketBattleInfo(battleID, sideA, sideB, decisionNanos, maxDecisionNanos, turnTimerEnabled);
         }
     }
 
@@ -87,7 +92,7 @@ public class PacketBattleInfo
             ctx.enqueueWork(() -> {
                 if(TurnBasedMinecraftMod.proxy.getLocalBattle() == null)
                 {
-                    return;
+                    TurnBasedMinecraftMod.proxy.createLocalBattle(pkt.battleID);
                 }
                 TurnBasedMinecraftMod.proxy.getLocalBattle().clearCombatants();
                 for(Integer id : pkt.sideA)
@@ -106,6 +111,7 @@ public class PacketBattleInfo
                         TurnBasedMinecraftMod.proxy.getLocalBattle().addCombatantToSideB(e);
                     }
                 }
+                TurnBasedMinecraftMod.proxy.setBattleGuiAsGui();
                 TurnBasedMinecraftMod.proxy.setBattleGuiTime((int)(pkt.decisionNanos / 1000000000L));
                 TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
                 TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled);
index b21175d3125d525884d7679b570fb84c54cf92ec..6d1b395f208f8d31bba2b3845d666d027aa9d2f2 100644 (file)
@@ -47,7 +47,7 @@ public class PacketBattleRequestInfo
                 if(b == null) {
                     return;
                 }
-                TurnBasedMinecraftMod.getHandler().reply(new PacketBattleInfo(b.getSideAIDs(), b.getSideBIDs(), b.getTimerNanos(), TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()), ctx);
+                TurnBasedMinecraftMod.getHandler().reply(new PacketBattleInfo(b.getId(), b.getSideAIDs(), b.getSideBIDs(), b.getTimerNanos(), TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos(), !TurnBasedMinecraftMod.proxy.getConfig().isBattleDecisionDurationForever()), ctx);
             });
             ctx.setPacketHandled(true);
         }