mirror of
https://github.com/correl/mage.git
synced 2025-04-02 03:18:09 -09:00
Changed color of frame of avatar for active player to green again. Checked that a player of a game can't also watch his own game. Added a match score to the start of the game log. Changed the color of the Turn [X] message. Tips and join messages during a game are displayed in the chat panel instead the game log panel. Display of the player name when hovering over the avatar is more vertical centered.
This commit is contained in:
parent
20a99ed894
commit
f644ffe041
16 changed files with 100 additions and 22 deletions
Mage.Client/src/main/java/mage/client
Mage.Common/src/mage/view
Mage.Server.Plugins
Mage.Game.CommanderDuel/src/mage/game
Mage.Game.FreeForAll/src/mage/game
Mage.Game.TwoPlayerDuel/src/mage/game
Mage.Server/src/main/java/mage/server
Mage/src/mage/game
|
@ -24,6 +24,7 @@ public class HoverButton extends JPanel implements MouseListener {
|
|||
private Rectangle buttonSize;
|
||||
private String text;
|
||||
private int textOffsetY = 0;
|
||||
private int textOffsetButtonY = 2;
|
||||
private int textOffsetX = -1;
|
||||
private Dimension overlayImageSize;
|
||||
|
||||
|
@ -187,17 +188,21 @@ public class HoverButton extends JPanel implements MouseListener {
|
|||
@Override
|
||||
public void setBounds(Rectangle r) {
|
||||
super.setBounds(r);
|
||||
this.textOffsetY = r.height - 2;
|
||||
this.textOffsetY = r.height - this.textOffsetButtonY;
|
||||
this.buttonSize = r;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBounds(int x, int y, int width, int height) {
|
||||
super.setBounds(x, y, width, height);
|
||||
this.textOffsetY = height - 2;
|
||||
this.textOffsetY = height - this.textOffsetButtonY;
|
||||
this.buttonSize = new Rectangle(x, y, width, height);
|
||||
}
|
||||
|
||||
public void setTextOffsetButtonY(int textOffsetButtonY) {
|
||||
this.textOffsetButtonY = textOffsetButtonY;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return isSelected;
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
private static final int PANEL_HEIGHT = 242;
|
||||
private static final int PANEL_HEIGHT_SMALL = 190;
|
||||
|
||||
private static final Border greenBorder = new LineBorder(Color.red, 3);
|
||||
private static final Border greenBorder = new LineBorder(Color.green, 3);
|
||||
private static final Border redBorder = new LineBorder(Color.red, 2);
|
||||
private static final Border emptyBorder = BorderFactory.createEmptyBorder(0,0,0,0);
|
||||
|
||||
|
@ -224,6 +224,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
|
|||
|
||||
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
|
||||
avatar = new HoverButton("player", resized, resized, resized, r);
|
||||
avatar.setTextOffsetButtonY(10);
|
||||
avatar.setObserver(new Command() {
|
||||
@Override
|
||||
public void execute() {
|
||||
|
|
|
@ -100,8 +100,8 @@ public class CallbackClientImpl implements CallbackClient {
|
|||
ChatMessage message = (ChatMessage) callback.getData();
|
||||
ChatPanel panel = frame.getChat(callback.getObjectId());
|
||||
if (panel != null) {
|
||||
if (message.getMessage().equals(Constants.MSG_TIP_HOT_KEYS_CODE)) {
|
||||
panel.receiveMessage("[Tips] ", "You may use hot keys to play faster: " + "" +
|
||||
if (message.getMessage().equals(Constants.MSG_TIP_HOT_KEYS_CODE) && panel.getConnectedChat() != null) {
|
||||
panel.getConnectedChat().receiveMessage("[Tips] ", "You may use hot keys to play faster: " + "" +
|
||||
"\nF2 - Confirm \"Ok\", \"Yes\" or \"Done\" button" +
|
||||
"\nF4 - Skip current turn but stop on declare attackers" +
|
||||
"\nF9 - Skip everything until your next turn" +
|
||||
|
|
|
@ -65,6 +65,10 @@ public class ChatMessage implements Serializable {
|
|||
return color != null && color.equals(MessageColor.BLUE);
|
||||
}
|
||||
|
||||
public boolean isStatusMessage() {
|
||||
return color != null && color.equals(MessageColor.ORANGE);
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ public class CommanderDuelMatch extends MatchImpl {
|
|||
@Override
|
||||
public void startGame() throws GameException {
|
||||
CommanderDuel game = new CommanderDuel(options.getAttackOption(), options.getRange());
|
||||
game.setStartMessage(this.createGameStartMessage());
|
||||
initGame(game);
|
||||
games.add(game);
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ public class FreeForAllMatch extends MatchImpl {
|
|||
@Override
|
||||
public void startGame() throws GameException {
|
||||
FreeForAll game = new FreeForAll(options.getAttackOption(), options.getRange());
|
||||
game.setStartMessage(this.createGameStartMessage());
|
||||
initGame(game);
|
||||
games.add(game);
|
||||
}
|
||||
|
|
|
@ -44,6 +44,8 @@ public class TwoPlayerMatch extends MatchImpl {
|
|||
@Override
|
||||
public void startGame() throws GameException {
|
||||
TwoPlayerDuel game = new TwoPlayerDuel(options.getAttackOption(), options.getRange());
|
||||
// Sets a start message about the match score
|
||||
game.setStartMessage(this.createGameStartMessage());
|
||||
initGame(game);
|
||||
games.add(game);
|
||||
}
|
||||
|
|
|
@ -71,6 +71,10 @@ public class ChatManager {
|
|||
chatSessions.get(chatId).broadcast(userName, message, color);
|
||||
}
|
||||
|
||||
public void broadcast(UUID chatId, String userName, String message, MessageColor color, boolean withTime) {
|
||||
chatSessions.get(chatId).broadcast(userName, message, color, withTime);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* use mainly for announcing that a user connection was lost or that a user has reconnected
|
||||
|
|
|
@ -59,7 +59,7 @@ public class ChatSession {
|
|||
if (user != null && !clients.containsKey(userId)) {
|
||||
String userName = user.getName();
|
||||
clients.put(userId, userName);
|
||||
broadcast(userName, " has joined", MessageColor.BLACK);
|
||||
broadcast(userName, " has joined", MessageColor.BLUE);
|
||||
logger.info(userName + " joined chat " + chatId);
|
||||
}
|
||||
}
|
||||
|
@ -68,16 +68,20 @@ public class ChatSession {
|
|||
if (userId != null && clients.containsKey(userId)) {
|
||||
String userName = clients.get(userId);
|
||||
clients.remove(userId);
|
||||
broadcast(userName, " has left", MessageColor.BLACK);
|
||||
broadcast(userName, " has left", MessageColor.BLUE);
|
||||
logger.info(userName + " has left chat " + chatId);
|
||||
}
|
||||
}
|
||||
|
||||
public void broadcast(String userName, String message, MessageColor color) {
|
||||
broadcast(userName, message, color, true);
|
||||
}
|
||||
|
||||
public void broadcast(String userName, String message, MessageColor color, boolean withTime) {
|
||||
if (!message.isEmpty()) {
|
||||
Calendar cal = new GregorianCalendar();
|
||||
final String msg = message;
|
||||
final String time = timeFormatter.format(cal.getTime());
|
||||
final String time = (withTime ? timeFormatter.format(cal.getTime()):"");
|
||||
final String username = userName;
|
||||
logger.debug("Broadcasting '" + msg + "' for " + chatId);
|
||||
for (UUID userId: clients.keySet()) {
|
||||
|
|
|
@ -40,6 +40,7 @@ import mage.MageException;
|
|||
import mage.cards.decks.Deck;
|
||||
import mage.cards.decks.DeckCardLists;
|
||||
import mage.cards.decks.InvalidDeckException;
|
||||
import mage.game.Game;
|
||||
import mage.game.GameException;
|
||||
import mage.game.GameOptions;
|
||||
import mage.game.Seat;
|
||||
|
@ -63,6 +64,7 @@ import mage.server.tournament.TournamentFactory;
|
|||
import mage.server.tournament.TournamentManager;
|
||||
import mage.server.util.ServerMessagesUtil;
|
||||
import mage.server.util.ThreadExecutor;
|
||||
import mage.view.ChatMessage.MessageColor;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
|
@ -248,6 +250,10 @@ public class TableController {
|
|||
if (table.getState() != TableState.DUELING) {
|
||||
return false;
|
||||
}
|
||||
// you can't watch your own game
|
||||
if (userPlayerMap.get(userId) != null) {
|
||||
return false;
|
||||
}
|
||||
UserManager.getInstance().getUser(userId).watchGame(match.getGame().getId());
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -114,6 +114,10 @@ public class GameController implements GameCallback {
|
|||
ChatManager.getInstance().broadcast(chatId, "", event.getMessage(), MessageColor.BLACK);
|
||||
logger.debug(game.getId() + " " + event.getMessage());
|
||||
break;
|
||||
case STATUS:
|
||||
ChatManager.getInstance().broadcast(chatId, "", event.getMessage(), MessageColor.ORANGE, event.getWithTime());
|
||||
logger.debug(game.getId() + " " + event.getMessage());
|
||||
break;
|
||||
case REVEAL:
|
||||
revealCards(event.getMessage(), event.getCards());
|
||||
break;
|
||||
|
@ -180,11 +184,7 @@ public class GameController implements GameCallback {
|
|||
}
|
||||
}
|
||||
);
|
||||
for (Player player: game.getPlayers().values()) {
|
||||
if (!player.isHuman()) {
|
||||
ChatManager.getInstance().broadcast(chatId, "", player.getName() + " has joined the game", MessageColor.BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
checkStart();
|
||||
}
|
||||
|
||||
|
@ -240,15 +240,21 @@ public class GameController implements GameCallback {
|
|||
}
|
||||
|
||||
public void watch(UUID userId) {
|
||||
GameWatcher gameWatcher = new GameWatcher(userId, game);
|
||||
watchers.put(userId, gameWatcher);
|
||||
gameWatcher.init();
|
||||
ChatManager.getInstance().broadcast(chatId, "", " has started watching", MessageColor.BLACK);
|
||||
User user = UserManager.getInstance().getUser(userId);
|
||||
if (user != null) {
|
||||
GameWatcher gameWatcher = new GameWatcher(userId, game);
|
||||
watchers.put(userId, gameWatcher);
|
||||
gameWatcher.init();
|
||||
ChatManager.getInstance().broadcast(chatId, user.getName(), " has started watching", MessageColor.BLUE);
|
||||
}
|
||||
}
|
||||
|
||||
public void stopWatching(UUID userId) {
|
||||
watchers.remove(userId);
|
||||
ChatManager.getInstance().broadcast(chatId, "", " has stopped watching", MessageColor.BLACK);
|
||||
User user = UserManager.getInstance().getUser(userId);
|
||||
if (user != null) {
|
||||
ChatManager.getInstance().broadcast(chatId, user.getName(), " has stopped watching", MessageColor.BLUE);
|
||||
}
|
||||
}
|
||||
|
||||
public void concede(UUID userId) {
|
||||
|
|
|
@ -144,6 +144,7 @@ public interface Game extends MageItem, Serializable {
|
|||
void fireGetAmountEvent(UUID playerId, String message, int min, int max);
|
||||
void fireChoosePileEvent(UUID playerId, String message, List<? extends Card> pile1, List<? extends Card> pile2);
|
||||
void fireInformEvent(String message);
|
||||
void fireStatusEvent(String message, boolean withTime);
|
||||
void fireUpdatePlayersEvent();
|
||||
void informPlayers(String message);
|
||||
void informPlayer(Player player, String message);
|
||||
|
|
|
@ -136,6 +136,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
|||
protected RangeOfInfluence range;
|
||||
protected MultiplayerAttackOption attackOption;
|
||||
protected GameOptions gameOptions;
|
||||
protected String startMessage;
|
||||
|
||||
public static volatile int copyCount = 0;
|
||||
public static volatile long copyTime = 0;
|
||||
|
@ -536,7 +537,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
|||
}
|
||||
|
||||
private boolean playTurn(Player player) {
|
||||
fireInformEvent("Turn " + Integer.toString(state.getTurnNum()));
|
||||
fireStatusEvent("Turn " + Integer.toString(state.getTurnNum()), true);
|
||||
if (checkStopOnTurnOption()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -567,7 +568,11 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
|||
for (Player player: state.getPlayers().values()) {
|
||||
player.beginTurn(this);
|
||||
}
|
||||
fireInformEvent("game has started");
|
||||
if (startMessage.isEmpty()) {
|
||||
startMessage = "Game has started";
|
||||
}
|
||||
fireStatusEvent(startMessage, false);
|
||||
|
||||
//saveState();
|
||||
|
||||
//20091005 - 103.1
|
||||
|
@ -1394,6 +1399,14 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
|||
tableEventSource.fireTableEvent(EventType.INFO, message, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireStatusEvent(String message, boolean withTime) {
|
||||
if (simulation) {
|
||||
return;
|
||||
}
|
||||
tableEventSource.fireTableEvent(EventType.STATUS, message, withTime, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireUpdatePlayersEvent() {
|
||||
if (simulation) {
|
||||
|
@ -1804,4 +1817,8 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
|
|||
public boolean getScopeRelevant() {
|
||||
return this.scopeRelevant;
|
||||
}
|
||||
|
||||
public void setStartMessage(String startMessage) {
|
||||
this.startMessage = startMessage;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ import java.util.UUID;
|
|||
public class TableEvent extends EventObject implements ExternalEvent, Serializable {
|
||||
|
||||
public enum EventType {
|
||||
UPDATE, INFO, REVEAL, LOOK, START_DRAFT, START_MATCH, SIDEBOARD, CONSTRUCT, SUBMIT_DECK, END, ERROR
|
||||
UPDATE, INFO, STATUS, REVEAL, LOOK, START_DRAFT, START_MATCH, SIDEBOARD, CONSTRUCT, SUBMIT_DECK, END, ERROR
|
||||
}
|
||||
|
||||
private Game game;
|
||||
|
@ -60,6 +60,7 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab
|
|||
private TournamentPairing pair;
|
||||
private MatchOptions options;
|
||||
private int timeout;
|
||||
private boolean withTime;
|
||||
|
||||
public TableEvent(EventType eventType) {
|
||||
super(eventType);
|
||||
|
@ -67,10 +68,15 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab
|
|||
}
|
||||
|
||||
public TableEvent(EventType eventType, String message, Game game) {
|
||||
this(eventType, message, true, game);
|
||||
}
|
||||
|
||||
public TableEvent(EventType eventType, String message, boolean withTime, Game game) {
|
||||
super(game);
|
||||
this.game = game;
|
||||
this.message = message;
|
||||
this.eventType = eventType;
|
||||
this.withTime = withTime;
|
||||
}
|
||||
|
||||
public TableEvent(EventType eventType, String message, Cards cards, Game game) {
|
||||
|
@ -153,4 +159,8 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab
|
|||
public int getTimeout() {
|
||||
return timeout;
|
||||
}
|
||||
|
||||
public boolean getWithTime() {
|
||||
return withTime;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,10 @@ public class TableEventSource implements EventSource<TableEvent>, Serializable {
|
|||
dispatcher.fireEvent(new TableEvent(eventType, message, game));
|
||||
}
|
||||
|
||||
public void fireTableEvent(EventType eventType, String message, boolean withTime, Game game) {
|
||||
dispatcher.fireEvent(new TableEvent(eventType, message, withTime, game));
|
||||
}
|
||||
|
||||
public void fireTableEvent(EventType eventType, UUID playerId, String message, Game game) {
|
||||
dispatcher.fireEvent(new TableEvent(eventType, playerId, message, game));
|
||||
}
|
||||
|
|
|
@ -238,6 +238,18 @@ public abstract class MatchImpl implements Match {
|
|||
player.updateDeck(deck);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected String createGameStartMessage() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("\nMatch score:\n");
|
||||
for (MatchPlayer mp :this.getPlayers()) {
|
||||
sb.append("- ").append(mp.getPlayer().getName());
|
||||
sb.append(" (").append(mp.getWins()).append(" wins / ");
|
||||
sb.append(mp.getLoses()).append(" losses)\n");
|
||||
}
|
||||
sb.append("\n").append(this.getWinsNeeded()).append(" wins needed to win the match\n");
|
||||
sb.append("\nGame has started\n");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue