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
614f1063
Commit
614f1063
authored
Jul 17, 2010
by
Max-Wilhelm Bruker
Browse files
arrows can target players; card attachment works
parent
61b82bd6
Changes
32
Show whitespace changes
Inline
Side-by-side
cockatrice/src/abstractcarditem.cpp
View file @
614f1063
...
@@ -8,8 +8,8 @@
...
@@ -8,8 +8,8 @@
#include
"main.h"
#include
"main.h"
#include
<QDebug>
#include
<QDebug>
AbstractCardItem
::
AbstractCardItem
(
const
QString
&
_name
,
QGraphicsItem
*
parent
)
AbstractCardItem
::
AbstractCardItem
(
const
QString
&
_name
,
Player
*
_owner
,
QGraphicsItem
*
parent
)
:
ArrowTarget
(
parent
),
info
(
db
->
getCard
(
_name
)),
name
(
_name
),
tapped
(
false
)
:
ArrowTarget
(
_owner
,
parent
),
info
(
db
->
getCard
(
_name
)),
name
(
_name
),
tapped
(
false
)
{
{
setCursor
(
Qt
::
OpenHandCursor
);
setCursor
(
Qt
::
OpenHandCursor
);
setFlag
(
ItemIsSelectable
);
setFlag
(
ItemIsSelectable
);
...
...
cockatrice/src/abstractcarditem.h
View file @
614f1063
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
#include
"arrowtarget.h"
#include
"arrowtarget.h"
class
CardInfo
;
class
CardInfo
;
class
Player
;
const
int
CARD_WIDTH
=
72
;
const
int
CARD_WIDTH
=
72
;
const
int
CARD_HEIGHT
=
102
;
const
int
CARD_HEIGHT
=
102
;
...
@@ -22,7 +23,7 @@ signals:
...
@@ -22,7 +23,7 @@ signals:
public:
public:
enum
{
Type
=
typeCard
};
enum
{
Type
=
typeCard
};
int
type
()
const
{
return
Type
;
}
int
type
()
const
{
return
Type
;
}
AbstractCardItem
(
const
QString
&
_name
=
QString
(),
QGraphicsItem
*
parent
=
0
);
AbstractCardItem
(
const
QString
&
_name
=
QString
(),
Player
*
_owner
=
0
,
QGraphicsItem
*
parent
=
0
);
~
AbstractCardItem
();
~
AbstractCardItem
();
QRectF
boundingRect
()
const
;
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
...
...
cockatrice/src/arrowitem.cpp
View file @
614f1063
...
@@ -8,15 +8,34 @@
...
@@ -8,15 +8,34 @@
#include
<QPainter>
#include
<QPainter>
#include
<QGraphicsSceneMouseEvent>
#include
<QGraphicsSceneMouseEvent>
#include
<QGraphicsScene>
#include
<QGraphicsScene>
#include
<QDebug>
ArrowItem
::
ArrowItem
(
Player
*
_player
,
int
_id
,
ArrowTarget
*
_startItem
,
ArrowTarget
*
_targetItem
,
const
QColor
&
_color
)
ArrowItem
::
ArrowItem
(
Player
*
_player
,
int
_id
,
ArrowTarget
*
_startItem
,
ArrowTarget
*
_targetItem
,
const
QColor
&
_color
)
:
QGraphicsItem
(),
player
(
_player
),
id
(
_id
),
startItem
(
_startItem
),
targetItem
(
_targetItem
),
color
(
_color
),
fullColor
(
true
)
:
QGraphicsItem
(),
player
(
_player
),
id
(
_id
),
startItem
(
_startItem
),
targetItem
(
_targetItem
),
color
(
_color
),
fullColor
(
true
)
{
{
setZValue
(
2000000005
);
setZValue
(
2000000005
);
if
(
startItem
)
startItem
->
addArrowFrom
(
this
);
if
(
targetItem
)
targetItem
->
addArrowTo
(
this
);
if
(
startItem
&&
targetItem
)
if
(
startItem
&&
targetItem
)
updatePath
();
updatePath
();
}
}
ArrowItem
::~
ArrowItem
()
{
qDebug
()
<<
"ArrowItem destructor"
;
if
(
startItem
)
startItem
->
removeArrowFrom
(
this
);
if
(
targetItem
)
{
targetItem
->
setBeingPointedAt
(
false
);
targetItem
->
removeArrowTo
(
this
);
}
}
void
ArrowItem
::
updatePath
()
void
ArrowItem
::
updatePath
()
{
{
QPointF
endPoint
=
targetItem
->
mapToScene
(
QPointF
(
targetItem
->
boundingRect
().
width
()
/
2
,
targetItem
->
boundingRect
().
height
()
/
2
));
QPointF
endPoint
=
targetItem
->
mapToScene
(
QPointF
(
targetItem
->
boundingRect
().
width
()
/
2
,
targetItem
->
boundingRect
().
height
()
/
2
));
...
@@ -97,8 +116,8 @@ void ArrowItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
...
@@ -97,8 +116,8 @@ void ArrowItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
player
->
sendGameCommand
(
new
Command_DeleteArrow
(
-
1
,
id
));
player
->
sendGameCommand
(
new
Command_DeleteArrow
(
-
1
,
id
));
}
}
ArrowDragItem
::
ArrowDragItem
(
ArrowTarget
*
_startItem
,
const
QColor
&
_color
)
ArrowDragItem
::
ArrowDragItem
(
Player
*
_owner
,
ArrowTarget
*
_startItem
,
const
QColor
&
_color
)
:
ArrowItem
(
static_cast
<
CardZone
*>
(
_startItem
->
parentItem
())
->
getPlayer
()
,
-
1
,
_startItem
,
0
,
_color
)
:
ArrowItem
(
_owner
,
-
1
,
_startItem
,
0
,
_color
)
{
{
}
}
...
@@ -118,17 +137,23 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -118,17 +137,23 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
cursorItem
=
static_cast
<
ArrowTarget
*>
(
colliding
.
at
(
i
));
cursorItem
=
static_cast
<
ArrowTarget
*>
(
colliding
.
at
(
i
));
break
;
break
;
}
}
if
((
cursorItem
!=
targetItem
)
&&
targetItem
)
if
((
cursorItem
!=
targetItem
)
&&
targetItem
)
{
targetItem
->
setBeingPointedAt
(
false
);
targetItem
->
setBeingPointedAt
(
false
);
targetItem
->
removeArrowTo
(
this
);
}
if
(
!
cursorItem
)
{
if
(
!
cursorItem
)
{
fullColor
=
false
;
fullColor
=
false
;
targetItem
=
0
;
targetItem
=
0
;
updatePath
(
endPos
);
updatePath
(
endPos
);
}
else
{
}
else
{
if
(
cursorItem
!=
targetItem
)
{
fullColor
=
true
;
fullColor
=
true
;
if
(
cursorItem
!=
startItem
)
if
(
cursorItem
!=
startItem
)
{
cursorItem
->
setBeingPointedAt
(
true
);
cursorItem
->
setBeingPointedAt
(
true
);
cursorItem
->
addArrowTo
(
this
);
}
targetItem
=
cursorItem
;
targetItem
=
cursorItem
;
}
updatePath
();
updatePath
();
}
}
update
();
update
();
...
@@ -140,14 +165,13 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -140,14 +165,13 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void
ArrowDragItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
)
void
ArrowDragItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
{
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
targetItem
->
setBeingPointedAt
(
false
);
CardZone
*
startZone
=
static_cast
<
CardItem
*>
(
startItem
)
->
getZone
();
CardZone
*
startZone
=
static_cast
<
CardZone
*>
(
startItem
->
parentItem
());
// For now, we can safely assume that the start item is always a card.
// For now, we can safely assume that the start item is always a card.
// The target item can be a player as well.
// The target item can be a player as well.
CardItem
*
startCard
=
qgraphicsitem_cast
<
CardItem
*>
(
startItem
);
CardItem
*
startCard
=
qgraphicsitem_cast
<
CardItem
*>
(
startItem
);
CardItem
*
targetCard
=
qgraphicsitem_cast
<
CardItem
*>
(
targetItem
);
CardItem
*
targetCard
=
qgraphicsitem_cast
<
CardItem
*>
(
targetItem
);
if
(
targetCard
)
{
if
(
targetCard
)
{
CardZone
*
targetZone
=
s
ta
tic_cast
<
CardZone
*>
(
targetItem
->
parentItem
()
);
CardZone
*
targetZone
=
ta
rgetCard
->
getZone
(
);
player
->
sendGameCommand
(
new
Command_CreateArrow
(
player
->
sendGameCommand
(
new
Command_CreateArrow
(
-
1
,
-
1
,
startZone
->
getPlayer
()
->
getId
(),
startZone
->
getPlayer
()
->
getId
(),
...
@@ -165,7 +189,7 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
...
@@ -165,7 +189,7 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
startZone
->
getPlayer
()
->
getId
(),
startZone
->
getPlayer
()
->
getId
(),
startZone
->
getName
(),
startZone
->
getName
(),
startCard
->
getId
(),
startCard
->
getId
(),
static_cast
<
Player
*>
(
targetPlayer
->
parentItem
()
)
->
getId
(),
targetPlayer
->
getOwner
(
)
->
getId
(),
QString
(),
QString
(),
-
1
,
-
1
,
color
color
...
@@ -177,3 +201,55 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
...
@@ -177,3 +201,55 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
for
(
int
i
=
0
;
i
<
childArrows
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
childArrows
.
size
();
++
i
)
childArrows
[
i
]
->
mouseReleaseEvent
(
event
);
childArrows
[
i
]
->
mouseReleaseEvent
(
event
);
}
}
ArrowAttachItem
::
ArrowAttachItem
(
ArrowTarget
*
_startItem
)
:
ArrowItem
(
_startItem
->
getOwner
(),
-
1
,
_startItem
,
0
,
Qt
::
green
)
{
}
void
ArrowAttachItem
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
QPointF
endPos
=
event
->
scenePos
();
QList
<
QGraphicsItem
*>
colliding
=
scene
()
->
items
(
endPos
);
ArrowTarget
*
cursorItem
=
0
;
for
(
int
i
=
colliding
.
size
()
-
1
;
i
>=
0
;
i
--
)
if
(
qgraphicsitem_cast
<
CardItem
*>
(
colliding
.
at
(
i
)))
{
cursorItem
=
static_cast
<
ArrowTarget
*>
(
colliding
.
at
(
i
));
break
;
}
if
((
cursorItem
!=
targetItem
)
&&
targetItem
)
targetItem
->
setBeingPointedAt
(
false
);
if
(
!
cursorItem
)
{
fullColor
=
false
;
targetItem
=
0
;
updatePath
(
endPos
);
}
else
{
fullColor
=
true
;
if
(
cursorItem
!=
startItem
)
cursorItem
->
setBeingPointedAt
(
true
);
targetItem
=
cursorItem
;
updatePath
();
}
update
();
}
void
ArrowAttachItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
/*event*/
)
{
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
CardItem
*
startCard
=
qgraphicsitem_cast
<
CardItem
*>
(
startItem
);
CardZone
*
startZone
=
startCard
->
getZone
();
CardItem
*
targetCard
=
qgraphicsitem_cast
<
CardItem
*>
(
targetItem
);
CardZone
*
targetZone
=
targetCard
->
getZone
();
player
->
sendGameCommand
(
new
Command_AttachCard
(
-
1
,
startZone
->
getName
(),
startCard
->
getId
(),
targetZone
->
getPlayer
()
->
getId
(),
targetZone
->
getName
(),
targetCard
->
getId
()
));
}
deleteLater
();
}
cockatrice/src/arrowitem.h
View file @
614f1063
...
@@ -23,6 +23,7 @@ protected:
...
@@ -23,6 +23,7 @@ protected:
void
mousePressEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mousePressEvent
(
QGraphicsSceneMouseEvent
*
event
);
public:
public:
ArrowItem
(
Player
*
_player
,
int
_id
,
ArrowTarget
*
_startItem
,
ArrowTarget
*
_targetItem
,
const
QColor
&
color
);
ArrowItem
(
Player
*
_player
,
int
_id
,
ArrowTarget
*
_startItem
,
ArrowTarget
*
_targetItem
,
const
QColor
&
color
);
~
ArrowItem
();
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
QRectF
boundingRect
()
const
{
return
path
.
boundingRect
();
}
QRectF
boundingRect
()
const
{
return
path
.
boundingRect
();
}
QPainterPath
shape
()
const
{
return
path
;
}
QPainterPath
shape
()
const
{
return
path
;
}
...
@@ -30,6 +31,7 @@ public:
...
@@ -30,6 +31,7 @@ public:
void
updatePath
(
const
QPointF
&
endPoint
);
void
updatePath
(
const
QPointF
&
endPoint
);
int
getId
()
const
{
return
id
;
}
int
getId
()
const
{
return
id
;
}
Player
*
getPlayer
()
const
{
return
player
;
}
void
setStartItem
(
ArrowTarget
*
_item
)
{
startItem
=
_item
;
}
void
setStartItem
(
ArrowTarget
*
_item
)
{
startItem
=
_item
;
}
void
setTargetItem
(
ArrowTarget
*
_item
)
{
targetItem
=
_item
;
}
void
setTargetItem
(
ArrowTarget
*
_item
)
{
targetItem
=
_item
;
}
ArrowTarget
*
getStartItem
()
const
{
return
startItem
;
}
ArrowTarget
*
getStartItem
()
const
{
return
startItem
;
}
...
@@ -41,11 +43,20 @@ class ArrowDragItem : public ArrowItem {
...
@@ -41,11 +43,20 @@ class ArrowDragItem : public ArrowItem {
private:
private:
QList
<
ArrowDragItem
*>
childArrows
;
QList
<
ArrowDragItem
*>
childArrows
;
public:
public:
ArrowDragItem
(
ArrowTarget
*
_startItem
,
const
QColor
&
_color
);
ArrowDragItem
(
Player
*
_owner
,
ArrowTarget
*
_startItem
,
const
QColor
&
_color
);
void
addChildArrow
(
ArrowDragItem
*
childArrow
);
void
addChildArrow
(
ArrowDragItem
*
childArrow
);
protected:
protected:
void
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
);
};
};
class
ArrowAttachItem
:
public
ArrowItem
{
Q_OBJECT
public:
ArrowAttachItem
(
ArrowTarget
*
_startItem
);
protected:
void
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
);
};
#endif // ARROWITEM_H
#endif // ARROWITEM_H
cockatrice/src/arrowtarget.cpp
View file @
614f1063
#include
"arrowtarget.h"
#include
"arrowtarget.h"
#include
"arrowitem.h"
#include
"player.h"
ArrowTarget
::
ArrowTarget
(
QGraphicsItem
*
parent
)
ArrowTarget
::
ArrowTarget
(
Player
*
_owner
,
QGraphicsItem
*
parent
)
:
AbstractGraphicsItem
(
parent
),
beingPointedAt
(
false
)
:
AbstractGraphicsItem
(
parent
),
owner
(
_owner
),
beingPointedAt
(
false
)
{
{
}
}
ArrowTarget
::~
ArrowTarget
()
{
while
(
!
arrowsFrom
.
isEmpty
())
arrowsFrom
.
first
()
->
getPlayer
()
->
delArrow
(
arrowsFrom
.
first
()
->
getId
());
while
(
!
arrowsTo
.
isEmpty
())
arrowsTo
.
first
()
->
getPlayer
()
->
delArrow
(
arrowsTo
.
first
()
->
getId
());
}
void
ArrowTarget
::
setBeingPointedAt
(
bool
_beingPointedAt
)
void
ArrowTarget
::
setBeingPointedAt
(
bool
_beingPointedAt
)
{
{
beingPointedAt
=
_beingPointedAt
;
beingPointedAt
=
_beingPointedAt
;
...
...
cockatrice/src/arrowtarget.h
View file @
614f1063
...
@@ -2,14 +2,33 @@
...
@@ -2,14 +2,33 @@
#define ARROWTARGET_H
#define ARROWTARGET_H
#include
"abstractgraphicsitem.h"
#include
"abstractgraphicsitem.h"
#include
<QList>
class
Player
;
class
ArrowItem
;
class
ArrowTarget
:
public
AbstractGraphicsItem
{
class
ArrowTarget
:
public
AbstractGraphicsItem
{
protected:
Player
*
owner
;
private:
private:
bool
beingPointedAt
;
bool
beingPointedAt
;
QList
<
ArrowItem
*>
arrowsFrom
,
arrowsTo
;
public:
public:
ArrowTarget
(
QGraphicsItem
*
parent
=
0
);
ArrowTarget
(
Player
*
_owner
,
QGraphicsItem
*
parent
=
0
);
~
ArrowTarget
();
Player
*
getOwner
()
const
{
return
owner
;
}
void
setBeingPointedAt
(
bool
_beingPointedAt
);
void
setBeingPointedAt
(
bool
_beingPointedAt
);
bool
getBeingPointedAt
()
const
{
return
beingPointedAt
;
}
bool
getBeingPointedAt
()
const
{
return
beingPointedAt
;
}
const
QList
<
ArrowItem
*>
&
getArrowsFrom
()
const
{
return
arrowsFrom
;
}
void
addArrowFrom
(
ArrowItem
*
arrow
)
{
arrowsFrom
.
append
(
arrow
);
}
void
removeArrowFrom
(
ArrowItem
*
arrow
)
{
arrowsFrom
.
removeAt
(
arrowsFrom
.
indexOf
(
arrow
));
}
const
QList
<
ArrowItem
*>
&
getArrowsTo
()
const
{
return
arrowsTo
;
}
void
addArrowTo
(
ArrowItem
*
arrow
)
{
arrowsTo
.
append
(
arrow
);
}
void
removeArrowTo
(
ArrowItem
*
arrow
)
{
arrowsTo
.
removeAt
(
arrowsTo
.
indexOf
(
arrow
));
}
};
};
#endif
#endif
\ No newline at end of file
cockatrice/src/carddragitem.cpp
View file @
614f1063
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
#include
<QGraphicsSceneMouseEvent>
#include
<QGraphicsSceneMouseEvent>
#include
<QCursor>
#include
<QCursor>
CardDragItem
::
CardDragItem
(
Abstract
CardItem
*
_item
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
AbstractCardDragItem
*
parentDrag
)
CardDragItem
::
CardDragItem
(
CardItem
*
_item
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
AbstractCardDragItem
*
parentDrag
)
:
AbstractCardDragItem
(
_item
,
_hotSpot
,
parentDrag
),
id
(
_id
),
faceDown
(
_faceDown
),
currentZone
(
0
)
:
AbstractCardDragItem
(
_item
,
_hotSpot
,
parentDrag
),
id
(
_id
),
faceDown
(
_faceDown
),
currentZone
(
0
)
{
{
}
}
...
@@ -53,7 +53,7 @@ void CardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
...
@@ -53,7 +53,7 @@ void CardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
sc
->
removeItem
(
this
);
sc
->
removeItem
(
this
);
if
(
currentZone
)
{
if
(
currentZone
)
{
CardZone
*
startZone
=
qgraphicsitem
_cast
<
Card
Zone
*>
(
item
->
parentItem
()
);
CardZone
*
startZone
=
static
_cast
<
Card
Item
*>
(
item
)
->
getZone
(
);
currentZone
->
handleDropEvent
(
id
,
startZone
,
(
sp
-
currentZone
->
scenePos
()).
toPoint
(),
faceDown
);
currentZone
->
handleDropEvent
(
id
,
startZone
,
(
sp
-
currentZone
->
scenePos
()).
toPoint
(),
faceDown
);
for
(
int
i
=
0
;
i
<
childDrags
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
childDrags
.
size
();
i
++
)
{
CardDragItem
*
c
=
static_cast
<
CardDragItem
*>
(
childDrags
[
i
]);
CardDragItem
*
c
=
static_cast
<
CardDragItem
*>
(
childDrags
[
i
]);
...
...
cockatrice/src/carddragitem.h
View file @
614f1063
...
@@ -3,13 +3,15 @@
...
@@ -3,13 +3,15 @@
#include
"abstractcarddragitem.h"
#include
"abstractcarddragitem.h"
class
CardItem
;
class
CardDragItem
:
public
AbstractCardDragItem
{
class
CardDragItem
:
public
AbstractCardDragItem
{
private:
private:
int
id
;
int
id
;
bool
faceDown
;
bool
faceDown
;
CardZone
*
currentZone
;
CardZone
*
currentZone
;
public:
public:
CardDragItem
(
Abstract
CardItem
*
_item
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
AbstractCardDragItem
*
parentDrag
=
0
);
CardDragItem
(
CardItem
*
_item
,
int
_id
,
const
QPointF
&
_hotSpot
,
bool
_faceDown
,
AbstractCardDragItem
*
parentDrag
=
0
);
void
updatePosition
(
const
QPointF
&
cursorScenePos
);
void
updatePosition
(
const
QPointF
&
cursorScenePos
);
protected:
protected:
void
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
);
void
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
);
...
...
cockatrice/src/carditem.cpp
View file @
614f1063
...
@@ -10,9 +10,10 @@
...
@@ -10,9 +10,10 @@
#include
"main.h"
#include
"main.h"
#include
"protocol_datastructures.h"
#include
"protocol_datastructures.h"
#include
"settingscache.h"
#include
"settingscache.h"
#include
"tab_game.h"
CardItem
::
CardItem
(
Player
*
_owner
,
const
QString
&
_name
,
int
_cardid
,
QGraphicsItem
*
parent
)
CardItem
::
CardItem
(
Player
*
_owner
,
const
QString
&
_name
,
int
_cardid
,
QGraphicsItem
*
parent
)
:
AbstractCardItem
(
_name
,
parent
),
owner
(
_owner
),
id
(
_cardid
),
attacking
(
false
),
facedown
(
false
),
destroyOnZoneChange
(
false
),
doesntUntap
(
false
),
dragItem
(
NULL
)
:
AbstractCardItem
(
_name
,
_owner
,
parent
),
id
(
_cardid
),
attacking
(
false
),
facedown
(
false
),
destroyOnZoneChange
(
false
),
doesntUntap
(
false
),
dragItem
(
0
),
attachedTo
(
0
)
{
{
owner
->
addCard
(
this
);
owner
->
addCard
(
this
);
...
@@ -106,6 +107,14 @@ CardItem::~CardItem()
...
@@ -106,6 +107,14 @@ CardItem::~CardItem()
owner
->
setCardMenu
(
0
);
owner
->
setCardMenu
(
0
);
delete
cardMenu
;
delete
cardMenu
;
while
(
!
attachedCards
.
isEmpty
())
{
attachedCards
.
first
()
->
setZone
(
0
);
// so that it won't try to call reorganizeCards()
attachedCards
.
first
()
->
setAttachedTo
(
0
);
}
if
(
attachedTo
)
attachedTo
->
removeAttachedCard
(
this
);
deleteDragItem
();
deleteDragItem
();
}
}
...
@@ -118,6 +127,7 @@ void CardItem::retranslateUi()
...
@@ -118,6 +127,7 @@ void CardItem::retranslateUi()
aFlip
->
setText
(
tr
(
"&Flip"
));
aFlip
->
setText
(
tr
(
"&Flip"
));
aClone
->
setText
(
tr
(
"&Clone"
));
aClone
->
setText
(
tr
(
"&Clone"
));
aAttach
->
setText
(
tr
(
"&Attach to card..."
));
aAttach
->
setText
(
tr
(
"&Attach to card..."
));
aAttach
->
setShortcut
(
tr
(
"Ctrl+A"
));
aUnattach
->
setText
(
tr
(
"Unattac&h"
));
aUnattach
->
setText
(
tr
(
"Unattac&h"
));
aSetPT
->
setText
(
tr
(
"Set &P/T..."
));
aSetPT
->
setText
(
tr
(
"Set &P/T..."
));
aSetAnnotation
->
setText
(
tr
(
"&Set annotation..."
));
aSetAnnotation
->
setText
(
tr
(
"&Set annotation..."
));
...
@@ -214,6 +224,23 @@ void CardItem::setPT(const QString &_pt)
...
@@ -214,6 +224,23 @@ void CardItem::setPT(const QString &_pt)
update
();
update
();
}
}
void
CardItem
::
setAttachedTo
(
CardItem
*
_attachedTo
)
{
if
(
attachedTo
)
attachedTo
->
removeAttachedCard
(
this
);
gridPoint
.
setX
(
-
1
);
attachedTo
=
_attachedTo
;
if
(
attachedTo
)
{
attachedTo
->
addAttachedCard
(
this
);
if
(
zone
!=
attachedTo
->
getZone
())
attachedTo
->
getZone
()
->
reorganizeCards
();
}
if
(
zone
)
zone
->
reorganizeCards
();
}
void
CardItem
::
resetState
()
void
CardItem
::
resetState
()
{
{
attacking
=
false
;
attacking
=
false
;
...
@@ -221,6 +248,8 @@ void CardItem::resetState()
...
@@ -221,6 +248,8 @@ void CardItem::resetState()
counters
.
clear
();
counters
.
clear
();
pt
.
clear
();
pt
.
clear
();
annotation
.
clear
();
annotation
.
clear
();
attachedTo
=
0
;
attachedCards
.
clear
();
setTapped
(
false
);
setTapped
(
false
);
setDoesntUntap
(
false
);
setDoesntUntap
(
false
);
update
();
update
();
...
@@ -273,7 +302,8 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -273,7 +302,8 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
else
if
(
event
->
modifiers
().
testFlag
(
Qt
::
ShiftModifier
))
else
if
(
event
->
modifiers
().
testFlag
(
Qt
::
ShiftModifier
))
arrowColor
=
Qt
::
green
;
arrowColor
=
Qt
::
green
;
ArrowDragItem
*
arrow
=
new
ArrowDragItem
(
this
,
arrowColor
);
Player
*
arrowOwner
=
static_cast
<
TabGame
*>
(
owner
->
parent
())
->
getActiveLocalPlayer
();
ArrowDragItem
*
arrow
=
new
ArrowDragItem
(
arrowOwner
,
this
,
arrowColor
);
scene
()
->
addItem
(
arrow
);
scene
()
->
addItem
(
arrow
);
arrow
->
grabMouse
();
arrow
->
grabMouse
();
...
@@ -282,10 +312,10 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -282,10 +312,10 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
CardItem
*
c
=
qgraphicsitem_cast
<
CardItem
*>
(
itemIterator
.
next
());
CardItem
*
c
=
qgraphicsitem_cast
<
CardItem
*>
(
itemIterator
.
next
());
if
(
!
c
||
(
c
==
this
))
if
(
!
c
||
(
c
==
this
))
continue
;
continue
;
if
(
c
->
parentItem
()
!=
parentItem
()
)
if
(
c
->
getZone
()
!=
zone
)
continue
;
continue
;
ArrowDragItem
*
childArrow
=
new
ArrowDragItem
(
c
,
arrowColor
);
ArrowDragItem
*
childArrow
=
new
ArrowDragItem
(
arrowOwner
,
c
,
arrowColor
);
scene
()
->
addItem
(
childArrow
);
scene
()
->
addItem
(
childArrow
);
arrow
->
addChildArrow
(
childArrow
);
arrow
->
addChildArrow
(
childArrow
);
}
}
...
@@ -300,8 +330,6 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -300,8 +330,6 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
createDragItem
(
id
,
event
->
pos
(),
event
->
scenePos
(),
faceDown
);
createDragItem
(
id
,
event
->
pos
(),
event
->
scenePos
(),
faceDown
);
dragItem
->
grabMouse
();
dragItem
->
grabMouse
();
CardZone
*
zone
=
static_cast
<
CardZone
*>
(
parentItem
());
QList
<
QGraphicsItem
*>
sel
=
scene
()
->
selectedItems
();
QList
<
QGraphicsItem
*>
sel
=
scene
()
->
selectedItems
();
int
j
=
0
;
int
j
=
0
;
for
(
int
i
=
0
;
i
<
sel
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
sel
.
size
();
i
++
)
{
...
@@ -324,9 +352,8 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -324,9 +352,8 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void
CardItem
::
playCard
(
QGraphicsSceneMouseEvent
*
event
)
void
CardItem
::
playCard
(
QGraphicsSceneMouseEvent
*
event
)
{
{
CardZone
*
zone
=
static_cast
<
CardZone
*>
(
parentItem
());
// Do nothing if the card belongs to another player
// Do nothing if the card belongs to another player
if
(
!
zone
->
getPlayer
()
->
getLocal
())
if
(
!
owner
->
getLocal
())
return
;
return
;
TableZone
*
tz
=
qobject_cast
<
TableZone
*>
(
zone
);
TableZone
*
tz
=
qobject_cast
<
TableZone
*>
(
zone
);
...
...
cockatrice/src/carditem.h
View file @
614f1063
...
@@ -15,7 +15,7 @@ const int MAX_COUNTERS_ON_CARD = 999;
...
@@ -15,7 +15,7 @@ const int MAX_COUNTERS_ON_CARD = 999;
class
CardItem
:
public
AbstractCardItem
{
class
CardItem
:
public
AbstractCardItem
{
Q_OBJECT
Q_OBJECT
private:
private:
Player
*
ow
ne
r
;
CardZone
*
zo
ne
;
int
id
;
int
id
;
bool
attacking
;
bool
attacking
;
bool
facedown
;
bool
facedown
;
...
@@ -26,6 +26,8 @@ private:
...
@@ -26,6 +26,8 @@ private:
bool
doesntUntap
;
bool
doesntUntap
;
QPoint
gridPoint
;
QPoint
gridPoint
;
CardDragItem
*
dragItem
;
CardDragItem
*
dragItem
;
CardItem
*
attachedTo
;
QList
<
CardItem
*>
attachedCards
;
QList
<
QAction
*>
aAddCounter
,
aSetCounter
,
aRemoveCounter
;
QList
<
QAction
*>
aAddCounter
,
aSetCounter
,
aRemoveCounter
;
QAction
*
aTap
,
*
aUntap
,
*
aDoesntUntap
,
*
aAttach
,
*
aUnattach
,
*
aSetPT
,
*
aSetAnnotation
,
*
aFlip
,
*
aClone
,
QAction
*
aTap
,
*
aUntap
,
*
aDoesntUntap
,
*
aAttach
,
*
aUnattach
,
*
aSetPT
,
*
aSetAnnotation
,
*
aFlip
,
*
aClone
,
...
@@ -39,6 +41,8 @@ public:
...
@@ -39,6 +41,8 @@ public:
CardItem
(
Player
*
_owner
,
const
QString
&
_name
=
QString
(),
int
_cardid
=
-
1
,
QGraphicsItem
*
parent
=
0
);
CardItem
(
Player
*
_owner
,
const
QString
&
_name
=
QString
(),
int
_cardid
=
-
1
,
QGraphicsItem
*
parent
=
0
);
~
CardItem
();
~
CardItem
();
void
retranslateUi
();
void
retranslateUi
();
CardZone
*
getZone
()
const
{
return
zone
;
}
void
setZone
(
CardZone
*
_zone
)
{
zone
=
_zone
;
}
QMenu
*
getCardMenu
()
const
{
return
cardMenu
;
}
QMenu
*
getCardMenu
()
const
{
return
cardMenu
;
}
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
QPoint
getGridPoint
()
const
{
return
gridPoint
;
}
QPoint
getGridPoint
()
const
{
return
gridPoint
;
}
...
@@ -61,6 +65,11 @@ public:
...
@@ -61,6 +65,11 @@ public:
void
setPT
(
const
QString
&
_pt
);
void
setPT
(
const
QString
&
_pt
);
bool
getDestroyOnZoneChange
()
const
{
return
destroyOnZoneChange
;
}
bool
getDestroyOnZoneChange
()
const
{
return
destroyOnZoneChange
;
}
void
setDestroyOnZoneChange
(
bool
_destroy
)
{
destroyOnZoneChange
=
_destroy
;
}
void
setDestroyOnZoneChange
(
bool
_destroy
)
{
destroyOnZoneChange
=
_destroy
;
}
CardItem
*
getAttachedTo
()
const
{
return
attachedTo
;
}
void
setAttachedTo
(
CardItem
*
_attachedTo
);
void
addAttachedCard
(
CardItem
*
card
)
{
attachedCards
.
append
(
card
);
}
void
removeAttachedCard
(
CardItem
*
card
)
{
attachedCards
.
removeAt
(
attachedCards
.
indexOf
(
card
));
}
const
QList
<
CardItem
*>
&
getAttachedCards
()
const
{
return
attachedCards
;
}
void
resetState
();
void
resetState
();
void
processCardInfo
(
ServerInfo_Card
*
info
);
void
processCardInfo
(
ServerInfo_Card
*
info
);
...
...
cockatrice/src/cardzone.cpp
View file @
614f1063
...
@@ -27,8 +27,15 @@ void CardZone::retranslateUi()
...
@@ -27,8 +27,15 @@ void CardZone::retranslateUi()
void
CardZone
::
clearContents
()
void
CardZone
::
clearContents
()
{
{
for
(
int
i
=
0
;
i
<
cards
.
size
();
i
++
)
for
(
int
i
=
0
;
i
<
cards
.
size
();
i
++
)
{
// If an incorrectly implemented server doesn't return attached cards to whom they belong before dropping a player,
// we have to return them to avoid a crash.
const
QList
<
CardItem
*>
&
attachedCards
=
cards
[
i
]
->
getAttachedCards
();
for
(
int
j
=
0
;
j
<
attachedCards
.
size
();
++
j
)
attachedCards
[
j
]
->
setParentItem
(
attachedCards
[
j
]
->
getZone
());
delete
cards
.
at
(
i
);
delete
cards
.
at
(
i
);
}
cards
.
clear
();
cards
.
clear
();
emit
cardCountChanged
();
emit
cardCountChanged
();
}
}
...
@@ -93,6 +100,7 @@ void CardZone::addCard(CardItem *card, bool reorganize, int x, int y)
...
@@ -93,6 +100,7 @@ void CardZone::addCard(CardItem *card, bool reorganize, int x, int y)
if
((
x
<=
view
->
getCards
().
size
())
||
(
view
->
getNumberCards
()
==
-
1
))
if
((
x
<=
view
->
getCards
().
size
())
||
(
view
->
getNumberCards
()
==
-
1
))
view
->
addCard
(
new
CardItem
(
player
,
card
->
getName
(),
card
->
getId
()),
reorganize
,
x
,
y
);
view
->
addCard
(
new
CardItem
(
player
,
card
->
getName
(),
card
->
getId
()),
reorganize
,
x
,
y
);
card
->
setZone
(
this
);
addCardImpl
(
card
,
x
,
y
);
addCardImpl
(
card
,
x
,
y
);
if
(
reorganize
)
if
(
reorganize
)
...
...
cockatrice/src/deckview.cpp
View file @
614f1063
...
@@ -60,7 +60,7 @@ void DeckViewCardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
...
@@ -60,7 +60,7 @@ void DeckViewCardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
}
}
DeckViewCard
::
DeckViewCard
(
const
QString
&
_name
,
const
QString
&
_originZone
,
QGraphicsItem
*
parent
)
DeckViewCard
::
DeckViewCard
(
const
QString
&
_name
,
const
QString
&
_originZone
,
QGraphicsItem
*
parent
)
:
AbstractCardItem
(
_name
,
parent
),
originZone
(
_originZone
),
dragItem
(
0
)
:
AbstractCardItem
(
_name
,
0
,
parent
),
originZone
(
_originZone
),
dragItem
(
0
)
{
{
}
}
...
...
cockatrice/src/messagelogwidget.cpp
View file @
614f1063
...
@@ -207,6 +207,16 @@ void MessageLogWidget::logDestroyCard(Player *player, QString cardName)
...
@@ -207,6 +207,16 @@ void MessageLogWidget::logDestroyCard(Player *player, QString cardName)
append
(
tr
(
"%1 destroys %2."
).
arg
(
sanitizeHtml
(
player
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
cardName
))));
append
(
tr
(
"%1 destroys %2."
).
arg
(
sanitizeHtml
(
player
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
cardName
))));
}
}
void
MessageLogWidget
::
logAttachCard
(
Player
*
player
,
QString
cardName
,
Player
*
targetPlayer
,
QString
targetCardName
)
{
append
(
tr
(
"%1 attaches %2 to %3's %4."
).
arg
(
sanitizeHtml
(
player
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
cardName
))).
arg
(
sanitizeHtml
(
targetPlayer
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
targetCardName
))));
}
void
MessageLogWidget
::
logUnattachCard
(
Player
*
player
,
QString
cardName
)
{
append
(
tr
(
"%1 unattaches %2."
).
arg
(
sanitizeHtml
(
player
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
cardName
))));
}
void
MessageLogWidget
::
logCreateToken
(
Player
*
player
,
QString
cardName
,
QString
pt
)
void
MessageLogWidget
::
logCreateToken
(
Player
*
player
,
QString
cardName
,
QString
pt
)
{
{
append
(
tr
(
"%1 creates token: %2%3."
).
arg
(
sanitizeHtml
(
player
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
cardName
))).
arg
(
pt
.
isEmpty
()
?
QString
()
:
QString
(
" (%1)"
).
arg
(
sanitizeHtml
(
pt
))));
append
(
tr
(
"%1 creates token: %2%3."
).
arg
(
sanitizeHtml
(
player
->
getName
())).
arg
(
QString
(
"<font color=
\"
blue
\"
>%1</font>"
).
arg
(
sanitizeHtml
(
cardName
))).
arg
(
pt
.
isEmpty
()
?
QString
()
:
QString
(
" (%1)"
).
arg
(
sanitizeHtml
(
pt
))));
...
@@ -341,6 +351,8 @@ void MessageLogWidget::connectToPlayer(Player *player)
...
@@ -341,6 +351,8 @@ void MessageLogWidget::connectToPlayer(Player *player)
connect
(
player
,
SIGNAL
(
logSetAnnotation
(
Player
*
,
QString
,
QString
)),
this
,
SLOT
(
logSetAnnotation
(
Player
*
,
QString
,
QString
)));
connect
(
player
,
SIGNAL
(
logSetAnnotation
(
Player
*
,
QString
,
QString
)),
this
,
SLOT
(
logSetAnnotation
(
Player
*
,
QString
,
QString
)));
connect
(
player
,
SIGNAL
(
logMoveCard
(
Player
*
,
QString
,
CardZone
*
,
int
,
CardZone
*
,
int
)),
this
,
SLOT
(
logMoveCard
(
Player
*
,
QString
,
CardZone
*
,
int
,
CardZone
*
,
int
)));
connect
(
player
,
SIGNAL
(
logMoveCard
(
Player
*
,
QString
,
CardZone
*
,
int
,
CardZone
*
,
int
)),
this
,
SLOT
(
logMoveCard
(
Player
*
,
QString
,
CardZone
*
,
int
,
CardZone
*
,
int
)));
connect
(
player
,
SIGNAL
(
logDestroyCard
(
Player
*
,
QString
)),
this
,
SLOT
(
logDestroyCard
(
Player
*
,
QString
)));
connect
(
player
,
SIGNAL
(
logDestroyCard
(
Player
*
,
QString
)),
this
,
SLOT
(
logDestroyCard
(
Player
*
,
QString
)));
connect
(
player
,
SIGNAL
(
logAttachCard
(
Player
*
,
QString
,
Player
*
,
QString
)),
this
,
SLOT
(
logAttachCard
(
Player
*
,
QString
,
Player
*
,
QString
)));
connect
(
player
,
SIGNAL
(
logUnattachCard
(
Player
*
,
QString
)),
this
,
SLOT
(
logUnattachCard
(
Player
*
,
QString
)));
connect
(
player
,
SIGNAL
(
logDumpZone
(
Player
*
,
CardZone
*
,
int
)),
this
,
SLOT
(
logDumpZone
(
Player
*
,
CardZone
*
,
int
)));
connect
(
player
,
SIGNAL
(
logDumpZone
(
Player
*
,
CardZone
*
,
int
)),
this
,
SLOT
(
logDumpZone
(
Player
*
,
CardZone
*
,
int
)));
connect
(
player
,
SIGNAL
(
logStopDumpZone
(
Player
*
,
CardZone
*
)),
this
,
SLOT
(
logStopDumpZone
(
Player
*
,
CardZone
*
)));
connect
(
player
,
SIGNAL
(
logStopDumpZone
(
Player
*
,
CardZone
*
)),
this
,
SLOT
(
logStopDumpZone
(
Player
*
,
CardZone
*
)));
connect
(
player
,
SIGNAL
(
logDrawCards
(
Player
*
,
int
)),
this
,
SLOT
(
logDrawCards
(
Player
*
,
int
)));
connect
(
player
,
SIGNAL
(
logDrawCards
(
Player
*
,
int
)),
this
,
SLOT
(
logDrawCards
(
Player
*
,
int
)));
...
...
cockatrice/src/messagelogwidget.h
View file @
614f1063
...
@@ -40,6 +40,8 @@ public slots:
...
@@ -40,6 +40,8 @@ public slots:
void
logDrawCards
(
Player
*
player
,
int
number
);
void
logDrawCards
(
Player
*
player
,
int
number
);
void
logMoveCard
(
Player
*
player
,
QString
cardName
,
CardZone
*
startZone
,
int
oldX
,
CardZone
*
targetZone
,
int
newX
);
void
logMoveCard
(
Player
*
player
,
QString
cardName
,
CardZone
*
startZone
,
int
oldX
,
CardZone
*
targetZone
,
int
newX
);
void
logDestroyCard
(
Player
*
player
,
QString
cardName
);
void
logDestroyCard
(
Player
*
player
,
QString
cardName
);
void
logAttachCard
(
Player
*
player
,
QString
cardName
,
Player
*
targetPlayer
,
QString
targetCardName
);
void
logUnattachCard
(
Player
*
player
,
QString
cardName
);
void
logCreateToken
(
Player
*
player
,
QString
cardName
,
QString
pt
);
void
logCreateToken
(
Player
*
player
,
QString
cardName
,
QString
pt
);
void
logCreateArrow
(
Player
*
player
,
Player
*
startPlayer
,
QString
startCard
,
Player
*
targetPlayer
,
QString
targetCard
,
bool
playerTarget
);
void
logCreateArrow
(
Player
*
player
,
Player
*
startPlayer
,
QString
startCard
,
Player
*
targetPlayer
,
QString
targetCard
,
bool
playerTarget
);
void
logSetCardCounter
(
Player
*
player
,
QString
cardName
,
int
counterId
,
int
value
,
int
oldValue
);
void
logSetCardCounter
(
Player
*
player
,
QString
cardName
,
int
counterId
,
int
value
,
int
oldValue
);
...
...
cockatrice/src/player.cpp
View file @
614f1063
...
@@ -224,12 +224,13 @@ Player::~Player()
...
@@ -224,12 +224,13 @@ Player::~Player()
static_cast
<
GameScene
*>
(
scene
())
->
removePlayer
(
this
);
static_cast
<
GameScene
*>
(
scene
())
->
removePlayer
(
this
);
clearArrows
();
QMapIterator
<
QString
,
CardZone
*>
i
(
zones
);
QMapIterator
<
QString
,
CardZone
*>
i
(
zones
);
while
(
i
.
hasNext
())
while
(
i
.
hasNext
())
delete
i
.
next
().
value
();
delete
i
.
next
().
value
();
clearCounters
();
clearCounters
();
clearArrows
();
delete
playerMenu
;
delete
playerMenu
;
}
}
...
@@ -501,7 +502,7 @@ void Player::eventCreateArrows(Event_CreateArrows *event)
...
@@ -501,7 +502,7 @@ void Player::eventCreateArrows(Event_CreateArrows *event)
if
(
targetCard
)
if
(
targetCard
)
emit
logCreateArrow
(
this
,
startCard
->
getOwner
(),
startCard
->
getName
(),
targetCard
->
getOwner
(),
targetCard
->
getName
(),
false
);
emit
logCreateArrow
(
this
,
startCard
->
getOwner
(),
startCard
->
getName
(),
targetCard
->
getOwner
(),
targetCard
->
getName
(),
false
);
else
else
emit
logCreateArrow
(
this
,
startCard
->
getOwner
(),
startCard
->
getName
(),
static_cast
<
Player
*>
(
arrow
->
getTargetItem
()
->
parentItem
()
),
QString
(),
true
);
emit
logCreateArrow
(
this
,
startCard
->
getOwner
(),
startCard
->
getName
(),
arrow
->
getTargetItem
()
->
getOwner
(
),
QString
(),
true
);
}
}
}
}
...
@@ -677,6 +678,43 @@ void Player::eventDestroyCard(Event_DestroyCard *event)
...
@@ -677,6 +678,43 @@ void Player::eventDestroyCard(Event_DestroyCard *event)
delete
card
;
delete
card
;
}
}
void
Player
::
eventAttachCard
(
Event_AttachCard
*
event
)
{
const
QMap
<
int
,
Player
*>
&
playerList
=
static_cast
<
TabGame
*>
(
parent
())
->
getPlayers
();
int
targetPlayerId
=
event
->
getTargetPlayerId
();
Player
*
targetPlayer
=
0
;
CardZone
*
targetZone
=
0
;
CardItem
*
targetCard
=
0
;
if
(
targetPlayerId
!=
-
1
)
targetPlayer
=
playerList
.
value
(
targetPlayerId
,
0
);
if
(
targetPlayer
)
targetZone
=
targetPlayer
->
getZones
().
value
(
event
->
getTargetZone
(),
0
);
if
(
targetZone
)
targetCard
=
targetZone
->
getCard
(
event
->
getTargetCardId
(),
QString
());
CardZone
*
startZone
=
getZones
().
value
(
event
->
getStartZone
(),
0
);
if
(
!
startZone
)
return
;
CardItem
*
startCard
=
startZone
->
getCard
(
event
->
getCardId
(),
QString
());
if
(
!
startCard
)
return
;
if
(
targetZone
)
startCard
->
setParentItem
(
targetZone
);
else
startCard
->
setParentItem
(
startZone
);
startCard
->
setAttachedTo
(
targetCard
);
startZone
->
reorganizeCards
();
if
((
startZone
!=
targetZone
)
&&
targetZone
)
targetZone
->
reorganizeCards
();
if
(
targetCard
)
emit
logAttachCard
(
this
,
startCard
->
getName
(),
targetPlayer
,
targetCard
->
getName
());
else
emit
logUnattachCard
(
this
,
startCard
->
getName
());
}
void
Player
::
eventDrawCards
(
Event_DrawCards
*
event
)
void
Player
::
eventDrawCards
(
Event_DrawCards
*
event
)
{
{
CardZone
*
deck
=
zones
.
value
(
"deck"
);
CardZone
*
deck
=
zones
.
value
(
"deck"
);
...
@@ -712,6 +750,7 @@ void Player::processGameEvent(GameEvent *event, GameEventContext *context)
...
@@ -712,6 +750,7 @@ void Player::processGameEvent(GameEvent *event, GameEventContext *context)
case
ItemId_Event_StopDumpZone
:
eventStopDumpZone
(
qobject_cast
<
Event_StopDumpZone
*>
(
event
));
break
;
case
ItemId_Event_StopDumpZone
:
eventStopDumpZone
(
qobject_cast
<
Event_StopDumpZone
*>
(
event
));
break
;
case
ItemId_Event_MoveCard
:
eventMoveCard
(
qobject_cast
<
Event_MoveCard
*>
(
event
));
break
;
case
ItemId_Event_MoveCard
:
eventMoveCard
(
qobject_cast
<
Event_MoveCard
*>
(
event
));
break
;
case
ItemId_Event_DestroyCard
:
eventDestroyCard
(
qobject_cast
<
Event_DestroyCard
*>
(
event
));
break
;
case
ItemId_Event_DestroyCard
:
eventDestroyCard
(
qobject_cast
<
Event_DestroyCard
*>
(
event
));
break
;
case
ItemId_Event_AttachCard
:
eventAttachCard
(
qobject_cast
<
Event_AttachCard
*>
(
event
));
break
;
case
ItemId_Event_DrawCards
:
eventDrawCards
(
qobject_cast
<
Event_DrawCards
*>
(
event
));
break
;
case
ItemId_Event_DrawCards
:
eventDrawCards
(
qobject_cast
<
Event_DrawCards
*>
(
event
));
break
;
default:
{
default:
{
qDebug
()
<<
"unhandled game event"
;
qDebug
()
<<
"unhandled game event"
;
...
@@ -746,8 +785,12 @@ void Player::processPlayerInfo(ServerInfo_Player *info)
...
@@ -746,8 +785,12 @@ void Player::processPlayerInfo(ServerInfo_Player *info)
while
(
zoneIt
.
hasNext
())
while
(
zoneIt
.
hasNext
())
zoneIt
.
next
().
value
()
->
clearContents
();
zoneIt
.
next
().
value
()
->
clearContents
();
for
(
int
i
=
0
;
i
<
info
->
getZoneList
().
size
();
++
i
)
{
clearCounters
();
ServerInfo_Zone
*
zoneInfo
=
info
->
getZoneList
()[
i
];
clearArrows
();
QList
<
ServerInfo_Zone
*>
zl
=
info
->
getZoneList
();
for
(
int
i
=
0
;
i
<
zl
.
size
();
++
i
)
{
ServerInfo_Zone
*
zoneInfo
=
zl
[
i
];
CardZone
*
zone
=
zones
.
value
(
zoneInfo
->
getName
(),
0
);
CardZone
*
zone
=
zones
.
value
(
zoneInfo
->
getName
(),
0
);
if
(
!
zone
)
if
(
!
zone
)
continue
;
continue
;
...
@@ -766,14 +809,38 @@ void Player::processPlayerInfo(ServerInfo_Player *info)
...
@@ -766,14 +809,38 @@ void Player::processPlayerInfo(ServerInfo_Player *info)
zone
->
reorganizeCards
();
zone
->
reorganizeCards
();
}
}
clear
Counter
s
();
QList
<
ServerInfo_Counter
*>
cl
=
info
->
get
Counter
List
();
for
(
int
i
=
0
;
i
<
info
->
getCounterList
()
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
cl
.
size
();
++
i
)
{
addCounter
(
info
->
getCounterList
()
.
at
(
i
));
addCounter
(
cl
.
at
(
i
));
}
}
clearArrows
();
QList
<
ServerInfo_Arrow
*>
al
=
info
->
getArrowList
();
for
(
int
i
=
0
;
i
<
info
->
getArrowList
().
size
();
++
i
)
for
(
int
i
=
0
;
i
<
al
.
size
();
++
i
)
addArrow
(
info
->
getArrowList
().
at
(
i
));
addArrow
(
al
.
at
(
i
));
}
void
Player
::
processCardAttachment
(
ServerInfo_Player
*
info
)
{
QList
<
ServerInfo_Zone
*>
zl
=
info
->
getZoneList
();
for
(
int
i
=
0
;
i
<
zl
.
size
();
++
i
)
{
ServerInfo_Zone
*
zoneInfo
=
zl
[
i
];
CardZone
*
zone
=
zones
.
value
(
zoneInfo
->
getName
(),
0
);
if
(
!
zone
)
continue
;
const
QList
<
ServerInfo_Card
*>
&
cardList
=
zoneInfo
->
getCardList
();
for
(
int
j
=
0
;
j
<
cardList
.
size
();
++
j
)
{
ServerInfo_Card
*
cardInfo
=
cardList
[
j
];
if
(
cardInfo
->
getAttachPlayerId
()
!=
-
1
)
{
CardItem
*
startCard
=
zone
->
getCard
(
cardInfo
->
getId
(),
QString
());
CardItem
*
targetCard
=
static_cast
<
TabGame
*>
(
parent
())
->
getCard
(
cardInfo
->
getAttachPlayerId
(),
cardInfo
->
getAttachZone
(),
cardInfo
->
getAttachCardId
());
if
(
!
targetCard
)
continue
;
startCard
->
setAttachedTo
(
targetCard
);
}
}
}
}
}
void
Player
::
addCard
(
CardItem
*
c
)
void
Player
::
addCard
(
CardItem
*
c
)
...
@@ -924,34 +991,34 @@ void Player::cardMenuAction()
...
@@ -924,34 +991,34 @@ void Player::cardMenuAction()
switch
(
a
->
data
().
toInt
())
{
switch
(
a
->
data
().
toInt
())
{
case
0
:
case
0
:
if
(
!
card
->
getTapped
())
if
(
!
card
->
getTapped
())
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"tapped"
,
"1"
));
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"tapped"
,
"1"
));
break
;
break
;
case
1
:
case
1
:
if
(
card
->
getTapped
())
if
(
card
->
getTapped
())
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"tapped"
,
"0"
));
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"tapped"
,
"0"
));
break
;
break
;
case
2
:
case
2
:
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"doesnt_untap"
,
QString
::
number
(
!
card
->
getDoesntUntap
())));
commandList
.
append
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"doesnt_untap"
,
QString
::
number
(
!
card
->
getDoesntUntap
())));
break
;
break
;
case
3
:
{
case
3
:
{
QString
zone
=
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
();
QString
zone
=
card
->
getZone
(
)
->
getName
();
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
zone
,
card
->
getId
(),
zone
,
card
->
getGridPoint
().
x
(),
card
->
getGridPoint
().
y
(),
!
card
->
getFaceDown
()));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
zone
,
card
->
getId
(),
zone
,
card
->
getGridPoint
().
x
(),
card
->
getGridPoint
().
y
(),
!
card
->
getFaceDown
()));
break
;
break
;
}
}
case
4
:
case
4
:
commandList
.
append
(
new
Command_CreateToken
(
-
1
,
static_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getName
(),
card
->
getColor
(),
card
->
getPT
(),
card
->
getAnnotation
(),
card
->
getDestroyOnZoneChange
(),
-
1
,
card
->
getGridPoint
().
y
()));
commandList
.
append
(
new
Command_CreateToken
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getName
(),
card
->
getColor
(),
card
->
getPT
(),
card
->
getAnnotation
(),
card
->
getDestroyOnZoneChange
(),
-
1
,
card
->
getGridPoint
().
y
()));
break
;
break
;
case
5
:
case
5
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
static_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"deck"
,
0
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"deck"
,
0
,
0
,
false
));
break
;
break
;
case
6
:
case
6
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
static_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"deck"
,
-
1
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"deck"
,
-
1
,
0
,
false
));
break
;
break
;
case
7
:
case
7
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
static_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"grave"
,
0
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"grave"
,
0
,
0
,
false
));
break
;
break
;
case
8
:
case
8
:
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
static_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"rfg"
,
0
,
0
,
false
));
commandList
.
append
(
new
Command_MoveCard
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"rfg"
,
0
,
0
,
false
));
break
;
break
;
default:
;
default:
;
}
}
...
@@ -976,7 +1043,7 @@ void Player::actSetPT()
...
@@ -976,7 +1043,7 @@ void Player::actSetPT()
i
.
toFront
();
i
.
toFront
();
while
(
i
.
hasNext
())
{
while
(
i
.
hasNext
())
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
sendGameCommand
(
new
Command_SetCardAttr
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"pt"
,
pt
));
sendGameCommand
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"pt"
,
pt
));
}
}
}
}
...
@@ -998,16 +1065,22 @@ void Player::actSetAnnotation()
...
@@ -998,16 +1065,22 @@ void Player::actSetAnnotation()
i
.
toFront
();
i
.
toFront
();
while
(
i
.
hasNext
())
{
while
(
i
.
hasNext
())
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
sendGameCommand
(
new
Command_SetCardAttr
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
"annotation"
,
annotation
));
sendGameCommand
(
new
Command_SetCardAttr
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
"annotation"
,
annotation
));
}
}
}
}
void
Player
::
actAttach
()
void
Player
::
actAttach
()
{
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
sender
()
->
parent
());
ArrowAttachItem
*
arrow
=
new
ArrowAttachItem
(
card
);
scene
()
->
addItem
(
arrow
);
arrow
->
grabMouse
();
}
}
void
Player
::
actUnattach
()
void
Player
::
actUnattach
()
{
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
sender
()
->
parent
());
sendGameCommand
(
new
Command_AttachCard
(
-
1
,
card
->
getZone
()
->
getName
(),
card
->
getId
(),
-
1
,
QString
(),
-
1
));
}
}
void
Player
::
actCardCounterTrigger
()
void
Player
::
actCardCounterTrigger
()
...
@@ -1022,7 +1095,7 @@ void Player::actCardCounterTrigger()
...
@@ -1022,7 +1095,7 @@ void Player::actCardCounterTrigger()
while
(
i
.
hasNext
())
{
while
(
i
.
hasNext
())
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
if
(
card
->
getCounters
().
value
(
counterId
,
0
)
<
MAX_COUNTERS_ON_CARD
)
if
(
card
->
getCounters
().
value
(
counterId
,
0
)
<
MAX_COUNTERS_ON_CARD
)
sendGameCommand
(
new
Command_SetCardCounter
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
counterId
,
card
->
getCounters
().
value
(
counterId
,
0
)
+
1
));
sendGameCommand
(
new
Command_SetCardCounter
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
counterId
,
card
->
getCounters
().
value
(
counterId
,
0
)
+
1
));
}
}
break
;
break
;
}
}
...
@@ -1031,7 +1104,7 @@ void Player::actCardCounterTrigger()
...
@@ -1031,7 +1104,7 @@ void Player::actCardCounterTrigger()
while
(
i
.
hasNext
())
{
while
(
i
.
hasNext
())
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
if
(
card
->
getCounters
().
value
(
counterId
,
0
))
if
(
card
->
getCounters
().
value
(
counterId
,
0
))
sendGameCommand
(
new
Command_SetCardCounter
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
counterId
,
card
->
getCounters
().
value
(
counterId
,
0
)
-
1
));
sendGameCommand
(
new
Command_SetCardCounter
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
counterId
,
card
->
getCounters
().
value
(
counterId
,
0
)
-
1
));
}
}
break
;
break
;
}
}
...
@@ -1044,7 +1117,7 @@ void Player::actCardCounterTrigger()
...
@@ -1044,7 +1117,7 @@ void Player::actCardCounterTrigger()
QListIterator
<
QGraphicsItem
*>
i
(
scene
()
->
selectedItems
());
QListIterator
<
QGraphicsItem
*>
i
(
scene
()
->
selectedItems
());
while
(
i
.
hasNext
())
{
while
(
i
.
hasNext
())
{
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
CardItem
*
card
=
static_cast
<
CardItem
*>
(
i
.
next
());
sendGameCommand
(
new
Command_SetCardCounter
(
-
1
,
qgraphicsitem_cast
<
CardZone
*>
(
card
->
parentItem
()
)
->
getName
(),
card
->
getId
(),
counterId
,
number
));
sendGameCommand
(
new
Command_SetCardCounter
(
-
1
,
card
->
getZone
(
)
->
getName
(),
card
->
getId
(),
counterId
,
number
));
}
}
break
;
break
;
}
}
...
...
cockatrice/src/player.h
View file @
614f1063
...
@@ -40,6 +40,7 @@ class Event_DumpZone;
...
@@ -40,6 +40,7 @@ class Event_DumpZone;
class
Event_StopDumpZone
;
class
Event_StopDumpZone
;
class
Event_MoveCard
;
class
Event_MoveCard
;
class
Event_DestroyCard
;
class
Event_DestroyCard
;
class
Event_AttachCard
;
class
Event_DrawCards
;
class
Event_DrawCards
;
class
Player
:
public
QObject
,
public
QGraphicsItem
{
class
Player
:
public
QObject
,
public
QGraphicsItem
{
...
@@ -55,6 +56,8 @@ signals:
...
@@ -55,6 +56,8 @@ signals:
void
logDrawCards
(
Player
*
player
,
int
number
);
void
logDrawCards
(
Player
*
player
,
int
number
);
void
logMoveCard
(
Player
*
player
,
QString
cardName
,
CardZone
*
startZone
,
int
oldX
,
CardZone
*
targetZone
,
int
newX
);
void
logMoveCard
(
Player
*
player
,
QString
cardName
,
CardZone
*
startZone
,
int
oldX
,
CardZone
*
targetZone
,
int
newX
);
void
logDestroyCard
(
Player
*
player
,
QString
cardName
);
void
logDestroyCard
(
Player
*
player
,
QString
cardName
);
void
logAttachCard
(
Player
*
player
,
QString
cardName
,
Player
*
targetPlayer
,
QString
targetCardName
);
void
logUnattachCard
(
Player
*
player
,
QString
cardName
);
void
logSetCardCounter
(
Player
*
player
,
QString
cardName
,
int
counterId
,
int
value
,
int
oldValue
);
void
logSetCardCounter
(
Player
*
player
,
QString
cardName
,
int
counterId
,
int
value
,
int
oldValue
);
void
logSetTapped
(
Player
*
player
,
QString
cardName
,
bool
tapped
);
void
logSetTapped
(
Player
*
player
,
QString
cardName
,
bool
tapped
);
void
logSetCounter
(
Player
*
player
,
QString
counterName
,
int
value
,
int
oldValue
);
void
logSetCounter
(
Player
*
player
,
QString
counterName
,
int
value
,
int
oldValue
);
...
@@ -144,6 +147,7 @@ private:
...
@@ -144,6 +147,7 @@ private:
void
eventStopDumpZone
(
Event_StopDumpZone
*
event
);
void
eventStopDumpZone
(
Event_StopDumpZone
*
event
);
void
eventMoveCard
(
Event_MoveCard
*
event
);
void
eventMoveCard
(
Event_MoveCard
*
event
);
void
eventDestroyCard
(
Event_DestroyCard
*
event
);
void
eventDestroyCard
(
Event_DestroyCard
*
event
);
void
eventAttachCard
(
Event_AttachCard
*
event
);
void
eventDrawCards
(
Event_DrawCards
*
event
);
void
eventDrawCards
(
Event_DrawCards
*
event
);
public:
public:
static
const
int
counterAreaWidth
=
65
;
static
const
int
counterAreaWidth
=
65
;
...
@@ -189,6 +193,8 @@ public:
...
@@ -189,6 +193,8 @@ public:
void
processSceneSizeChange
(
const
QSizeF
&
newSize
);
void
processSceneSizeChange
(
const
QSizeF
&
newSize
);
void
processPlayerInfo
(
ServerInfo_Player
*
info
);
void
processPlayerInfo
(
ServerInfo_Player
*
info
);
void
processCardAttachment
(
ServerInfo_Player
*
info
);
void
processGameEvent
(
GameEvent
*
event
,
GameEventContext
*
context
);
void
processGameEvent
(
GameEvent
*
event
,
GameEventContext
*
context
);
void
sendGameCommand
(
GameCommand
*
command
);
void
sendGameCommand
(
GameCommand
*
command
);
void
sendCommandContainer
(
CommandContainer
*
cont
);
void
sendCommandContainer
(
CommandContainer
*
cont
);
...
...
cockatrice/src/playertarget.cpp
View file @
614f1063
#include
"playertarget.h"
#include
"playertarget.h"
#include
"player.h"
#include
<QPainter>
#include
<QPainter>
PlayerTarget
::
PlayerTarget
(
const
QString
&
_name
,
int
_maxWidth
,
QGraphicsItem
*
parent
)
PlayerTarget
::
PlayerTarget
(
const
QString
&
_name
,
int
_maxWidth
,
Player
*
_owner
)
:
ArrowTarget
(
parent
),
name
(
_name
),
maxWidth
(
_maxWidth
)
:
ArrowTarget
(
_owner
,
_owner
),
name
(
_name
),
maxWidth
(
_maxWidth
)
{
{
font
=
QFont
(
"Times"
);
font
=
QFont
(
"Times"
);
font
.
setStyleHint
(
QFont
::
Serif
);
font
.
setStyleHint
(
QFont
::
Serif
);
...
...
cockatrice/src/playertarget.h
View file @
614f1063
...
@@ -4,6 +4,8 @@
...
@@ -4,6 +4,8 @@
#include
"arrowtarget.h"
#include
"arrowtarget.h"
#include
<QFont>
#include
<QFont>
class
Player
;
class
PlayerTarget
:
public
ArrowTarget
{
class
PlayerTarget
:
public
ArrowTarget
{
private:
private:
QString
name
;
QString
name
;
...
@@ -13,7 +15,7 @@ public:
...
@@ -13,7 +15,7 @@ public:
enum
{
Type
=
typePlayerTarget
};
enum
{
Type
=
typePlayerTarget
};
int
type
()
const
{
return
Type
;
}
int
type
()
const
{
return
Type
;
}
PlayerTarget
(
const
QString
&
_name
,
int
_maxWidth
,
QGraphicsItem
*
parent
=
0
);
PlayerTarget
(
const
QString
&
_name
,
int
_maxWidth
,
Player
*
parent
=
0
);
QRectF
boundingRect
()
const
;
QRectF
boundingRect
()
const
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
void
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
option
,
QWidget
*
widget
);
};
};
...
...
cockatrice/src/tab_game.cpp
View file @
614f1063
...
@@ -316,6 +316,7 @@ void TabGame::startGame()
...
@@ -316,6 +316,7 @@ void TabGame::startGame()
void
TabGame
::
stopGame
()
void
TabGame
::
stopGame
()
{
{
currentPhase
=
-
1
;
currentPhase
=
-
1
;
activePlayer
=
-
1
;
playerListWidget
->
setActivePlayer
(
-
1
);
playerListWidget
->
setActivePlayer
(
-
1
);
playerListWidget
->
setGameStarted
(
false
);
playerListWidget
->
setGameStarted
(
false
);
...
@@ -365,6 +366,16 @@ void TabGame::eventGameStateChanged(Event_GameStateChanged *event, GameEventCont
...
@@ -365,6 +366,16 @@ void TabGame::eventGameStateChanged(Event_GameStateChanged *event, GameEventCont
}
}
}
}
}
}
for
(
int
i
=
0
;
i
<
plList
.
size
();
++
i
)
{
ServerInfo_Player
*
pl
=
plList
[
i
];
ServerInfo_PlayerProperties
*
prop
=
pl
->
getProperties
();
if
(
!
prop
->
getSpectator
())
{
Player
*
player
=
players
.
value
(
prop
->
getPlayerId
(),
0
);
if
(
!
player
)
continue
;
player
->
processCardAttachment
(
pl
);
}
}
if
(
event
->
getGameStarted
()
&&
!
started
)
{
if
(
event
->
getGameStarted
()
&&
!
started
)
{
startGame
();
startGame
();
if
(
!
resuming
)
if
(
!
resuming
)
...
@@ -444,6 +455,7 @@ Player *TabGame::setActivePlayer(int id)
...
@@ -444,6 +455,7 @@ Player *TabGame::setActivePlayer(int id)
Player
*
player
=
players
.
value
(
id
,
0
);
Player
*
player
=
players
.
value
(
id
,
0
);
if
(
!
player
)
if
(
!
player
)
return
0
;
return
0
;
activePlayer
=
id
;
playerListWidget
->
setActivePlayer
(
id
);
playerListWidget
->
setActivePlayer
(
id
);
QMapIterator
<
int
,
Player
*>
i
(
players
);
QMapIterator
<
int
,
Player
*>
i
(
players
);
while
(
i
.
hasNext
())
{
while
(
i
.
hasNext
())
{
...
@@ -547,3 +559,33 @@ void TabGame::sideboardPlanChanged()
...
@@ -547,3 +559,33 @@ void TabGame::sideboardPlanChanged()
QList
<
MoveCardToZone
*>
newPlan
=
deckView
->
getSideboardPlan
();
QList
<
MoveCardToZone
*>
newPlan
=
deckView
->
getSideboardPlan
();
client
->
sendCommand
(
new
Command_SetSideboardPlan
(
gameId
,
newPlan
));
client
->
sendCommand
(
new
Command_SetSideboardPlan
(
gameId
,
newPlan
));
}
}
CardItem
*
TabGame
::
getCard
(
int
playerId
,
const
QString
&
zoneName
,
int
cardId
)
const
{
Player
*
player
=
players
.
value
(
playerId
,
0
);
if
(
!
player
)
return
0
;
CardZone
*
zone
=
player
->
getZones
().
value
(
zoneName
,
0
);
if
(
!
zone
)
return
0
;
return
zone
->
getCard
(
cardId
,
QString
());
}
Player
*
TabGame
::
getActiveLocalPlayer
()
const
{
Player
*
active
=
players
.
value
(
activePlayer
,
0
);
if
(
active
)
if
(
active
->
getLocal
())
return
active
;
QMapIterator
<
int
,
Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
{
Player
*
temp
=
playerIterator
.
next
().
value
();
if
(
temp
->
getLocal
())
return
temp
;
}
return
0
;
}
cockatrice/src/tab_game.h
View file @
614f1063
...
@@ -66,6 +66,7 @@ private:
...
@@ -66,6 +66,7 @@ private:
bool
started
;
bool
started
;
bool
resuming
;
bool
resuming
;
int
currentPhase
;
int
currentPhase
;
int
activePlayer
;
QPushButton
*
loadLocalButton
,
*
loadRemoteButton
;
QPushButton
*
loadLocalButton
,
*
loadRemoteButton
;
ReadyStartButton
*
readyStartButton
;
ReadyStartButton
*
readyStartButton
;
...
@@ -123,11 +124,13 @@ public:
...
@@ -123,11 +124,13 @@ public:
~
TabGame
();
~
TabGame
();
void
retranslateUi
();
void
retranslateUi
();
const
QMap
<
int
,
Player
*>
&
getPlayers
()
const
{
return
players
;
}
const
QMap
<
int
,
Player
*>
&
getPlayers
()
const
{
return
players
;
}
CardItem
*
getCard
(
int
playerId
,
const
QString
&
zoneName
,
int
cardId
)
const
;
int
getGameId
()
const
{
return
gameId
;
}
int
getGameId
()
const
{
return
gameId
;
}
QString
getTabText
()
const
{
return
tr
(
"Game %1: %2"
).
arg
(
gameId
).
arg
(
gameDescription
);
}
QString
getTabText
()
const
{
return
tr
(
"Game %1: %2"
).
arg
(
gameId
).
arg
(
gameDescription
);
}
bool
getSpectator
()
const
{
return
spectator
;
}
bool
getSpectator
()
const
{
return
spectator
;
}
bool
getSpectatorsCanTalk
()
const
{
return
spectatorsCanTalk
;
}
bool
getSpectatorsCanTalk
()
const
{
return
spectatorsCanTalk
;
}
bool
getSpectatorsSeeEverything
()
const
{
return
spectatorsSeeEverything
;
}
bool
getSpectatorsSeeEverything
()
const
{
return
spectatorsSeeEverything
;
}
Player
*
getActiveLocalPlayer
()
const
;
void
processGameEventContainer
(
GameEventContainer
*
cont
);
void
processGameEventContainer
(
GameEventContainer
*
cont
);
public
slots
:
public
slots
:
...
...
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