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
9c527fb5
Commit
9c527fb5
authored
Jan 15, 2011
by
Max-Wilhelm Bruker
Browse files
Click to hide revealed cards; MultiMove function
parent
f07bb38e
Changes
28
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/carddragitem.cpp
View file @
9c527fb5
...
...
@@ -72,17 +72,18 @@ void CardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
QPointF
sp
=
pos
();
sc
->
removeItem
(
this
);
QList
<
CardDragItem
*>
dragItemList
;
CardZone
*
startZone
=
static_cast
<
CardItem
*>
(
item
)
->
getZone
();
if
(
currentZone
&&
!
(
static_cast
<
CardItem
*>
(
item
)
->
getAttachedTo
()
&&
(
startZone
==
currentZone
)))
{
if
(
!
occupied
)
currentZone
->
handleDropEvent
(
this
,
startZone
,
(
sp
-
currentZone
->
scenePos
()).
toPoint
(),
faceDown
);
dragItemList
.
append
(
this
);
for
(
int
i
=
0
;
i
<
childDrags
.
size
();
i
++
)
{
CardDragItem
*
c
=
static_cast
<
CardDragItem
*>
(
childDrags
[
i
]);
if
(
!
(
static_cast
<
CardItem
*>
(
c
->
item
)
->
getAttachedTo
()
&&
(
startZone
==
currentZone
))
&&
!
c
->
occupied
)
currentZone
->
handleDropEvent
(
static_cast
<
CardDragItem
*>
(
c
),
startZone
,
(
sp
-
currentZone
->
scenePos
()
+
c
->
getHotSpot
()).
toPoint
(),
faceDown
);
dragItemList
.
append
(
c
);
sc
->
removeItem
(
c
);
}
}
currentZone
->
handleDropEvent
(
dragItemList
,
startZone
,
(
sp
-
currentZone
->
scenePos
()).
toPoint
(),
faceDown
);
event
->
accept
();
}
cockatrice/src/carditem.cpp
View file @
9c527fb5
...
...
@@ -16,8 +16,8 @@
#include
"settingscache.h"
#include
"tab_game.h"
CardItem
::
CardItem
(
Player
*
_owner
,
const
QString
&
_name
,
int
_cardid
,
QGraphicsItem
*
parent
)
:
AbstractCardItem
(
_name
,
_owner
,
parent
),
zone
(
0
),
id
(
_cardid
),
attacking
(
false
),
facedown
(
false
),
destroyOnZoneChange
(
false
),
doesntUntap
(
false
),
dragItem
(
0
),
attachedTo
(
0
)
CardItem
::
CardItem
(
Player
*
_owner
,
const
QString
&
_name
,
int
_cardid
,
bool
_revealedCard
,
QGraphicsItem
*
parent
)
:
AbstractCardItem
(
_name
,
_owner
,
parent
),
zone
(
0
),
id
(
_cardid
),
revealedCard
(
_revealedCard
),
attacking
(
false
),
facedown
(
false
),
destroyOnZoneChange
(
false
),
doesntUntap
(
false
),
dragItem
(
0
),
attachedTo
(
0
)
{
owner
->
addCard
(
this
);
...
...
@@ -59,6 +59,8 @@ CardItem::CardItem(Player *_owner, const QString &_name, int _cardid, QGraphicsI
aPlay
=
new
QAction
(
this
);
connect
(
aPlay
,
SIGNAL
(
triggered
()),
this
,
SLOT
(
actPlay
()));
aHide
=
new
QAction
(
this
);
connect
(
aHide
,
SIGNAL
(
triggered
()),
this
,
SLOT
(
actHide
()));
for
(
int
i
=
0
;
i
<
3
;
++
i
)
{
QAction
*
tempAddCounter
=
new
QAction
(
this
);
...
...
@@ -128,7 +130,9 @@ void CardItem::updateCardMenu()
{
cardMenu
->
clear
();
if
(
owner
->
getLocal
())
{
if
(
revealedCard
)
cardMenu
->
addAction
(
aHide
);
else
if
(
owner
->
getLocal
())
{
if
(
zone
)
{
if
(
zone
->
getName
()
==
"table"
)
{
cardMenu
->
addAction
(
aTap
);
...
...
@@ -169,6 +173,7 @@ void CardItem::updateCardMenu()
void
CardItem
::
retranslateUi
()
{
aPlay
->
setText
(
tr
(
"&Play"
));
aHide
->
setText
(
tr
(
"&Hide"
));
aTap
->
setText
(
tr
(
"&Tap"
));
aUntap
->
setText
(
tr
(
"&Untap"
));
...
...
@@ -426,7 +431,10 @@ void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
cardMenu
->
exec
(
event
->
screenPos
());
}
else
if
((
event
->
button
()
==
Qt
::
LeftButton
)
&&
!
settingsCache
->
getDoubleClickToPlay
())
{
setCursor
(
Qt
::
OpenHandCursor
);
playCard
(
event
->
modifiers
().
testFlag
(
Qt
::
ShiftModifier
));
if
(
revealedCard
)
actHide
();
else
playCard
(
event
->
modifiers
().
testFlag
(
Qt
::
ShiftModifier
));
}
AbstractCardItem
::
mouseReleaseEvent
(
event
);
...
...
@@ -434,8 +442,12 @@ void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
void
CardItem
::
mouseDoubleClickEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
if
(
settingsCache
->
getDoubleClickToPlay
())
playCard
(
event
->
modifiers
().
testFlag
(
Qt
::
ShiftModifier
));
if
(
settingsCache
->
getDoubleClickToPlay
())
{
if
(
revealedCard
)
actHide
();
else
playCard
(
event
->
modifiers
().
testFlag
(
Qt
::
ShiftModifier
));
}
event
->
accept
();
}
...
...
@@ -483,4 +495,9 @@ void CardItem::actCardCounterTrigger()
void
CardItem
::
actPlay
()
{
playCard
(
false
);
}
void
CardItem
::
actHide
()
{
zone
->
removeCard
(
this
);
}
\ No newline at end of file
cockatrice/src/carditem.h
View file @
9c527fb5
...
...
@@ -17,6 +17,7 @@ class CardItem : public AbstractCardItem {
private:
CardZone
*
zone
;
int
id
;
bool
revealedCard
;
bool
attacking
;
bool
facedown
;
QMap
<
int
,
int
>
counters
;
...
...
@@ -31,6 +32,7 @@ private:
QList
<
QAction
*>
aAddCounter
,
aSetCounter
,
aRemoveCounter
;
QAction
*
aPlay
,
*
aHide
,
*
aTap
,
*
aUntap
,
*
aDoesntUntap
,
*
aAttach
,
*
aUnattach
,
*
aSetPT
,
*
aSetAnnotation
,
*
aFlip
,
*
aClone
,
*
aMoveToTopLibrary
,
*
aMoveToBottomLibrary
,
*
aMoveToGraveyard
,
*
aMoveToExile
;
QMenu
*
cardMenu
,
*
moveMenu
;
...
...
@@ -45,12 +47,13 @@ private slots:
void
actSetPT
();
void
actSetAnnotation
();
void
actPlay
();
void
actHide
();
public
slots
:
void
deleteLater
();
public:
enum
{
Type
=
typeCard
};
int
type
()
const
{
return
Type
;
}
CardItem
(
Player
*
_owner
,
const
QString
&
_name
=
QString
(),
int
_cardid
=
-
1
,
QGraphicsItem
*
parent
=
0
);
CardItem
(
Player
*
_owner
,
const
QString
&
_name
=
QString
(),
int
_cardid
=
-
1
,
bool
revealedCard
=
false
,
QGraphicsItem
*
parent
=
0
);
~
CardItem
();
void
retranslateUi
();
CardZone
*
getZone
()
const
{
return
zone
;
}
...
...
cockatrice/src/cardzone.cpp
View file @
9c527fb5
...
...
@@ -157,16 +157,25 @@ CardItem *CardZone::takeCard(int position, int cardId, bool /*canResize*/)
return
c
;
}
void
CardZone
::
removeCard
(
CardItem
*
card
)
{
cards
.
removeAt
(
cards
.
indexOf
(
card
));
reorganizeCards
();
emit
cardCountChanged
();
player
->
deleteCard
(
card
);
}
void
CardZone
::
moveAllToZone
()
{
QList
<
QVariant
>
data
=
static_cast
<
QAction
*>
(
sender
())
->
data
().
toList
();
QString
targetZone
=
data
[
0
].
toString
();
int
targetX
=
data
[
1
].
toInt
();
// Cards need to be moved in reverse order so that the other
// cards' list index doesn't change
for
(
int
i
=
cards
.
size
()
-
1
;
i
>=
0
;
i
--
)
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
getName
(),
cards
.
at
(
i
)
->
getId
(),
player
->
getId
(),
targetZone
,
targetX
));
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
cards
[
i
]
->
getId
()));
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
getName
(),
idList
,
player
->
getId
(),
targetZone
,
targetX
));
}
QPointF
CardZone
::
closestGridPoint
(
const
QPointF
&
point
)
...
...
cockatrice/src/cardzone.h
View file @
9c527fb5
...
...
@@ -35,7 +35,7 @@ public slots:
public:
enum
{
Type
=
typeZone
};
int
type
()
const
{
return
Type
;
}
virtual
void
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
)
=
0
;
virtual
void
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
)
=
0
;
CardZone
(
Player
*
_player
,
const
QString
&
_name
,
bool
_hasCardAttr
,
bool
_isShufflable
,
bool
_contentsKnown
,
QGraphicsItem
*
parent
=
0
,
bool
isView
=
false
);
~
CardZone
();
void
retranslateUi
();
...
...
@@ -54,6 +54,7 @@ public:
CardItem
*
getCard
(
int
cardId
,
const
QString
&
cardName
);
// takeCard() finds a card by position and removes it from the zone and from all of its views.
virtual
CardItem
*
takeCard
(
int
position
,
int
cardId
,
bool
canResize
=
true
);
void
removeCard
(
CardItem
*
card
);
ZoneViewZone
*
getView
()
const
{
return
view
;
}
void
setView
(
ZoneViewZone
*
_view
)
{
view
=
_view
;
}
virtual
void
reorganizeCards
()
=
0
;
...
...
cockatrice/src/handzone.cpp
View file @
9c527fb5
...
...
@@ -37,9 +37,13 @@ void HandZone::addCardImpl(CardItem *card, int x, int /*y*/)
card
->
update
();
}
void
HandZone
::
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
void
HandZone
::
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
{
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
dragItem
->
getId
(),
player
->
getId
(),
getName
(),
cards
.
size
(),
-
1
,
false
));
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
dragItems
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
dragItems
[
i
]
->
getId
()));
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
idList
,
player
->
getId
(),
getName
(),
cards
.
size
(),
-
1
,
false
));
}
QRectF
HandZone
::
boundingRect
()
const
...
...
cockatrice/src/handzone.h
View file @
9c527fb5
...
...
@@ -14,7 +14,7 @@ public slots:
void
updateOrientation
();
public:
HandZone
(
Player
*
_p
,
bool
_contentsKnown
,
int
_zoneHeight
,
QGraphicsItem
*
parent
=
0
);
void
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
void
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
reorganizeCards
();
...
...
cockatrice/src/pilezone.cpp
View file @
9c527fb5
...
...
@@ -48,9 +48,13 @@ void PileZone::addCardImpl(CardItem *card, int x, int /*y*/)
card
->
setParentItem
(
this
);
}
void
PileZone
::
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
void
PileZone
::
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
{
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
dragItem
->
getId
(),
player
->
getId
(),
getName
(),
0
,
0
,
false
));
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
dragItems
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
dragItems
[
i
]
->
getId
()));
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
idList
,
player
->
getId
(),
getName
(),
0
,
0
,
false
));
}
void
PileZone
::
reorganizeCards
()
...
...
cockatrice/src/pilezone.h
View file @
9c527fb5
...
...
@@ -9,7 +9,7 @@ public:
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
reorganizeCards
();
void
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
void
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
protected:
void
mousePressEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
);
...
...
cockatrice/src/player.cpp
View file @
9c527fb5
...
...
@@ -563,9 +563,10 @@ void Player::actMoveTopCardsToGrave()
const
int
maxCards
=
zones
.
value
(
"deck"
)
->
getCards
().
size
();
if
(
number
>
maxCards
)
number
=
maxCards
;
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
number
;
++
i
)
comman
dList
.
append
(
new
C
ommand_MoveCard
(
-
1
,
"deck"
,
0
,
getId
(),
"grave"
,
0
,
0
,
false
));
sendCommand
Container
(
new
Command
Container
(
commandList
));
i
dList
.
append
(
new
C
ardId
(
i
));
send
Game
Command
(
new
Command
_MoveCard
(
-
1
,
"deck"
,
idList
,
getId
(),
"grave"
,
0
,
0
,
false
));
}
void
Player
::
actMoveTopCardsToExile
()
...
...
@@ -578,14 +579,15 @@ void Player::actMoveTopCardsToExile()
const
int
maxCards
=
zones
.
value
(
"deck"
)
->
getCards
().
size
();
if
(
number
>
maxCards
)
number
=
maxCards
;
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
number
;
++
i
)
comman
dList
.
append
(
new
C
ommand_MoveCard
(
-
1
,
"deck"
,
0
,
getId
(),
"rfg"
,
0
,
0
,
false
));
sendCommand
Container
(
new
Command
Container
(
commandList
));
i
dList
.
append
(
new
C
ardId
(
i
));
send
Game
Command
(
new
Command
_MoveCard
(
-
1
,
"deck"
,
idList
,
getId
(),
"rfg"
,
0
,
0
,
false
));
}
void
Player
::
actMoveTopCardToBottom
()
{
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
"deck"
,
0
,
getId
(),
"deck"
,
-
1
,
0
,
false
));
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
"deck"
,
QList
<
CardId
*>
()
<<
new
CardId
(
0
)
,
getId
(),
"deck"
,
-
1
,
0
,
false
));
}
void
Player
::
actUntapAll
()
...
...
@@ -1088,10 +1090,10 @@ void Player::playCard(CardItem *c, bool faceDown, bool tapped)
{
CardInfo
*
ci
=
c
->
getInfo
();
if
(
ci
->
getTableRow
()
==
3
)
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
c
->
getZone
()
->
getName
(),
c
->
getId
(),
getId
(),
"stack"
,
0
,
0
,
false
));
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
c
->
getZone
()
->
getName
(),
QList
<
CardId
*>
()
<<
new
CardId
(
c
->
getId
()
)
,
getId
(),
"stack"
,
0
,
0
,
false
));
else
{
QPoint
gridPoint
=
QPoint
(
-
1
,
2
-
ci
->
getTableRow
());
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
c
->
getZone
()
->
getName
(),
c
->
getId
(),
getId
(),
"table"
,
gridPoint
.
x
(),
gridPoint
.
y
(),
faceDown
,
tapped
));
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
c
->
getZone
()
->
getName
(),
QList
<
CardId
*>
()
<<
new
CardId
(
c
->
getId
()
)
,
getId
(),
"table"
,
gridPoint
.
x
(),
gridPoint
.
y
(),
faceDown
,
tapped
));
}
}
...
...
@@ -1276,42 +1278,54 @@ bool Player::clearCardsToDelete()
void
Player
::
cardMenuAction
(
QAction
*
a
)
{
QList
<
QGraphicsItem
*>
sel
=
scene
()
->
selectedItems
();
QList
<
CardItem
*>
cardList
;
while
(
!
sel
.
isEmpty
())
cardList
.
append
(
qgraphicsitem_cast
<
CardItem
*>
(
sel
.
takeFirst
()));
QList
<
Command
*>
commandList
;
while
(
!
sel
.
isEmpty
())
{
unsigned
int
i
=
(
unsigned
int
)
(((
double
)
sel
.
size
())
*
qrand
()
/
(
RAND_MAX
+
1.0
));
CardItem
*
card
=
qgraphicsitem_cast
<
CardItem
*>
(
sel
.
takeAt
(
i
));
switch
(
a
->
data
().
toInt
())
{
case
0
:
if
(
!
card
->
getTapped
())
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
"tapped"
,
"1"
));
break
;
case
1
:
if
(
card
->
getTapped
())
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
"tapped"
,
"0"
));
break
;
case
2
:
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
"doesnt_untap"
,
QString
::
number
(
!
card
->
getDoesntUntap
())));
break
;
case
3
:
{
QString
zone
=
card
->
getZone
()
->
getName
();
commandList
.
append
(
new
Command_FlipCard
(
-
1
,
zone
,
card
->
getId
(),
!
card
->
getFaceDown
()));
break
;
if
(
a
->
data
().
toInt
()
<=
4
)
for
(
int
i
=
0
;
i
<
cardList
.
size
();
++
i
)
{
CardItem
*
card
=
cardList
[
i
];
switch
(
a
->
data
().
toInt
())
{
case
0
:
if
(
!
card
->
getTapped
())
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
"tapped"
,
"1"
));
break
;
case
1
:
if
(
card
->
getTapped
())
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
"tapped"
,
"0"
));
break
;
case
2
:
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
"doesnt_untap"
,
QString
::
number
(
!
card
->
getDoesntUntap
())));
break
;
case
3
:
{
QString
zone
=
card
->
getZone
()
->
getName
();
commandList
.
append
(
new
Command_FlipCard
(
-
1
,
zone
,
card
->
getId
(),
!
card
->
getFaceDown
()));
break
;
}
case
4
:
commandList
.
append
(
new
Command_CreateToken
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getName
(),
card
->
getColor
(),
card
->
getPT
(),
card
->
getAnnotation
(),
true
,
-
1
,
card
->
getGridPoint
().
y
()));
break
;
}
case
4
:
commandList
.
append
(
new
Command_CreateToken
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getName
(),
card
->
getColor
(),
card
->
getPT
(),
card
->
getAnnotation
(),
true
,
-
1
,
card
->
getGridPoint
().
y
()));
break
;
}
else
{
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
cardList
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
cardList
[
i
]
->
getId
()));
QString
startZone
=
cardList
[
0
]
->
getZone
()
->
getName
();
switch
(
a
->
data
().
toInt
())
{
case
5
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
()
,
getId
(),
"deck"
,
0
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
startZone
,
idList
,
getId
(),
"deck"
,
0
,
0
,
false
));
break
;
case
6
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
()
,
getId
(),
"deck"
,
-
1
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
startZone
,
idList
,
getId
(),
"deck"
,
-
1
,
0
,
false
));
break
;
case
7
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
()
,
getId
(),
"grave"
,
0
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
startZone
,
idList
,
getId
(),
"grave"
,
0
,
0
,
false
));
break
;
case
8
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
()
,
getId
(),
"rfg"
,
0
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
startZone
,
idList
,
getId
(),
"rfg"
,
0
,
0
,
false
));
break
;
default:
;
}
...
...
cockatrice/src/stackzone.cpp
View file @
9c527fb5
...
...
@@ -52,11 +52,16 @@ void StackZone::paint(QPainter *painter, const QStyleOptionGraphicsItem */*optio
painter
->
fillRect
(
boundingRect
(),
QBrush
(
bgPixmap
));
}
void
StackZone
::
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
void
StackZone
::
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
{
if
(
startZone
==
this
)
return
;
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
dragItem
->
getId
(),
player
->
getId
(),
getName
(),
0
,
0
,
false
));
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
dragItems
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
dragItems
[
i
]
->
getId
()));
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
idList
,
player
->
getId
(),
getName
(),
0
,
0
,
false
));
}
void
StackZone
::
reorganizeCards
()
...
...
cockatrice/src/stackzone.h
View file @
9c527fb5
...
...
@@ -12,7 +12,7 @@ private slots:
void
updateBgPixmap
();
public:
StackZone
(
Player
*
_p
,
int
_zoneHeight
,
QGraphicsItem
*
parent
=
0
);
void
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
void
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
reorganizeCards
();
...
...
cockatrice/src/tablezone.cpp
View file @
9c527fb5
...
...
@@ -85,14 +85,18 @@ void TableZone::addCardImpl(CardItem *card, int _x, int _y)
card
->
update
();
}
void
TableZone
::
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
)
void
TableZone
::
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
)
{
handleDropEventByGrid
(
dragItem
,
startZone
,
mapToGrid
(
dropPoint
),
faceDown
);
handleDropEventByGrid
(
dragItem
s
,
startZone
,
mapToGrid
(
dropPoint
),
faceDown
);
}
void
TableZone
::
handleDropEventByGrid
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
gridPoint
,
bool
faceDown
,
bool
tapped
)
void
TableZone
::
handleDropEventByGrid
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
gridPoint
,
bool
faceDown
,
bool
tapped
)
{
static_cast
<
CardItem
*>
(
dragItem
->
getItem
())
->
getZone
()
->
getPlayer
()
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
dragItem
->
getId
(),
player
->
getId
(),
getName
(),
gridPoint
.
x
(),
gridPoint
.
y
(),
faceDown
,
tapped
));
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
dragItems
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
dragItems
[
i
]
->
getId
()));
startZone
->
getPlayer
()
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
idList
,
player
->
getId
(),
getName
(),
gridPoint
.
x
(),
gridPoint
.
y
(),
faceDown
,
tapped
));
}
void
TableZone
::
reorganizeCards
()
...
...
cockatrice/src/tablezone.h
View file @
9c527fb5
...
...
@@ -29,8 +29,8 @@ public:
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
toggleTapped
();
void
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
=
false
);
void
handleDropEventByGrid
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
gridPoint
,
bool
faceDown
=
false
,
bool
tapped
=
false
);
void
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
=
false
);
void
handleDropEventByGrid
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
gridPoint
,
bool
faceDown
=
false
,
bool
tapped
=
false
);
CardItem
*
getCardFromGrid
(
const
QPoint
&
gridPoint
)
const
;
CardItem
*
getCardFromCoords
(
const
QPointF
&
point
)
const
;
QPointF
mapFromGrid
(
QPoint
gridPoint
)
const
;
...
...
cockatrice/src/zoneviewzone.cpp
View file @
9c527fb5
...
...
@@ -33,7 +33,7 @@ void ZoneViewZone::initializeCards(const QList<ServerInfo_Card *> &cardList)
{
if
(
!
cardList
.
isEmpty
())
{
for
(
int
i
=
0
;
i
<
cardList
.
size
();
++
i
)
addCard
(
new
CardItem
(
player
,
cardList
[
i
]
->
getName
(),
cardList
[
i
]
->
getId
(),
this
),
false
,
i
);
addCard
(
new
CardItem
(
player
,
cardList
[
i
]
->
getName
(),
cardList
[
i
]
->
getId
(),
revealZone
,
this
),
false
,
i
);
reorganizeCards
();
}
else
if
(
!
origZone
->
contentsKnown
())
{
Command_DumpZone
*
command
=
new
Command_DumpZone
(
-
1
,
player
->
getId
(),
name
,
numberCards
);
...
...
@@ -44,7 +44,7 @@ void ZoneViewZone::initializeCards(const QList<ServerInfo_Card *> &cardList)
int
number
=
numberCards
==
-
1
?
c
.
size
()
:
(
numberCards
<
c
.
size
()
?
numberCards
:
c
.
size
());
for
(
int
i
=
0
;
i
<
number
;
i
++
)
{
CardItem
*
card
=
c
.
at
(
i
);
addCard
(
new
CardItem
(
player
,
card
->
getName
(),
card
->
getId
(),
this
),
false
,
i
);
addCard
(
new
CardItem
(
player
,
card
->
getName
(),
card
->
getId
(),
revealZone
,
this
),
false
,
i
);
}
reorganizeCards
();
}
...
...
@@ -58,7 +58,7 @@ void ZoneViewZone::zoneDumpReceived(ProtocolResponse *r)
const
QList
<
ServerInfo_Card
*>
&
respCardList
=
resp
->
getZone
()
->
getCardList
();
for
(
int
i
=
0
;
i
<
respCardList
.
size
();
i
++
)
{
CardItem
*
card
=
new
CardItem
(
player
,
respCardList
[
i
]
->
getName
(),
respCardList
[
i
]
->
getId
(),
this
);
CardItem
*
card
=
new
CardItem
(
player
,
respCardList
[
i
]
->
getName
(),
respCardList
[
i
]
->
getId
(),
revealZone
,
this
);
addCard
(
card
,
false
,
i
);
}
...
...
@@ -87,7 +87,6 @@ void ZoneViewZone::reorganizeCards()
cols
=
2
;
qDebug
()
<<
"reorganizeCards: rows="
<<
rows
<<
"cols="
<<
cols
;
qDebug
()
<<
"SORT BY NAME:"
<<
sortByName
<<
"SORT BY TYPE:"
<<
sortByType
;
CardList
cardsToDisplay
(
cards
);
if
(
sortByName
||
sortByType
)
...
...
@@ -125,9 +124,13 @@ void ZoneViewZone::addCardImpl(CardItem *card, int x, int /*y*/)
card
->
update
();
}
void
ZoneViewZone
::
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
void
ZoneViewZone
::
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
/*dropPoint*/
,
bool
/*faceDown*/
)
{
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
dragItem
->
getId
(),
player
->
getId
(),
getName
(),
0
,
0
,
false
));
QList
<
CardId
*>
idList
;
for
(
int
i
=
0
;
i
<
dragItems
.
size
();
++
i
)
idList
.
append
(
new
CardId
(
dragItems
[
i
]
->
getId
()));
player
->
sendGameCommand
(
new
Command_MoveCard
(
-
1
,
startZone
->
getName
(),
idList
,
player
->
getId
(),
getName
(),
0
,
0
,
false
));
}
void
ZoneViewZone
::
removeCard
(
int
position
)
...
...
cockatrice/src/zoneviewzone.h
View file @
9c527fb5
...
...
@@ -13,7 +13,7 @@ class ZoneViewZone : public SelectZone, public QGraphicsLayoutItem {
private:
QRectF
bRect
,
optimumRect
;
int
minRows
,
numberCards
;
void
handleDropEvent
(
CardDragItem
*
dragItem
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
void
handleDropEvent
(
const
QList
<
CardDragItem
*
>
&
dragItem
s
,
CardZone
*
startZone
,
const
QPoint
&
dropPoint
,
bool
faceDown
);
CardZone
*
origZone
;
bool
revealZone
;
bool
sortByName
,
sortByType
;
...
...
common/protocol.cpp
View file @
9c527fb5
...
...
@@ -27,6 +27,7 @@ void ProtocolItem::initializeHash()
registerSerializableItem
(
"player_ping"
,
ServerInfo_PlayerPing
::
newItem
);
registerSerializableItem
(
"file"
,
DeckList_File
::
newItem
);
registerSerializableItem
(
"directory"
,
DeckList_Directory
::
newItem
);
registerSerializableItem
(
"card_id"
,
CardId
::
newItem
);
registerSerializableItem
(
"containercmd"
,
CommandContainer
::
newItem
);
registerSerializableItem
(
"containergame_event"
,
GameEventContainer
::
newItem
);
...
...
@@ -34,6 +35,7 @@ void ProtocolItem::initializeHash()
registerSerializableItem
(
"cmddeck_upload"
,
Command_DeckUpload
::
newItem
);
registerSerializableItem
(
"cmddeck_select"
,
Command_DeckSelect
::
newItem
);
registerSerializableItem
(
"cmdset_sideboard_plan"
,
Command_SetSideboardPlan
::
newItem
);
registerSerializableItem
(
"cmdmove_card"
,
Command_MoveCard
::
newItem
);
registerSerializableItem
(
"resp"
,
ProtocolResponse
::
newItem
);
ProtocolResponse
::
initializeHash
();
...
...
@@ -198,6 +200,21 @@ QList<MoveCardToZone *> Command_SetSideboardPlan::getMoveList() const
return
typecastItemList
<
MoveCardToZone
*>
();
}
Command_MoveCard
::
Command_MoveCard
(
int
_gameId
,
const
QString
&
_startZone
,
const
QList
<
CardId
*>
&
_cardIds
,
int
_targetPlayerId
,
const
QString
&
_targetZone
,
int
_x
,
int
_y
,
bool
_faceDown
,
bool
_tapped
)
:
GameCommand
(
"move_card"
,
_gameId
)
{
insertItem
(
new
SerializableItem_String
(
"start_zone"
,
_startZone
));
insertItem
(
new
SerializableItem_Int
(
"target_player_id"
,
_targetPlayerId
));
insertItem
(
new
SerializableItem_String
(
"target_zone"
,
_targetZone
));
insertItem
(
new
SerializableItem_Int
(
"x"
,
_x
));
insertItem
(
new
SerializableItem_Int
(
"y"
,
_y
));
insertItem
(
new
SerializableItem_Bool
(
"face_down"
,
_faceDown
));
insertItem
(
new
SerializableItem_Bool
(
"tapped"
,
_tapped
));
for
(
int
i
=
0
;
i
<
_cardIds
.
size
();
++
i
)
itemList
.
append
(
_cardIds
[
i
]);
}
QHash
<
QString
,
ResponseCode
>
ProtocolResponse
::
responseHash
;
ProtocolResponse
::
ProtocolResponse
(
int
_cmdId
,
ResponseCode
_responseCode
,
const
QString
&
_itemName
)
...
...
common/protocol.h
View file @
9c527fb5
...
...
@@ -25,6 +25,7 @@ enum ItemId {
ItemId_Command_DeckUpload
=
ItemId_Other
+
100
,
ItemId_Command_DeckSelect
=
ItemId_Other
+
101
,
ItemId_Command_SetSideboardPlan
=
ItemId_Other
+
102
,
ItemId_Command_MoveCard
=
ItemId_Other
+
103
,
ItemId_Event_ListRooms
=
ItemId_Other
+
200
,
ItemId_Event_JoinRoom
=
ItemId_Other
+
201
,
ItemId_Event_ListGames
=
ItemId_Other
+
203
,
...
...
@@ -189,6 +190,22 @@ public:
QList
<
MoveCardToZone
*>
getMoveList
()
const
;
};
class
Command_MoveCard
:
public
GameCommand
{
Q_OBJECT
public:
Command_MoveCard
(
int
_gameId
=
-
1
,
const
QString
&
_startZone
=
QString
(),
const
QList
<
CardId
*>
&
_cardIds
=
QList
<
CardId
*>
(),
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
();
}
QList
<
CardId
*>
getCardIds
()
const
{
return
typecastItemList
<
CardId
*>
();
}
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
();
}
bool
getFaceDown
()
const
{
return
static_cast
<
SerializableItem_Bool
*>
(
itemMap
.
value
(
"face_down"
))
->
getData
();
}
bool
getTapped
()
const
{
return
static_cast
<
SerializableItem_Bool
*>
(
itemMap
.
value
(
"tapped"
))
->
getData
();
}
static
SerializableItem
*
newItem
()
{
return
new
Command_MoveCard
;
}
int
getItemId
()
const
{
return
ItemId_Command_MoveCard
;
}
};
// -----------------
// --- RESPONSES ---
// -----------------
...
...
common/protocol_datastructures.h
View file @
9c527fb5
...
...
@@ -20,6 +20,12 @@ 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
CardId
:
public
SerializableItem_Int
{
public:
CardId
(
int
_cardId
=
-
1
)
:
SerializableItem_Int
(
"card_id"
,
_cardId
)
{
}
static
SerializableItem
*
newItem
()
{
return
new
CardId
;
}
};
class
ServerInfo_User
:
public
SerializableItem_Map
{
public:
enum
UserLevelFlags
{
...
...
common/protocol_item_ids.h
View file @
9c527fb5
...
...
@@ -21,53 +21,52 @@ ItemId_Command_Shuffle = 1019,
ItemId_Command_Mulligan
=
1020
,
ItemId_Command_RollDie
=
1021
,
ItemId_Command_DrawCards
=
1022
,
ItemId_Command_MoveCard
=
1023
,
ItemId_Command_FlipCard
=
1024
,
ItemId_Command_AttachCard
=
1025
,
ItemId_Command_CreateToken
=
1026
,
ItemId_Command_CreateArrow
=
1027
,
ItemId_Command_DeleteArrow
=
1028
,
ItemId_Command_SetCardAttr
=
1029
,
ItemId_Command_SetCardCounter
=
1030
,
ItemId_Command_IncCardCounter
=
1031
,
ItemId_Command_ReadyStart
=
1032
,
ItemId_Command_Concede
=
1033
,
ItemId_Command_IncCounter
=
1034
,
ItemId_Command_CreateCounter
=
1035
,
ItemId_Command_SetCounter
=
1036
,
ItemId_Command_DelCounter
=
1037
,
ItemId_Command_NextTurn
=
1038
,
ItemId_Command_SetActivePhase
=
1039
,
ItemId_Command_DumpZone
=
1040
,
ItemId_Command_StopDumpZone
=
1041
,
ItemId_Command_RevealCards
=
1042
,
ItemId_Event_Say
=
1043
,
ItemId_Event_Leave
=
1044
,
ItemId_Event_GameClosed
=
1045
,
ItemId_Event_Shuffle
=
1046
,
ItemId_Event_RollDie
=
1047
,
ItemId_Event_MoveCard
=
1048
,
ItemId_Event_FlipCard
=
1049
,
ItemId_Event_DestroyCard
=
1050
,
ItemId_Event_AttachCard
=
1051
,
ItemId_Event_CreateToken
=
1052
,
ItemId_Event_DeleteArrow
=
1053
,
ItemId_Event_SetCardAttr
=
1054
,
ItemId_Event_SetCardCounter
=
1055
,
ItemId_Event_SetCounter
=
1056
,
ItemId_Event_DelCounter
=
1057
,
ItemId_Event_SetActivePlayer
=
1058
,
ItemId_Event_SetActivePhase
=
1059
,
ItemId_Event_DumpZone
=
1060
,
ItemId_Event_StopDumpZone
=
1061
,
ItemId_Event_ServerMessage
=
1062
,
ItemId_Event_Message
=
1063
,
ItemId_Event_GameJoined
=
1064
,
ItemId_Event_UserLeft
=
1065
,
ItemId_Event_LeaveRoom
=
1066
,
ItemId_Event_RoomSay
=
1067
,
ItemId_Context_ReadyStart
=
1068
,
ItemId_Context_Concede
=
1069
,
ItemId_Context_DeckSelect
=
1070
,
ItemId_Other
=
1071
ItemId_Command_FlipCard
=
1023
,
ItemId_Command_AttachCard
=
1024
,
ItemId_Command_CreateToken
=
1025
,
ItemId_Command_CreateArrow
=
1026
,
ItemId_Command_DeleteArrow
=
1027
,
ItemId_Command_SetCardAttr
=
1028
,
ItemId_Command_SetCardCounter
=
1029
,
ItemId_Command_IncCardCounter
=
1030
,
ItemId_Command_ReadyStart
=
1031
,
ItemId_Command_Concede
=
1032
,
ItemId_Command_IncCounter
=
1033
,
ItemId_Command_CreateCounter
=
1034
,
ItemId_Command_SetCounter
=
1035
,
ItemId_Command_DelCounter
=
1036
,
ItemId_Command_NextTurn
=
1037
,
ItemId_Command_SetActivePhase
=
1038
,
ItemId_Command_DumpZone
=
1039
,
ItemId_Command_StopDumpZone
=
1040
,
ItemId_Command_RevealCards
=
1041
,
ItemId_Event_Say
=
1042
,
ItemId_Event_Leave
=
1043
,
ItemId_Event_GameClosed
=
1044
,
ItemId_Event_Shuffle
=
1045
,
ItemId_Event_RollDie
=
1046
,
ItemId_Event_MoveCard
=
1047
,
ItemId_Event_FlipCard
=
1048
,
ItemId_Event_DestroyCard
=
1049
,
ItemId_Event_AttachCard
=
1050
,
ItemId_Event_CreateToken
=
1051
,
ItemId_Event_DeleteArrow
=
1052
,
ItemId_Event_SetCardAttr
=
1053
,
ItemId_Event_SetCardCounter
=
1054
,
ItemId_Event_SetCounter
=
1055
,
ItemId_Event_DelCounter
=
1056
,
ItemId_Event_SetActivePlayer
=
1057
,
ItemId_Event_SetActivePhase
=
1058
,
ItemId_Event_DumpZone
=
1059
,
ItemId_Event_StopDumpZone
=
1060
,
ItemId_Event_ServerMessage
=
1061
,
ItemId_Event_Message
=
1062
,
ItemId_Event_GameJoined
=
1063
,
ItemId_Event_UserLeft
=
1064
,
ItemId_Event_LeaveRoom
=
1065
,
ItemId_Event_RoomSay
=
1066
,
ItemId_Context_ReadyStart
=
1067
,
ItemId_Context_Concede
=
1068
,
ItemId_Context_DeckSelect
=
1069
,
ItemId_Other
=
1070
};
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