mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-27 05:03:26 -08:00
game is almost playable again
This commit is contained in:
@@ -76,7 +76,7 @@ void ProtocolItem::initializeHash()
|
||||
|
||||
itemNameHash.insert("generic_eventlist_games", Event_ListGames::newItem);
|
||||
itemNameHash.insert("generic_eventlist_chat_channels", Event_ListChatChannels::newItem);
|
||||
itemNameHash.insert("generic_eventgame_joined", Event_GameJoined::newItem);
|
||||
itemNameHash.insert("game_eventgame_state_changed", Event_GameStateChanged::newItem);
|
||||
itemNameHash.insert("chat_eventchat_list_players", Event_ChatListPlayers::newItem);
|
||||
}
|
||||
|
||||
@@ -421,29 +421,18 @@ void Event_ListGames::writeElement(QXmlStreamWriter *xml)
|
||||
}
|
||||
}
|
||||
|
||||
Event_GameJoined::Event_GameJoined(int _gameId, int _playerId, bool _spectator, const QList<ServerInfo_Player *> &_playerList)
|
||||
: GenericEvent("game_joined"), currentItem(0), readFinished(false), gameId(_gameId), playerId(_playerId), spectator(_spectator), playerList(_playerList)
|
||||
Event_GameStateChanged::Event_GameStateChanged(int _gameId, const QList<ServerInfo_Player *> &_playerList)
|
||||
: GameEvent("game_state_changed", _gameId, -1), currentItem(0), readFinished(false), playerList(_playerList)
|
||||
{
|
||||
setParameter("game_id", gameId);
|
||||
setParameter("player_id", playerId);
|
||||
setParameter("spectator", spectator);
|
||||
}
|
||||
|
||||
Event_GameJoined::~Event_GameJoined()
|
||||
Event_GameStateChanged::~Event_GameStateChanged()
|
||||
{
|
||||
for (int i = 0; i < playerList.size(); ++i)
|
||||
delete playerList[i];
|
||||
}
|
||||
|
||||
void Event_GameJoined::extractParameters()
|
||||
{
|
||||
GenericEvent::extractParameters();
|
||||
gameId = parameters["game_id"].toInt();
|
||||
playerId = parameters["player_id"].toInt();
|
||||
spectator = (parameters["spectator"] == "1");
|
||||
}
|
||||
|
||||
bool Event_GameJoined::readElement(QXmlStreamReader *xml)
|
||||
bool Event_GameStateChanged::readElement(QXmlStreamReader *xml)
|
||||
{
|
||||
if (currentItem) {
|
||||
if (currentItem->readElement(xml))
|
||||
@@ -462,7 +451,7 @@ bool Event_GameJoined::readElement(QXmlStreamReader *xml)
|
||||
return true;
|
||||
}
|
||||
|
||||
void Event_GameJoined::writeElement(QXmlStreamWriter *xml)
|
||||
void Event_GameStateChanged::writeElement(QXmlStreamWriter *xml)
|
||||
{
|
||||
for (int i = 0; i < playerList.size(); ++i)
|
||||
playerList[i]->writeElement(xml);
|
||||
|
||||
@@ -22,7 +22,7 @@ enum ItemId {
|
||||
ItemId_Event_ListChatChannels = ItemId_Other + 200,
|
||||
ItemId_Event_ChatListPlayers = ItemId_Other + 201,
|
||||
ItemId_Event_ListGames = ItemId_Other + 202,
|
||||
ItemId_Event_GameJoined = ItemId_Other + 203,
|
||||
ItemId_Event_GameStateChanged = ItemId_Other + 203,
|
||||
ItemId_Response_DeckList = ItemId_Other + 300,
|
||||
ItemId_Response_DeckDownload = ItemId_Other + 301,
|
||||
ItemId_Response_DeckUpload = ItemId_Other + 302
|
||||
@@ -41,6 +41,7 @@ protected:
|
||||
void setParameter(const QString &name, const QString &value) { parameters[name] = value; }
|
||||
void setParameter(const QString &name, bool value) { parameters[name] = (value ? "1" : "0"); }
|
||||
void setParameter(const QString &name, int value) { parameters[name] = QString::number(value); }
|
||||
void setParameter(const QString &name, const QColor &value) { parameters[name] = QString::number(ColorConverter::colorToInt(value)); }
|
||||
virtual void extractParameters() { }
|
||||
virtual QString getItemType() const = 0;
|
||||
|
||||
@@ -127,6 +128,11 @@ public:
|
||||
setParameter("game_id", gameId);
|
||||
}
|
||||
int getGameId() const { return gameId; }
|
||||
void setGameId(int _gameId)
|
||||
{
|
||||
gameId = _gameId;
|
||||
setParameter("game_id", gameId);
|
||||
}
|
||||
};
|
||||
|
||||
class Command_DeckUpload : public Command {
|
||||
@@ -331,26 +337,18 @@ public:
|
||||
void writeElement(QXmlStreamWriter *xml);
|
||||
};
|
||||
|
||||
class Event_GameJoined : public GenericEvent {
|
||||
class Event_GameStateChanged : public GameEvent {
|
||||
Q_OBJECT
|
||||
private:
|
||||
SerializableItem *currentItem;
|
||||
bool readFinished;
|
||||
int gameId;
|
||||
int playerId;
|
||||
bool spectator;
|
||||
QList<ServerInfo_Player *> playerList;
|
||||
protected:
|
||||
void extractParameters();
|
||||
public:
|
||||
Event_GameJoined(int _gameId = -1, int _playerId = -1, bool _spectator = false, const QList<ServerInfo_Player *> &_playerList = QList<ServerInfo_Player *>());
|
||||
~Event_GameJoined();
|
||||
int getGameId() const { return gameId; }
|
||||
int getPlayerId() const { return playerId; }
|
||||
bool getSpectator() const { return spectator; }
|
||||
Event_GameStateChanged(int _gameId = -1, const QList<ServerInfo_Player *> &_playerList = QList<ServerInfo_Player *>());
|
||||
~Event_GameStateChanged();
|
||||
const QList<ServerInfo_Player *> &getPlayerList() const { return playerList; }
|
||||
static ProtocolItem *newItem() { return new Event_GameJoined; }
|
||||
int getItemId() const { return ItemId_Event_GameJoined; }
|
||||
static ProtocolItem *newItem() { return new Event_GameStateChanged; }
|
||||
int getItemId() const { return ItemId_Event_GameStateChanged; }
|
||||
|
||||
bool readElement(QXmlStreamReader *xml);
|
||||
void writeElement(QXmlStreamWriter *xml);
|
||||
|
||||
@@ -2,18 +2,6 @@
|
||||
#include <QXmlStreamReader>
|
||||
#include <QXmlStreamWriter>
|
||||
|
||||
class ColorConverter {
|
||||
public:
|
||||
static int colorToInt(const QColor &color)
|
||||
{
|
||||
return color.red() * 65536 + color.green() * 256 + color.blue();
|
||||
}
|
||||
static QColor colorFromInt(int colorValue)
|
||||
{
|
||||
return QColor(colorValue / 65536, (colorValue % 65536) / 256, colorValue % 256);
|
||||
}
|
||||
};
|
||||
|
||||
ServerInfo_Player::~ServerInfo_Player()
|
||||
{
|
||||
for (int i = 0; i < zoneList.size(); ++i)
|
||||
|
||||
@@ -20,6 +20,18 @@ enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespInvalidData, Re
|
||||
// list index, whereas cards in any other zone are referenced by their ids.
|
||||
enum ZoneType { PrivateZone, PublicZone, HiddenZone };
|
||||
|
||||
class ColorConverter {
|
||||
public:
|
||||
static int colorToInt(const QColor &color)
|
||||
{
|
||||
return color.red() * 65536 + color.green() * 256 + color.blue();
|
||||
}
|
||||
static QColor colorFromInt(int colorValue)
|
||||
{
|
||||
return QColor(colorValue / 65536, (colorValue % 65536) / 256, colorValue % 256);
|
||||
}
|
||||
};
|
||||
|
||||
class SerializableItem {
|
||||
protected:
|
||||
SerializableItem *currentItem;
|
||||
|
||||
@@ -39,23 +39,23 @@ ItemId_Event_Leave = 1037,
|
||||
ItemId_Event_DeckSelect = 1038,
|
||||
ItemId_Event_GameClosed = 1039,
|
||||
ItemId_Event_ReadyStart = 1040,
|
||||
ItemId_Event_SetupZones = 1041,
|
||||
ItemId_Event_GameStart = 1042,
|
||||
ItemId_Event_Shuffle = 1043,
|
||||
ItemId_Event_RollDie = 1044,
|
||||
ItemId_Event_MoveCard = 1045,
|
||||
ItemId_Event_CreateToken = 1046,
|
||||
ItemId_Event_CreateArrow = 1047,
|
||||
ItemId_Event_DeleteArrow = 1048,
|
||||
ItemId_Event_SetCardAttr = 1049,
|
||||
ItemId_Event_AddCounter = 1050,
|
||||
ItemId_Event_SetCounter = 1051,
|
||||
ItemId_Event_DelCounter = 1052,
|
||||
ItemId_Event_SetActivePlayer = 1053,
|
||||
ItemId_Event_SetActivePhase = 1054,
|
||||
ItemId_Event_DumpZone = 1055,
|
||||
ItemId_Event_StopDumpZone = 1056,
|
||||
ItemId_Event_ServerMessage = 1057,
|
||||
ItemId_Event_GameStart = 1041,
|
||||
ItemId_Event_Shuffle = 1042,
|
||||
ItemId_Event_RollDie = 1043,
|
||||
ItemId_Event_MoveCard = 1044,
|
||||
ItemId_Event_CreateToken = 1045,
|
||||
ItemId_Event_CreateArrow = 1046,
|
||||
ItemId_Event_DeleteArrow = 1047,
|
||||
ItemId_Event_SetCardAttr = 1048,
|
||||
ItemId_Event_AddCounter = 1049,
|
||||
ItemId_Event_SetCounter = 1050,
|
||||
ItemId_Event_DelCounter = 1051,
|
||||
ItemId_Event_SetActivePlayer = 1052,
|
||||
ItemId_Event_SetActivePhase = 1053,
|
||||
ItemId_Event_DumpZone = 1054,
|
||||
ItemId_Event_StopDumpZone = 1055,
|
||||
ItemId_Event_ServerMessage = 1056,
|
||||
ItemId_Event_GameJoined = 1057,
|
||||
ItemId_Event_ChatJoinChannel = 1058,
|
||||
ItemId_Event_ChatLeaveChannel = 1059,
|
||||
ItemId_Event_ChatSay = 1060,
|
||||
|
||||
@@ -201,7 +201,7 @@ void Command_CreateToken::extractParameters()
|
||||
x = parameters["x"].toInt();
|
||||
y = parameters["y"].toInt();
|
||||
}
|
||||
Command_CreateArrow::Command_CreateArrow(int _gameId, int _startPlayerId, const QString &_startZone, int _startCardId, int _targetPlayerId, const QString &_targetZone, int _targetCardId, int _color)
|
||||
Command_CreateArrow::Command_CreateArrow(int _gameId, int _startPlayerId, const QString &_startZone, int _startCardId, int _targetPlayerId, const QString &_targetZone, int _targetCardId, const QColor &_color)
|
||||
: GameCommand("create_arrow", _gameId), startPlayerId(_startPlayerId), startZone(_startZone), startCardId(_startCardId), targetPlayerId(_targetPlayerId), targetZone(_targetZone), targetCardId(_targetCardId), color(_color)
|
||||
{
|
||||
setParameter("start_player_id", startPlayerId);
|
||||
@@ -221,7 +221,7 @@ void Command_CreateArrow::extractParameters()
|
||||
targetPlayerId = parameters["target_player_id"].toInt();
|
||||
targetZone = parameters["target_zone"];
|
||||
targetCardId = parameters["target_card_id"].toInt();
|
||||
color = parameters["color"].toInt();
|
||||
color = ColorConverter::colorFromInt(parameters["color"].toInt());
|
||||
}
|
||||
Command_DeleteArrow::Command_DeleteArrow(int _gameId, int _arrowId)
|
||||
: GameCommand("delete_arrow", _gameId), arrowId(_arrowId)
|
||||
@@ -265,7 +265,7 @@ void Command_IncCounter::extractParameters()
|
||||
counterId = parameters["counter_id"].toInt();
|
||||
delta = parameters["delta"].toInt();
|
||||
}
|
||||
Command_AddCounter::Command_AddCounter(int _gameId, const QString &_counterName, int _color, int _radius, int _value)
|
||||
Command_AddCounter::Command_AddCounter(int _gameId, const QString &_counterName, const QColor &_color, int _radius, int _value)
|
||||
: GameCommand("add_counter", _gameId), counterName(_counterName), color(_color), radius(_radius), value(_value)
|
||||
{
|
||||
setParameter("counter_name", counterName);
|
||||
@@ -277,7 +277,7 @@ void Command_AddCounter::extractParameters()
|
||||
{
|
||||
GameCommand::extractParameters();
|
||||
counterName = parameters["counter_name"];
|
||||
color = parameters["color"].toInt();
|
||||
color = ColorConverter::colorFromInt(parameters["color"].toInt());
|
||||
radius = parameters["radius"].toInt();
|
||||
value = parameters["value"].toInt();
|
||||
}
|
||||
@@ -391,18 +391,6 @@ Event_ReadyStart::Event_ReadyStart(int _gameId, int _playerId)
|
||||
: GameEvent("ready_start", _gameId, _playerId)
|
||||
{
|
||||
}
|
||||
Event_SetupZones::Event_SetupZones(int _gameId, int _playerId, int _deckSize, int _sbSize)
|
||||
: GameEvent("setup_zones", _gameId, _playerId), deckSize(_deckSize), sbSize(_sbSize)
|
||||
{
|
||||
setParameter("deck_size", deckSize);
|
||||
setParameter("sb_size", sbSize);
|
||||
}
|
||||
void Event_SetupZones::extractParameters()
|
||||
{
|
||||
GameEvent::extractParameters();
|
||||
deckSize = parameters["deck_size"].toInt();
|
||||
sbSize = parameters["sb_size"].toInt();
|
||||
}
|
||||
Event_GameStart::Event_GameStart(int _gameId, int _playerId)
|
||||
: GameEvent("game_start", _gameId, _playerId)
|
||||
{
|
||||
@@ -467,7 +455,7 @@ void Event_CreateToken::extractParameters()
|
||||
x = parameters["x"].toInt();
|
||||
y = parameters["y"].toInt();
|
||||
}
|
||||
Event_CreateArrow::Event_CreateArrow(int _gameId, int _playerId, int _arrowId, int _startPlayerId, const QString &_startZone, int _startCardId, int _targetPlayerId, const QString &_targetZone, int _targetCardId, int _color)
|
||||
Event_CreateArrow::Event_CreateArrow(int _gameId, int _playerId, int _arrowId, int _startPlayerId, const QString &_startZone, int _startCardId, int _targetPlayerId, const QString &_targetZone, int _targetCardId, const QColor &_color)
|
||||
: GameEvent("create_arrow", _gameId, _playerId), arrowId(_arrowId), startPlayerId(_startPlayerId), startZone(_startZone), startCardId(_startCardId), targetPlayerId(_targetPlayerId), targetZone(_targetZone), targetCardId(_targetCardId), color(_color)
|
||||
{
|
||||
setParameter("arrow_id", arrowId);
|
||||
@@ -489,7 +477,7 @@ void Event_CreateArrow::extractParameters()
|
||||
targetPlayerId = parameters["target_player_id"].toInt();
|
||||
targetZone = parameters["target_zone"];
|
||||
targetCardId = parameters["target_card_id"].toInt();
|
||||
color = parameters["color"].toInt();
|
||||
color = ColorConverter::colorFromInt(parameters["color"].toInt());
|
||||
}
|
||||
Event_DeleteArrow::Event_DeleteArrow(int _gameId, int _playerId, int _arrowId)
|
||||
: GameEvent("delete_arrow", _gameId, _playerId), arrowId(_arrowId)
|
||||
@@ -517,7 +505,7 @@ void Event_SetCardAttr::extractParameters()
|
||||
attrName = parameters["attr_name"];
|
||||
attrValue = parameters["attr_value"];
|
||||
}
|
||||
Event_AddCounter::Event_AddCounter(int _gameId, int _playerId, int _counterId, const QString &_counterName, int _color, int _radius, int _value)
|
||||
Event_AddCounter::Event_AddCounter(int _gameId, int _playerId, int _counterId, const QString &_counterName, const QColor &_color, int _radius, int _value)
|
||||
: GameEvent("add_counter", _gameId, _playerId), counterId(_counterId), counterName(_counterName), color(_color), radius(_radius), value(_value)
|
||||
{
|
||||
setParameter("counter_id", counterId);
|
||||
@@ -531,7 +519,7 @@ void Event_AddCounter::extractParameters()
|
||||
GameEvent::extractParameters();
|
||||
counterId = parameters["counter_id"].toInt();
|
||||
counterName = parameters["counter_name"];
|
||||
color = parameters["color"].toInt();
|
||||
color = ColorConverter::colorFromInt(parameters["color"].toInt());
|
||||
radius = parameters["radius"].toInt();
|
||||
value = parameters["value"].toInt();
|
||||
}
|
||||
@@ -613,6 +601,20 @@ void Event_ServerMessage::extractParameters()
|
||||
GenericEvent::extractParameters();
|
||||
message = parameters["message"];
|
||||
}
|
||||
Event_GameJoined::Event_GameJoined(int _gameId, int _playerId, bool _spectator)
|
||||
: GenericEvent("game_joined"), gameId(_gameId), playerId(_playerId), spectator(_spectator)
|
||||
{
|
||||
setParameter("game_id", gameId);
|
||||
setParameter("player_id", playerId);
|
||||
setParameter("spectator", spectator);
|
||||
}
|
||||
void Event_GameJoined::extractParameters()
|
||||
{
|
||||
GenericEvent::extractParameters();
|
||||
gameId = parameters["game_id"].toInt();
|
||||
playerId = parameters["player_id"].toInt();
|
||||
spectator = (parameters["spectator"] == "1");
|
||||
}
|
||||
Event_ChatJoinChannel::Event_ChatJoinChannel(const QString &_channel, const QString &_playerName)
|
||||
: ChatEvent("chat_join_channel", _channel), playerName(_playerName)
|
||||
{
|
||||
@@ -687,7 +689,6 @@ void ProtocolItem::initializeHashAuto()
|
||||
itemNameHash.insert("game_eventdeck_select", Event_DeckSelect::newItem);
|
||||
itemNameHash.insert("game_eventgame_closed", Event_GameClosed::newItem);
|
||||
itemNameHash.insert("game_eventready_start", Event_ReadyStart::newItem);
|
||||
itemNameHash.insert("game_eventsetup_zones", Event_SetupZones::newItem);
|
||||
itemNameHash.insert("game_eventgame_start", Event_GameStart::newItem);
|
||||
itemNameHash.insert("game_eventshuffle", Event_Shuffle::newItem);
|
||||
itemNameHash.insert("game_eventroll_die", Event_RollDie::newItem);
|
||||
@@ -704,6 +705,7 @@ void ProtocolItem::initializeHashAuto()
|
||||
itemNameHash.insert("game_eventdump_zone", Event_DumpZone::newItem);
|
||||
itemNameHash.insert("game_eventstop_dump_zone", Event_StopDumpZone::newItem);
|
||||
itemNameHash.insert("generic_eventserver_message", Event_ServerMessage::newItem);
|
||||
itemNameHash.insert("generic_eventgame_joined", Event_GameJoined::newItem);
|
||||
itemNameHash.insert("chat_eventchat_join_channel", Event_ChatJoinChannel::newItem);
|
||||
itemNameHash.insert("chat_eventchat_leave_channel", Event_ChatLeaveChannel::newItem);
|
||||
itemNameHash.insert("chat_eventchat_say", Event_ChatSay::newItem);
|
||||
|
||||
@@ -19,12 +19,12 @@
|
||||
2:draw_cards:i,number
|
||||
2:move_card:s,start_zone:i,card_id:s,target_zone:i,x:i,y:b,face_down
|
||||
2:create_token:s,zone:s,card_name:s,pt:i,x:i,y
|
||||
2:create_arrow:i,start_player_id:s,start_zone:i,start_card_id:i,target_player_id:s,target_zone:i,target_card_id:i,color
|
||||
2:create_arrow:i,start_player_id:s,start_zone:i,start_card_id:i,target_player_id:s,target_zone:i,target_card_id:c,color
|
||||
2:delete_arrow:i,arrow_id
|
||||
2:set_card_attr:s,zone:i,card_id:s,attr_name:s,attr_value
|
||||
2:ready_start
|
||||
2:inc_counter:i,counter_id:i,delta
|
||||
2:add_counter:s,counter_name:i,color:i,radius:i,value
|
||||
2:add_counter:s,counter_name:c,color:i,radius:i,value
|
||||
2:set_counter:i,counter_id:i,value
|
||||
2:del_counter:i,counter_id
|
||||
2:next_turn
|
||||
@@ -38,16 +38,15 @@
|
||||
3:deck_select:i,deck_id
|
||||
3:game_closed
|
||||
3:ready_start
|
||||
3:setup_zones:i,deck_size:i,sb_size
|
||||
3:game_start
|
||||
3:shuffle
|
||||
3:roll_die:i,sides:i,value
|
||||
3:move_card:i,card_id:s,card_name:s,start_zone:i,position:s,target_zone:i,x:i,y:b,face_down
|
||||
3:create_token:s,zone:i,card_id:s,card_name:s,pt:i,x:i,y
|
||||
3:create_arrow:i,arrow_id:i,start_player_id:s,start_zone:i,start_card_id:i,target_player_id:s,target_zone:i,target_card_id:i,color
|
||||
3:create_arrow:i,arrow_id:i,start_player_id:s,start_zone:i,start_card_id:i,target_player_id:s,target_zone:i,target_card_id:c,color
|
||||
3:delete_arrow:i,arrow_id
|
||||
3:set_card_attr:s,zone:i,card_id:s,attr_name:s,attr_value
|
||||
3:add_counter:i,counter_id:s,counter_name:i,color:i,radius:i,value
|
||||
3:add_counter:i,counter_id:s,counter_name:c,color:i,radius:i,value
|
||||
3:set_counter:i,counter_id:i,value
|
||||
3:del_counter:i,counter_id
|
||||
3:set_active_player:i,active_player_id
|
||||
@@ -55,6 +54,7 @@
|
||||
3:dump_zone:i,zone_owner_id:s,zone:i,number_cards
|
||||
3:stop_dump_zone:i,zone_owner_id:s,zone
|
||||
4:server_message:s,message
|
||||
4:game_joined:i,game_id:i,player_id:b,spectator
|
||||
5:chat_join_channel:s,player_name
|
||||
5:chat_leave_channel:s,player_name
|
||||
5:chat_say:s,player_name:s,message
|
||||
@@ -268,16 +268,16 @@ private:
|
||||
int targetPlayerId;
|
||||
QString targetZone;
|
||||
int targetCardId;
|
||||
int color;
|
||||
QColor color;
|
||||
public:
|
||||
Command_CreateArrow(int _gameId = -1, int _startPlayerId = -1, const QString &_startZone = QString(), int _startCardId = -1, int _targetPlayerId = -1, const QString &_targetZone = QString(), int _targetCardId = -1, int _color = -1);
|
||||
Command_CreateArrow(int _gameId = -1, int _startPlayerId = -1, const QString &_startZone = QString(), int _startCardId = -1, int _targetPlayerId = -1, const QString &_targetZone = QString(), int _targetCardId = -1, const QColor &_color = QColor());
|
||||
int getStartPlayerId() const { return startPlayerId; }
|
||||
QString getStartZone() const { return startZone; }
|
||||
int getStartCardId() const { return startCardId; }
|
||||
int getTargetPlayerId() const { return targetPlayerId; }
|
||||
QString getTargetZone() const { return targetZone; }
|
||||
int getTargetCardId() const { return targetCardId; }
|
||||
int getColor() const { return color; }
|
||||
QColor getColor() const { return color; }
|
||||
static ProtocolItem *newItem() { return new Command_CreateArrow; }
|
||||
int getItemId() const { return ItemId_Command_CreateArrow; }
|
||||
protected:
|
||||
@@ -339,13 +339,13 @@ class Command_AddCounter : public GameCommand {
|
||||
Q_OBJECT
|
||||
private:
|
||||
QString counterName;
|
||||
int color;
|
||||
QColor color;
|
||||
int radius;
|
||||
int value;
|
||||
public:
|
||||
Command_AddCounter(int _gameId = -1, const QString &_counterName = QString(), int _color = -1, int _radius = -1, int _value = -1);
|
||||
Command_AddCounter(int _gameId = -1, const QString &_counterName = QString(), const QColor &_color = QColor(), int _radius = -1, int _value = -1);
|
||||
QString getCounterName() const { return counterName; }
|
||||
int getColor() const { return color; }
|
||||
QColor getColor() const { return color; }
|
||||
int getRadius() const { return radius; }
|
||||
int getValue() const { return value; }
|
||||
static ProtocolItem *newItem() { return new Command_AddCounter; }
|
||||
@@ -499,20 +499,6 @@ public:
|
||||
static ProtocolItem *newItem() { return new Event_ReadyStart; }
|
||||
int getItemId() const { return ItemId_Event_ReadyStart; }
|
||||
};
|
||||
class Event_SetupZones : public GameEvent {
|
||||
Q_OBJECT
|
||||
private:
|
||||
int deckSize;
|
||||
int sbSize;
|
||||
public:
|
||||
Event_SetupZones(int _gameId = -1, int _playerId = -1, int _deckSize = -1, int _sbSize = -1);
|
||||
int getDeckSize() const { return deckSize; }
|
||||
int getSbSize() const { return sbSize; }
|
||||
static ProtocolItem *newItem() { return new Event_SetupZones; }
|
||||
int getItemId() const { return ItemId_Event_SetupZones; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
class Event_GameStart : public GameEvent {
|
||||
Q_OBJECT
|
||||
private:
|
||||
@@ -601,9 +587,9 @@ private:
|
||||
int targetPlayerId;
|
||||
QString targetZone;
|
||||
int targetCardId;
|
||||
int color;
|
||||
QColor color;
|
||||
public:
|
||||
Event_CreateArrow(int _gameId = -1, int _playerId = -1, int _arrowId = -1, int _startPlayerId = -1, const QString &_startZone = QString(), int _startCardId = -1, int _targetPlayerId = -1, const QString &_targetZone = QString(), int _targetCardId = -1, int _color = -1);
|
||||
Event_CreateArrow(int _gameId = -1, int _playerId = -1, int _arrowId = -1, int _startPlayerId = -1, const QString &_startZone = QString(), int _startCardId = -1, int _targetPlayerId = -1, const QString &_targetZone = QString(), int _targetCardId = -1, const QColor &_color = QColor());
|
||||
int getArrowId() const { return arrowId; }
|
||||
int getStartPlayerId() const { return startPlayerId; }
|
||||
QString getStartZone() const { return startZone; }
|
||||
@@ -611,7 +597,7 @@ public:
|
||||
int getTargetPlayerId() const { return targetPlayerId; }
|
||||
QString getTargetZone() const { return targetZone; }
|
||||
int getTargetCardId() const { return targetCardId; }
|
||||
int getColor() const { return color; }
|
||||
QColor getColor() const { return color; }
|
||||
static ProtocolItem *newItem() { return new Event_CreateArrow; }
|
||||
int getItemId() const { return ItemId_Event_CreateArrow; }
|
||||
protected:
|
||||
@@ -652,14 +638,14 @@ class Event_AddCounter : public GameEvent {
|
||||
private:
|
||||
int counterId;
|
||||
QString counterName;
|
||||
int color;
|
||||
QColor color;
|
||||
int radius;
|
||||
int value;
|
||||
public:
|
||||
Event_AddCounter(int _gameId = -1, int _playerId = -1, int _counterId = -1, const QString &_counterName = QString(), int _color = -1, int _radius = -1, int _value = -1);
|
||||
Event_AddCounter(int _gameId = -1, int _playerId = -1, int _counterId = -1, const QString &_counterName = QString(), const QColor &_color = QColor(), int _radius = -1, int _value = -1);
|
||||
int getCounterId() const { return counterId; }
|
||||
QString getCounterName() const { return counterName; }
|
||||
int getColor() const { return color; }
|
||||
QColor getColor() const { return color; }
|
||||
int getRadius() const { return radius; }
|
||||
int getValue() const { return value; }
|
||||
static ProtocolItem *newItem() { return new Event_AddCounter; }
|
||||
@@ -759,6 +745,22 @@ public:
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
class Event_GameJoined : public GenericEvent {
|
||||
Q_OBJECT
|
||||
private:
|
||||
int gameId;
|
||||
int playerId;
|
||||
bool spectator;
|
||||
public:
|
||||
Event_GameJoined(int _gameId = -1, int _playerId = -1, bool _spectator = false);
|
||||
int getGameId() const { return gameId; }
|
||||
int getPlayerId() const { return playerId; }
|
||||
bool getSpectator() const { return spectator; }
|
||||
static ProtocolItem *newItem() { return new Event_GameJoined; }
|
||||
int getItemId() const { return ItemId_Event_GameJoined; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
class Event_ChatJoinChannel : public ChatEvent {
|
||||
Q_OBJECT
|
||||
private:
|
||||
|
||||
@@ -102,6 +102,11 @@ while (<file>) {
|
||||
$constructorParamsH .= "int _$prettyVarName = -1";
|
||||
$constructorParamsCpp .= "int _$prettyVarName";
|
||||
$paramStr5 .= "\t$prettyVarName = parameters[\"$value\"].toInt();\n";
|
||||
} elsif ($key eq 'c') {
|
||||
$dataType = 'QColor';
|
||||
$constructorParamsH .= "const QColor &_$prettyVarName = QColor()";
|
||||
$constructorParamsCpp .= "const QColor &_$prettyVarName";
|
||||
$paramStr5 .= "\t$prettyVarName = ColorConverter::colorFromInt(parameters[\"$value\"].toInt());\n";
|
||||
}
|
||||
($prettyVarName2 = $prettyVarName) =~ s/^(.)/\U$1\E/;
|
||||
$paramStr4 .= "\t$dataType get$prettyVarName2() const { return $prettyVarName; }\n";
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
#ifndef SERVER_ARROW_H
|
||||
#define SERVER_ARROW_H
|
||||
|
||||
#include <QColor>
|
||||
|
||||
class Server_Card;
|
||||
|
||||
class Server_Arrow {
|
||||
private:
|
||||
int id;
|
||||
Server_Card *startCard, *targetCard;
|
||||
int color;
|
||||
QColor color;
|
||||
public:
|
||||
Server_Arrow(int _id, Server_Card *_startCard, Server_Card *_targetCard, int _color)
|
||||
Server_Arrow(int _id, Server_Card *_startCard, Server_Card *_targetCard, const QColor &_color)
|
||||
: id(_id), startCard(_startCard), targetCard(_targetCard), color(_color) { }
|
||||
int getId() const { return id; }
|
||||
Server_Card *getStartCard() const { return startCard; }
|
||||
Server_Card *getTargetCard() const { return targetCard; }
|
||||
int getColor() const { return color; }
|
||||
QColor getColor() const { return color; }
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -21,20 +21,21 @@
|
||||
#define SERVER_COUNTER_H
|
||||
|
||||
#include <QString>
|
||||
#include <QColor>
|
||||
|
||||
class Server_Counter {
|
||||
protected:
|
||||
int id;
|
||||
QString name;
|
||||
int color;
|
||||
QColor color;
|
||||
int radius;
|
||||
int count;
|
||||
public:
|
||||
Server_Counter(int _id, const QString &_name, int _color, int _radius, int _count = 0) : id(_id), name(_name), color(_color), radius(_radius), count(_count) { }
|
||||
Server_Counter(int _id, const QString &_name, const QColor &_color, int _radius, int _count = 0) : id(_id), name(_name), color(_color), radius(_radius), count(_count) { }
|
||||
~Server_Counter() { }
|
||||
int getId() const { return id; }
|
||||
QString getName() const { return name; }
|
||||
int getColor() const { return color; }
|
||||
QColor getColor() const { return color; }
|
||||
int getRadius() const { return radius; }
|
||||
int getCount() const { return count; }
|
||||
void setCount(int _count) { count = _count; }
|
||||
|
||||
@@ -54,8 +54,16 @@ void Server_Game::startGameIfReady()
|
||||
return;
|
||||
QMapIterator<int, Server_Player *> playerIterator(players);
|
||||
while (playerIterator.hasNext())
|
||||
if (playerIterator.next().value()->getStatus() != StatusReadyStart)
|
||||
if (!playerIterator.next().value()->getReadyStart())
|
||||
return;
|
||||
playerIterator.toFront();
|
||||
while (playerIterator.hasNext())
|
||||
playerIterator.next().value()->setupZones();
|
||||
playerIterator.toFront();
|
||||
while (playerIterator.hasNext()) {
|
||||
Server_Player *player = playerIterator.next().value();
|
||||
player->sendProtocolItem(new Event_GameStateChanged(gameId, getGameState(player)));
|
||||
}
|
||||
|
||||
/* QSqlQuery query;
|
||||
query.prepare("insert into games (id, descr, password, time_started) values(:id, :descr, :password, now())");
|
||||
@@ -71,8 +79,6 @@ void Server_Game::startGameIfReady()
|
||||
query.bindValue(":id", gameId);
|
||||
query.bindValue(":player", player->getPlayerName());
|
||||
query.exec();
|
||||
|
||||
player->setupZones();
|
||||
}
|
||||
*/
|
||||
gameStarted = true;
|
||||
@@ -160,7 +166,7 @@ void Server_Game::setActivePhase(int _activePhase)
|
||||
sendGameEvent(new Event_SetActivePhase(-1, -1, activePhase));
|
||||
}
|
||||
|
||||
QList<ServerInfo_Player *> Server_Game::getGameState() const
|
||||
QList<ServerInfo_Player *> Server_Game::getGameState(Server_Player *playerWhosAsking) const
|
||||
{
|
||||
QList<ServerInfo_Player *> result;
|
||||
QMapIterator<int, Server_Player *> playerIterator(players);
|
||||
@@ -195,10 +201,15 @@ QList<ServerInfo_Player *> Server_Game::getGameState() const
|
||||
while (zoneIterator.hasNext()) {
|
||||
Server_CardZone *zone = zoneIterator.next().value();
|
||||
QList<ServerInfo_Card *> cardList;
|
||||
QListIterator<Server_Card *> cardIterator(zone->cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
Server_Card *card = cardIterator.next();
|
||||
cardList.append(new ServerInfo_Card(card->getId(), card->getName(), card->getX(), card->getY(), card->getCounters(), card->getTapped(), card->getAttacking(), card->getAnnotation()));
|
||||
if (
|
||||
((playerWhosAsking == player) && (zone->getType() != HiddenZone))
|
||||
|| ((playerWhosAsking != player) && (zone->getType() == PublicZone))
|
||||
) {
|
||||
QListIterator<Server_Card *> cardIterator(zone->cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
Server_Card *card = cardIterator.next();
|
||||
cardList.append(new ServerInfo_Card(card->getId(), card->getName(), card->getX(), card->getY(), card->getCounters(), card->getTapped(), card->getAttacking(), card->getAnnotation()));
|
||||
}
|
||||
}
|
||||
zoneList.append(new ServerInfo_Zone(zone->getName(), zone->getType(), zone->hasCoords(), zone->cards.size(), cardList));
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
void setActivePlayer(int _activePlayer);
|
||||
void setActivePhase(int _activePhase);
|
||||
|
||||
QList<ServerInfo_Player *> getGameState() const;
|
||||
QList<ServerInfo_Player *> getGameState(Server_Player *playerWhosAsking) const;
|
||||
void sendGameEvent(GameEvent *event);
|
||||
};
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "decklist.h"
|
||||
|
||||
Server_Player::Server_Player(Server_Game *_game, int _playerId, const QString &_playerName, bool _spectator, Server_ProtocolHandler *_handler)
|
||||
: game(_game), handler(_handler), deck(0), playerId(_playerId), playerName(_playerName), spectator(_spectator), nextCardId(0), PlayerStatus(StatusNormal)
|
||||
: game(_game), handler(_handler), deck(0), playerId(_playerId), playerName(_playerName), spectator(_spectator), nextCardId(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -85,9 +85,6 @@ void Server_Player::setupZones()
|
||||
}
|
||||
}
|
||||
deckZone->shuffle();
|
||||
|
||||
PlayerStatus = StatusPlaying;
|
||||
game->sendGameEvent(new Event_SetupZones(-1, playerId, deckZone->cards.size(), sbZone->cards.size()));
|
||||
}
|
||||
|
||||
void Server_Player::clearZones()
|
||||
|
||||
@@ -14,8 +14,6 @@ class Server_Arrow;
|
||||
class Server_ProtocolHandler;
|
||||
class ProtocolItem;
|
||||
|
||||
enum PlayerStatusEnum { StatusNormal, StatusSubmitDeck, StatusReadyStart, StatusPlaying };
|
||||
|
||||
class Server_Player : public QObject {
|
||||
Q_OBJECT
|
||||
private:
|
||||
@@ -30,14 +28,14 @@ private:
|
||||
bool spectator;
|
||||
int nextCardId;
|
||||
void clearZones();
|
||||
PlayerStatusEnum PlayerStatus;
|
||||
bool readyStart;
|
||||
public:
|
||||
Server_Player(Server_Game *_game, int _playerId, const QString &_playerName, bool _spectator, Server_ProtocolHandler *_handler);
|
||||
void setProtocolHandler(Server_ProtocolHandler *_handler) { handler = _handler; }
|
||||
|
||||
void setStatus(PlayerStatusEnum _status) { PlayerStatus = _status; }
|
||||
void setPlayerId(int _id) { playerId = _id; }
|
||||
PlayerStatusEnum getStatus() { return PlayerStatus; }
|
||||
bool getReadyStart() const { return readyStart; }
|
||||
void setReadyStart(bool _readyStart) { readyStart = _readyStart; }
|
||||
int getPlayerId() const { return playerId; }
|
||||
bool getSpectator() const { return spectator; }
|
||||
QString getPlayerName() const { return playerName; }
|
||||
|
||||
@@ -218,9 +218,11 @@ ResponseCode Server_ProtocolHandler::cmdListGames(Command_ListGames * /*cmd*/)
|
||||
ResponseCode Server_ProtocolHandler::cmdCreateGame(Command_CreateGame *cmd)
|
||||
{
|
||||
Server_Game *game = server->createGame(cmd->getDescription(), cmd->getPassword(), cmd->getMaxPlayers(), cmd->getSpectatorsAllowed(), this);
|
||||
games.insert(game->getGameId(), QPair<Server_Game *, Server_Player *>(game, game->getCreator()));
|
||||
Server_Player *creator = game->getCreator();
|
||||
games.insert(game->getGameId(), QPair<Server_Game *, Server_Player *>(game, creator));
|
||||
|
||||
enqueueProtocolItem(new Event_GameJoined(game->getGameId(), game->getCreator()->getPlayerId(), false, game->getGameState()));
|
||||
enqueueProtocolItem(new Event_GameJoined(game->getGameId(), creator->getPlayerId(), false));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(game->getGameId(), game->getGameState(creator)));
|
||||
return RespOk;
|
||||
}
|
||||
|
||||
@@ -234,7 +236,8 @@ ResponseCode Server_ProtocolHandler::cmdJoinGame(Command_JoinGame *cmd)
|
||||
if (result == RespOk) {
|
||||
Server_Player *player = g->addPlayer(this, cmd->getSpectator());
|
||||
games.insert(cmd->getGameId(), QPair<Server_Game *, Server_Player *>(g, player));
|
||||
enqueueProtocolItem(new Event_GameJoined(cmd->getGameId(), player->getPlayerId(), cmd->getSpectator(), g->getGameState()));
|
||||
enqueueProtocolItem(new Event_GameJoined(cmd->getGameId(), player->getPlayerId(), cmd->getSpectator()));
|
||||
enqueueProtocolItem(new Event_GameStateChanged(cmd->getGameId(), g->getGameState(player)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -346,20 +349,13 @@ ResponseCode Server_ProtocolHandler::cmdMoveCard(Command_MoveCard *cmd, Server_G
|
||||
|
||||
// The player does not get to see which card he moved if it moves between two parts of hidden zones which
|
||||
// are not being looked at.
|
||||
QString privateCardId = QString::number(card->getId());
|
||||
int privateCardId = card->getId();
|
||||
if (!targetBeingLookedAt && !sourceBeingLookedAt) {
|
||||
privateCardId = QString();
|
||||
privateCardId = -1;
|
||||
privateCardName = QString();
|
||||
}
|
||||
/* player->privateEvent(QString("move_card|%1|%2|%3|%4|%5|%6|%7|%8").arg(privateCardId)
|
||||
.arg(privateCardName)
|
||||
.arg(startzone->getName())
|
||||
.arg(position)
|
||||
.arg(targetzone->getName())
|
||||
.arg(x)
|
||||
.arg(y)
|
||||
.arg(facedown ? 1 : 0));
|
||||
*/
|
||||
player->sendProtocolItem(new Event_MoveCard(game->getGameId(), player->getPlayerId(), privateCardId, privateCardName, startzone->getName(), position, targetzone->getName(), x, y, facedown));
|
||||
|
||||
// Other players do not get to see the start and/or target position of the card if the respective
|
||||
// part of the zone is being looked at. The information is not needed anyway because in hidden zones,
|
||||
// all cards are equal.
|
||||
@@ -368,22 +364,11 @@ ResponseCode Server_ProtocolHandler::cmdMoveCard(Command_MoveCard *cmd, Server_G
|
||||
if ((targetzone->getType() == HiddenZone) && ((targetzone->getCardsBeingLookedAt() > x) || (targetzone->getCardsBeingLookedAt() == -1)))
|
||||
x = -1;
|
||||
|
||||
/* if ((startzone->getType() == Server_CardZone::PublicZone) || (targetzone->getType() == Server_CardZone::PublicZone))
|
||||
game->broadcastEvent(QString("move_card|%1|%2|%3|%4|%5|%6|%7|%8").arg(card->getId())
|
||||
.arg(publicCardName)
|
||||
.arg(startzone->getName())
|
||||
.arg(position)
|
||||
.arg(targetzone->getName())
|
||||
.arg(x)
|
||||
.arg(y)
|
||||
.arg(facedown ? 1 : 0), player);
|
||||
if ((startzone->getType() == PublicZone) || (targetzone->getType() == PublicZone))
|
||||
game->sendGameEvent(new Event_MoveCard(-1, player->getPlayerId(), card->getId(), publicCardName, startzone->getName(), position, targetzone->getName(), x, y, facedown));
|
||||
else
|
||||
game->broadcastEvent(QString("move_card|||%1|%2|%3|%4|%5|0").arg(startzone->getName())
|
||||
.arg(position)
|
||||
.arg(targetzone->getName())
|
||||
.arg(x)
|
||||
.arg(y), player);
|
||||
*/
|
||||
game->sendGameEvent(new Event_MoveCard(-1, player->getPlayerId(), -1, QString(), startzone->getName(), position, targetzone->getName(), x, y, false));
|
||||
|
||||
// If the card was moved to another zone, delete all arrows from and to the card
|
||||
if (startzone != targetzone) {
|
||||
const QList<Server_Player *> &players = game->getPlayers();
|
||||
@@ -493,7 +478,7 @@ ResponseCode Server_ProtocolHandler::cmdReadyStart(Command_ReadyStart * /*cmd*/,
|
||||
if (!player->getDeck())
|
||||
return RespContextError;
|
||||
|
||||
player->setStatus(StatusReadyStart);
|
||||
player->setReadyStart(true);
|
||||
game->sendGameEvent(new Event_ReadyStart(-1, player->getPlayerId()));
|
||||
game->startGameIfReady();
|
||||
return RespOk;
|
||||
|
||||
Reference in New Issue
Block a user