Minor improvements
This commit is contained in:
parent
5dd62cc2bf
commit
3c6c22432e
3 changed files with 77 additions and 28 deletions
|
@ -702,7 +702,21 @@ public class Battle
|
||||||
}
|
}
|
||||||
battleManager.addRecentlyLeftBattle(c);
|
battleManager.addRecentlyLeftBattle(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setDecisionState()
|
||||||
|
{
|
||||||
|
for(Combatant c : sideA.values())
|
||||||
|
{
|
||||||
|
c.decision = Decision.UNDECIDED;
|
||||||
|
}
|
||||||
|
for(Combatant c : sideB.values())
|
||||||
|
{
|
||||||
|
c.decision = Decision.UNDECIDED;
|
||||||
|
}
|
||||||
|
state = State.DECISION;
|
||||||
|
undecidedCount.set(players.size());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return True if battle has ended
|
* @return True if battle has ended
|
||||||
*/
|
*/
|
||||||
|
@ -726,7 +740,29 @@ public class Battle
|
||||||
long nextInstant = System.nanoTime();
|
long nextInstant = System.nanoTime();
|
||||||
long dt = nextInstant - lastInstant;
|
long dt = nextInstant - lastInstant;
|
||||||
lastInstant = nextInstant;
|
lastInstant = nextInstant;
|
||||||
return update(dt);
|
try
|
||||||
|
{
|
||||||
|
return update(dt);
|
||||||
|
} catch (Throwable t)
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.logger.error("Update: ", t);
|
||||||
|
setDecisionState();
|
||||||
|
boolean changed = false;
|
||||||
|
if(healthCheck())
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if(isCreativeCheck())
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
sendMessageToAllPlayers(PacketBattleMessage.MessageType.TURN_END, 0, 0, 1);
|
||||||
|
if(changed)
|
||||||
|
{
|
||||||
|
notifyPlayersBattleInfo();
|
||||||
|
}
|
||||||
|
return battleEnded;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean update(final long dt)
|
private boolean update(final long dt)
|
||||||
|
@ -846,8 +882,11 @@ public class Battle
|
||||||
debugLog = next.entity.getName();
|
debugLog = next.entity.getName();
|
||||||
|
|
||||||
next.remainingDefenses = 0;
|
next.remainingDefenses = 0;
|
||||||
|
|
||||||
|
Decision decision = next.decision;
|
||||||
|
next.decision = Decision.UNDECIDED;
|
||||||
|
|
||||||
switch(next.decision)
|
switch(decision)
|
||||||
{
|
{
|
||||||
case UNDECIDED:
|
case UNDECIDED:
|
||||||
debugLog += " undecided";
|
debugLog += " undecided";
|
||||||
|
@ -998,25 +1037,31 @@ public class Battle
|
||||||
debugLog += " to random other side";
|
debugLog += " to random other side";
|
||||||
if(next.isSideA)
|
if(next.isSideA)
|
||||||
{
|
{
|
||||||
int randomTargetIndex = random.nextInt(sideB.size());
|
if(sideB.size() > 0)
|
||||||
for(Combatant c : sideB.values())
|
|
||||||
{
|
{
|
||||||
if(randomTargetIndex-- == 0)
|
int randomTargetIndex = random.nextInt(sideB.size());
|
||||||
|
for(Combatant c : sideB.values())
|
||||||
{
|
{
|
||||||
target = c;
|
if(randomTargetIndex-- == 0)
|
||||||
break;
|
{
|
||||||
|
target = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int randomTargetIndex = random.nextInt(sideA.size());
|
if(sideA.size() > 0)
|
||||||
for(Combatant c : sideA.values())
|
|
||||||
{
|
{
|
||||||
if(randomTargetIndex-- == 0)
|
int randomTargetIndex = random.nextInt(sideA.size());
|
||||||
|
for(Combatant c : sideA.values())
|
||||||
{
|
{
|
||||||
target = c;
|
if(randomTargetIndex-- == 0)
|
||||||
break;
|
{
|
||||||
|
target = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1288,16 +1333,7 @@ public class Battle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
debugLog = "Actions almost end";
|
debugLog = "Actions almost end";
|
||||||
for(Combatant c : sideA.values())
|
setDecisionState();
|
||||||
{
|
|
||||||
c.decision = Decision.UNDECIDED;
|
|
||||||
}
|
|
||||||
for(Combatant c : sideB.values())
|
|
||||||
{
|
|
||||||
c.decision = Decision.UNDECIDED;
|
|
||||||
}
|
|
||||||
state = State.DECISION;
|
|
||||||
undecidedCount.set(players.size());
|
|
||||||
if(healthCheck())
|
if(healthCheck())
|
||||||
{
|
{
|
||||||
combatantsChanged = true;
|
combatantsChanged = true;
|
||||||
|
|
|
@ -65,12 +65,18 @@ public class BattleUpdater implements Runnable
|
||||||
if(!updateRunnable.isFinished())
|
if(!updateRunnable.isFinished())
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.logger.warn("Battle (" + entry.getValue().getId() + "; " + entry.getValue().debugLog + ") update hanged for 4 seconds!");
|
TurnBasedMinecraftMod.logger.warn("Battle (" + entry.getValue().getId() + "; " + entry.getValue().debugLog + ") update hanged for 4 seconds!");
|
||||||
try { updateThread.join(4000); } catch(InterruptedException e){ /* exception ignored */ }
|
try { updateThread.join(2000); } catch(InterruptedException e){ /* exception ignored */ }
|
||||||
if(!updateRunnable.isFinished())
|
if(!updateRunnable.isFinished())
|
||||||
{
|
{
|
||||||
// TODO this is an ugly fix to a still-not-found freeze bug in Battle.update()
|
TurnBasedMinecraftMod.logger.error("Battle (" + entry.getValue().getId() + "; " + entry.getValue().debugLog + ") update timed out (6 seconds)!");
|
||||||
TurnBasedMinecraftMod.logger.error("Battle (" + entry.getValue().getId() + "; " + entry.getValue().debugLog + ") update timed out!");
|
updateThread.interrupt();
|
||||||
updateThread.stop();
|
try { updateThread.join(2000); } catch(InterruptedException e){ /* exception ignored */ }
|
||||||
|
if(!updateRunnable.isFinished())
|
||||||
|
{
|
||||||
|
// TODO this is an ugly fix to a still-not-found freeze bug in Battle.update()
|
||||||
|
TurnBasedMinecraftMod.logger.error("Battle update will not stop, forcing it to stop (8 seconds)!");
|
||||||
|
updateThread.stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,7 +302,14 @@ public class PacketBattleMessage implements IMessage
|
||||||
case TURN_END:
|
case TURN_END:
|
||||||
if(TurnBasedMinecraftMod.proxy.getLocalBattle() != null)
|
if(TurnBasedMinecraftMod.proxy.getLocalBattle() != null)
|
||||||
{
|
{
|
||||||
TurnBasedMinecraftMod.proxy.displayString("The turn ended!");
|
if(message.amount == 0)
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.proxy.displayString("The turn ended!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TurnBasedMinecraftMod.proxy.displayString("The turn ended (abnormally due to internal error)!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TurnBasedMinecraftMod.proxy.battleGuiTurnEnd();
|
TurnBasedMinecraftMod.proxy.battleGuiTurnEnd();
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue