Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
23188736
Commit
23188736
authored
Dec 23, 2010
by
Max-Wilhelm Bruker
Browse files
card menu improvement, change controller support (bug #3)
parent
4f9252c6
Changes
25
Hide whitespace changes
Inline
Side-by-side
common/protocol_items.dat
View file @
23188736
...
...
@@ -21,7 +21,7 @@
2:mulligan
2:roll_die:i,sides
2:draw_cards:i,number
2:move_card:s,start_zone:i,card_id:s,target_zone:i,x:i,y:b,face_down:b,tapped
2:move_card:s,start_zone:i,card_id:
i,target_player_id:
s,target_zone:i,x:i,y:b,face_down:b,tapped
2:flip_card:s,zone:i,card_id:b,face_down
2:attach_card:s,start_zone:i,card_id:i,target_player_id:s,target_zone:i,target_card_id
2:create_token:s,zone:s,card_name:s,color:s,pt:s,annotation:b,destroy:i,x:i,y
...
...
@@ -46,7 +46,7 @@
3:game_closed
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:i,new_card_id:b,face_down
3:move_card:i,card_id:s,card_name:s,start_zone:i,position:
i,target_player_id:
s,target_zone:i,x:i,y:i,new_card_id:b,face_down
3:flip_card:s,zone:i,card_id:s,card_name:b,face_down
3:destroy_card:s,zone:i,card_id
3:attach_card:s,start_zone:i,card_id:i,target_player_id:s,target_zone:i,target_card_id
...
...
common/protocol_items.h
View file @
23188736
...
...
@@ -192,9 +192,10 @@ public:
class
Command_MoveCard
:
public
GameCommand
{
Q_OBJECT
public:
Command_MoveCard
(
int
_gameId
=
-
1
,
const
QString
&
_startZone
=
QString
(),
int
_cardId
=
-
1
,
const
QString
&
_targetZone
=
QString
(),
int
_x
=
-
1
,
int
_y
=
-
1
,
bool
_faceDown
=
false
,
bool
_tapped
=
false
);
Command_MoveCard
(
int
_gameId
=
-
1
,
const
QString
&
_startZone
=
QString
(),
int
_cardId
=
-
1
,
int
_targetPlayerId
=
-
1
,
const
QString
&
_targetZone
=
QString
(),
int
_x
=
-
1
,
int
_y
=
-
1
,
bool
_faceDown
=
false
,
bool
_tapped
=
false
);
QString
getStartZone
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"start_zone"
))
->
getData
();
};
int
getCardId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"card_id"
))
->
getData
();
};
int
getTargetPlayerId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"target_player_id"
))
->
getData
();
};
QString
getTargetZone
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"target_zone"
))
->
getData
();
};
int
getX
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"x"
))
->
getData
();
};
int
getY
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"y"
))
->
getData
();
};
...
...
@@ -432,11 +433,12 @@ public:
class
Event_MoveCard
:
public
GameEvent
{
Q_OBJECT
public:
Event_MoveCard
(
int
_playerId
=
-
1
,
int
_cardId
=
-
1
,
const
QString
&
_cardName
=
QString
(),
const
QString
&
_startZone
=
QString
(),
int
_position
=
-
1
,
const
QString
&
_targetZone
=
QString
(),
int
_x
=
-
1
,
int
_y
=
-
1
,
int
_newCardId
=
-
1
,
bool
_faceDown
=
false
);
Event_MoveCard
(
int
_playerId
=
-
1
,
int
_cardId
=
-
1
,
const
QString
&
_cardName
=
QString
(),
const
QString
&
_startZone
=
QString
(),
int
_position
=
-
1
,
int
_targetPlayerId
=
-
1
,
const
QString
&
_targetZone
=
QString
(),
int
_x
=
-
1
,
int
_y
=
-
1
,
int
_newCardId
=
-
1
,
bool
_faceDown
=
false
);
int
getCardId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"card_id"
))
->
getData
();
};
QString
getCardName
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"card_name"
))
->
getData
();
};
QString
getStartZone
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"start_zone"
))
->
getData
();
};
int
getPosition
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"position"
))
->
getData
();
};
int
getTargetPlayerId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"target_player_id"
))
->
getData
();
};
QString
getTargetZone
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"target_zone"
))
->
getData
();
};
int
getX
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"x"
))
->
getData
();
};
int
getY
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"y"
))
->
getData
();
};
...
...
common/server_player.cpp
View file @
23188736
...
...
@@ -198,10 +198,13 @@ bool Server_Player::deleteCounter(int counterId)
return
true
;
}
ResponseCode
Server_Player
::
moveCard
(
CommandContainer
*
cont
,
const
QString
&
_startZone
,
int
_cardId
,
const
QString
&
_targetZone
,
int
x
,
int
y
,
bool
faceDown
,
bool
tapped
)
ResponseCode
Server_Player
::
moveCard
(
CommandContainer
*
cont
,
const
QString
&
_startZone
,
int
_cardId
,
int
targetPlayerId
,
const
QString
&
_targetZone
,
int
x
,
int
y
,
bool
faceDown
,
bool
tapped
)
{
Server_CardZone
*
startzone
=
getZones
().
value
(
_startZone
);
Server_CardZone
*
targetzone
=
getZones
().
value
(
_targetZone
);
Server_Player
*
targetPlayer
=
game
->
getPlayers
().
value
(
targetPlayerId
);
if
(
!
targetPlayer
)
return
RespNameNotFound
;
Server_CardZone
*
targetzone
=
targetPlayer
->
getZones
().
value
(
_targetZone
);
if
((
!
startzone
)
||
(
!
targetzone
))
return
RespNameNotFound
;
...
...
@@ -210,12 +213,10 @@ ResponseCode Server_Player::moveCard(CommandContainer *cont, const QString &_sta
ResponseCode
Server_Player
::
moveCard
(
CommandContainer
*
cont
,
Server_CardZone
*
startzone
,
int
_cardId
,
Server_CardZone
*
targetzone
,
int
x
,
int
y
,
bool
faceDown
,
bool
tapped
)
{
// Collision detection
/* if (targetzone->hasCoords())
for (int i = 0; i < targetzone->cards.size(); ++i)
if ((targetzone->cards[i]->getX() == x) && (targetzone->cards[i]->getY() == y) && (x != -1))
return RespContextError;
*/
// Disallow controller change between different zones.
if
((
startzone
->
getName
()
!=
targetzone
->
getName
())
&&
(
startzone
->
getPlayer
()
!=
targetzone
->
getPlayer
()))
return
RespContextError
;
int
position
=
-
1
;
Server_Card
*
card
=
startzone
->
getCard
(
_cardId
,
false
,
&
position
);
if
(
!
card
)
...
...
@@ -226,15 +227,19 @@ ResponseCode Server_Player::moveCard(CommandContainer *cont, Server_CardZone *st
int
oldX
=
card
->
getX
(),
oldY
=
card
->
getY
();
if
(
startzone
!=
targetzone
)
{
// Attachment relationships can be retained when moving a card onto the opponent's table
if
(
startzone
->
getName
()
!=
targetzone
->
getName
())
{
// Delete all attachment relationships
if
(
card
->
getParentCard
())
card
->
setParentCard
(
0
);
const
QList
<
Server_Card
*>
&
attachedCards
=
card
->
getAttachedCards
();
// Make a copy of the list because the original one gets modified during the loop
QList
<
Server_Card
*>
attachedCards
=
card
->
getAttachedCards
();
for
(
int
i
=
0
;
i
<
attachedCards
.
size
();
++
i
)
attachedCards
[
i
]
->
getZone
()
->
getPlayer
()
->
unattachCard
(
cont
,
attachedCards
[
i
]);
}
if
(
startzone
!=
targetzone
)
{
// Delete all arrows from and to the card
const
QList
<
Server_Player
*>
&
players
=
game
->
getPlayers
().
values
();
for
(
int
i
=
0
;
i
<
players
.
size
();
++
i
)
{
...
...
@@ -266,7 +271,6 @@ ResponseCode Server_Player::moveCard(CommandContainer *cont, Server_CardZone *st
card
->
resetState
();
}
else
// if (x == -1)
x
=
targetzone
->
getFreeGridColumn
(
x
,
y
,
card
->
getName
());
targetzone
->
insertCard
(
card
,
x
,
y
);
...
...
@@ -302,8 +306,8 @@ ResponseCode Server_Player::moveCard(CommandContainer *cont, Server_CardZone *st
int
privatePosition
=
-
1
;
if
(
startzone
->
getType
()
==
HiddenZone
)
privatePosition
=
position
;
cont
->
enqueueGameEventPrivate
(
new
Event_MoveCard
(
getPlayerId
(),
privateOldCardId
,
privateCardName
,
startzone
->
getName
(),
privatePosition
,
targetzone
->
getName
(),
x
,
y
,
privateNewCardId
,
faceDown
),
game
->
getGameId
());
cont
->
enqueueGameEventOmniscient
(
new
Event_MoveCard
(
getPlayerId
(),
privateOldCardId
,
privateCardName
,
startzone
->
getName
(),
privatePosition
,
targetzone
->
getName
(),
x
,
y
,
privateNewCardId
,
faceDown
),
game
->
getGameId
());
cont
->
enqueueGameEventPrivate
(
new
Event_MoveCard
(
getPlayerId
(),
privateOldCardId
,
privateCardName
,
startzone
->
getName
(),
privatePosition
,
targetzone
->
getPlayer
()
->
getPlayerId
(),
targetzone
->
getName
(),
x
,
y
,
privateNewCardId
,
faceDown
),
game
->
getGameId
());
cont
->
enqueueGameEventOmniscient
(
new
Event_MoveCard
(
getPlayerId
(),
privateOldCardId
,
privateCardName
,
startzone
->
getName
(),
privatePosition
,
targetzone
->
getPlayer
()
->
getPlayerId
(),
targetzone
->
getName
(),
x
,
y
,
privateNewCardId
,
faceDown
),
game
->
getGameId
());
// 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,
...
...
@@ -317,9 +321,9 @@ ResponseCode Server_Player::moveCard(CommandContainer *cont, Server_CardZone *st
x
=
-
1
;
if
((
startzone
->
getType
()
==
PublicZone
)
||
(
targetzone
->
getType
()
==
PublicZone
))
cont
->
enqueueGameEventPublic
(
new
Event_MoveCard
(
getPlayerId
(),
oldCardId
,
publicCardName
,
startzone
->
getName
(),
position
,
targetzone
->
getName
(),
x
,
y
,
card
->
getId
(),
faceDown
),
game
->
getGameId
());
cont
->
enqueueGameEventPublic
(
new
Event_MoveCard
(
getPlayerId
(),
oldCardId
,
publicCardName
,
startzone
->
getName
(),
position
,
targetzone
->
getPlayer
()
->
getPlayerId
(),
targetzone
->
getName
(),
x
,
y
,
card
->
getId
(),
faceDown
),
game
->
getGameId
());
else
cont
->
enqueueGameEventPublic
(
new
Event_MoveCard
(
getPlayerId
(),
-
1
,
QString
(),
startzone
->
getName
(),
position
,
targetzone
->
getName
(),
x
,
y
,
-
1
,
false
),
game
->
getGameId
());
cont
->
enqueueGameEventPublic
(
new
Event_MoveCard
(
getPlayerId
(),
-
1
,
QString
(),
startzone
->
getName
(),
position
,
targetzone
->
getPlayer
()
->
getPlayerId
(),
targetzone
->
getName
(),
x
,
y
,
-
1
,
false
),
game
->
getGameId
());
if
(
tapped
)
setCardAttrHelper
(
cont
,
targetzone
->
getName
(),
card
->
getId
(),
"tapped"
,
"1"
);
...
...
@@ -338,7 +342,7 @@ void Server_Player::unattachCard(CommandContainer *cont, Server_Card *card)
cont
->
enqueueGameEventPrivate
(
new
Event_AttachCard
(
getPlayerId
(),
zone
->
getName
(),
card
->
getId
(),
-
1
,
QString
(),
-
1
),
game
->
getGameId
());
cont
->
enqueueGameEventPublic
(
new
Event_AttachCard
(
getPlayerId
(),
zone
->
getName
(),
card
->
getId
(),
-
1
,
QString
(),
-
1
),
game
->
getGameId
());
moveCard
(
cont
,
zone
->
getName
()
,
card
->
getId
(),
zone
->
getName
()
,
-
1
,
card
->
getY
(),
card
->
getFaceDown
(),
card
->
getTapped
());
moveCard
(
cont
,
zone
,
card
->
getId
(),
zone
,
-
1
,
card
->
getY
(),
card
->
getFaceDown
(),
card
->
getTapped
());
}
ResponseCode
Server_Player
::
setCardAttrHelper
(
CommandContainer
*
cont
,
const
QString
&
zoneName
,
int
cardId
,
const
QString
&
attrName
,
const
QString
&
attrValue
)
...
...
common/server_player.h
View file @
23188736
...
...
@@ -74,7 +74,7 @@ public:
void
clearZones
();
void
setupZones
();
ResponseCode
moveCard
(
CommandContainer
*
cont
,
const
QString
&
_startZone
,
int
_cardId
,
const
QString
&
_targetZone
,
int
_x
,
int
_y
,
bool
_faceDown
,
bool
_tapped
);
ResponseCode
moveCard
(
CommandContainer
*
cont
,
const
QString
&
_startZone
,
int
_cardId
,
int
_targetPlayer
,
const
QString
&
_targetZone
,
int
_x
,
int
_y
,
bool
_faceDown
,
bool
_tapped
);
ResponseCode
moveCard
(
CommandContainer
*
cont
,
Server_CardZone
*
startzone
,
int
_cardId
,
Server_CardZone
*
targetzone
,
int
x
,
int
y
,
bool
faceDown
,
bool
tapped
);
void
unattachCard
(
CommandContainer
*
cont
,
Server_Card
*
card
);
ResponseCode
setCardAttrHelper
(
CommandContainer
*
cont
,
const
QString
&
zone
,
int
cardId
,
const
QString
&
attrName
,
const
QString
&
attrValue
);
...
...
common/server_protocolhandler.cpp
View file @
23188736
...
...
@@ -509,10 +509,11 @@ ResponseCode Server_ProtocolHandler::cmdMulligan(Command_Mulligan * /*cmd*/, Com
return
RespContextError
;
Server_CardZone
*
hand
=
player
->
getZones
().
value
(
"hand"
);
Server_CardZone
*
deck
=
player
->
getZones
().
value
(
"deck"
);
while
(
!
hand
->
cards
.
isEmpty
())
player
->
moveCard
(
cont
,
"
hand
"
,
hand
->
cards
.
first
()
->
getId
(),
"
deck
"
,
0
,
0
,
false
,
false
);
player
->
moveCard
(
cont
,
hand
,
hand
->
cards
.
first
()
->
getId
(),
deck
,
0
,
0
,
false
,
false
);
player
->
getZones
().
value
(
"
deck
"
)
->
shuffle
();
deck
->
shuffle
();
cont
->
enqueueGameEventPrivate
(
new
Event_Shuffle
(
player
->
getPlayerId
()),
game
->
getGameId
());
cont
->
enqueueGameEventPublic
(
new
Event_Shuffle
(
player
->
getPlayerId
()),
game
->
getGameId
());
...
...
@@ -574,7 +575,7 @@ ResponseCode Server_ProtocolHandler::cmdMoveCard(Command_MoveCard *cmd, CommandC
if
(
!
game
->
getGameStarted
())
return
RespGameNotStarted
;
return
player
->
moveCard
(
cont
,
cmd
->
getStartZone
(),
cmd
->
getCardId
(),
cmd
->
getTargetZone
(),
cmd
->
getX
(),
cmd
->
getY
(),
cmd
->
getFaceDown
(),
cmd
->
getTapped
());
return
player
->
moveCard
(
cont
,
cmd
->
getStartZone
(),
cmd
->
getCardId
(),
cmd
->
getTargetPlayerId
(),
cmd
->
getTargetZone
(),
cmd
->
getX
(),
cmd
->
getY
(),
cmd
->
getFaceDown
(),
cmd
->
getTapped
());
}
ResponseCode
Server_ProtocolHandler
::
cmdFlipCard
(
Command_FlipCard
*
cmd
,
CommandContainer
*
cont
,
Server_Game
*
game
,
Server_Player
*
player
)
...
...
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment