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);
elapsedTime = 0;
state = MenuState.MAIN_MENU;
stateChanged = true;
+ waitMissingBattleTicks = null;
}
private void setState(MenuState state) {
}
}
+ 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) {
}
@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
}
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:
private ResourceKey<Level> dimension;
+ private long infoNanos;
+
public enum State {
DECISION(0),
ACTION(1),
undecidedCount = new AtomicInteger(0);
random = new Random();
this.dimension = dimension;
+ infoNanos = 0;
if (sideA != null) {
for (Entity e : sideA) {
EntityInfo entityInfo;
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));
}
}
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());
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
public class PacketBattleInfo
{
+ private int battleID;
private Collection<Integer> sideA;
private Collection<Integer> sideB;
private long decisionNanos;
public PacketBattleInfo()
{
+ battleID = 0;
sideA = new ArrayList<Integer>();
sideB = new ArrayList<Integer>();
decisionNanos = TurnBasedMinecraftMod.proxy.getConfig().getDecisionDurationNanos();
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;
@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) {
@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);
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);
}
}
ctx.enqueueWork(() -> {
if(TurnBasedMinecraftMod.proxy.getLocalBattle() == null)
{
- return;
+ TurnBasedMinecraftMod.proxy.createLocalBattle(pkt.battleID);
}
TurnBasedMinecraftMod.proxy.getLocalBattle().clearCombatants();
for(Integer id : pkt.sideA)
TurnBasedMinecraftMod.proxy.getLocalBattle().addCombatantToSideB(e);
}
}
+ TurnBasedMinecraftMod.proxy.setBattleGuiAsGui();
TurnBasedMinecraftMod.proxy.setBattleGuiTime((int)(pkt.decisionNanos / 1000000000L));
TurnBasedMinecraftMod.proxy.setBattleGuiBattleChanged();
TurnBasedMinecraftMod.proxy.setBattleGuiTurnTimerEnabled(pkt.turnTimerEnabled);
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);
}