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
c57e138a
Commit
c57e138a
authored
Oct 20, 2009
by
Max-Wilhelm Bruker
Browse files
prepareGeometryChange bugfix; more arrows code
parent
961b42f7
Changes
13
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/arrowitem.cpp
View file @
c57e138a
...
@@ -7,8 +7,8 @@
...
@@ -7,8 +7,8 @@
#include
<QGraphicsSceneMouseEvent>
#include
<QGraphicsSceneMouseEvent>
#include
<QGraphicsScene>
#include
<QGraphicsScene>
ArrowItem
::
ArrowItem
(
CardItem
*
_startItem
,
CardItem
*
_targetItem
)
ArrowItem
::
ArrowItem
(
int
_id
,
CardItem
*
_startItem
,
CardItem
*
_targetItem
,
const
QColor
&
_color
)
:
QGraphicsItem
(),
startItem
(
_startItem
),
targetItem
(
_targetItem
)
:
QGraphicsItem
(),
id
(
_id
),
startItem
(
_startItem
),
targetItem
(
_targetItem
)
,
color
(
_color
),
fullColor
(
true
)
{
{
setZValue
(
2000000005
);
setZValue
(
2000000005
);
if
(
startItem
&&
targetItem
)
if
(
startItem
&&
targetItem
)
...
@@ -17,7 +17,6 @@ ArrowItem::ArrowItem(CardItem *_startItem, CardItem *_targetItem)
...
@@ -17,7 +17,6 @@ ArrowItem::ArrowItem(CardItem *_startItem, CardItem *_targetItem)
void
ArrowItem
::
updatePath
()
void
ArrowItem
::
updatePath
()
{
{
color
=
QColor
(
255
,
0
,
0
,
200
);
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
));
updatePath
(
endPoint
);
updatePath
(
endPoint
);
}
}
...
@@ -32,6 +31,7 @@ void ArrowItem::updatePath(const QPointF &endPoint)
...
@@ -32,6 +31,7 @@ void ArrowItem::updatePath(const QPointF &endPoint)
QLineF
line
(
startPoint
,
endPoint
);
QLineF
line
(
startPoint
,
endPoint
);
qreal
lineLength
=
line
.
length
();
qreal
lineLength
=
line
.
length
();
prepareGeometryChange
();
if
(
lineLength
<
headLength
)
if
(
lineLength
<
headLength
)
path
=
QPainterPath
();
path
=
QPainterPath
();
else
{
else
{
...
@@ -51,12 +51,17 @@ void ArrowItem::updatePath(const QPointF &endPoint)
...
@@ -51,12 +51,17 @@ void ArrowItem::updatePath(const QPointF &endPoint)
void
ArrowItem
::
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
/*option*/
,
QWidget
*
/*widget*/
)
void
ArrowItem
::
paint
(
QPainter
*
painter
,
const
QStyleOptionGraphicsItem
*
/*option*/
,
QWidget
*
/*widget*/
)
{
{
painter
->
setBrush
(
color
);
QColor
paintColor
(
color
);
if
(
fullColor
)
paintColor
.
setAlpha
(
200
);
else
paintColor
.
setAlpha
(
150
);
painter
->
setBrush
(
paintColor
);
painter
->
drawPath
(
path
);
painter
->
drawPath
(
path
);
}
}
ArrowDragItem
::
ArrowDragItem
(
CardItem
*
_startItem
)
ArrowDragItem
::
ArrowDragItem
(
CardItem
*
_startItem
)
:
ArrowItem
(
_startItem
)
:
ArrowItem
(
-
1
,
_startItem
)
{
{
}
}
...
@@ -71,10 +76,11 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -71,10 +76,11 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if
((
cursorItem
=
qgraphicsitem_cast
<
CardItem
*>
(
colliding
.
at
(
i
))))
if
((
cursorItem
=
qgraphicsitem_cast
<
CardItem
*>
(
colliding
.
at
(
i
))))
break
;
break
;
if
(
!
cursorItem
)
{
if
(
!
cursorItem
)
{
fullColor
=
false
;
targetItem
=
0
;
targetItem
=
0
;
updatePath
(
endPos
);
updatePath
(
endPos
);
color
=
QColor
(
190
,
0
,
0
,
150
);
}
else
{
}
else
{
fullColor
=
true
;
targetItem
=
cursorItem
;
targetItem
=
cursorItem
;
updatePath
();
updatePath
();
}
}
...
@@ -92,7 +98,8 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * /*event*/)
...
@@ -92,7 +98,8 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * /*event*/)
startItem
->
getId
(),
startItem
->
getId
(),
targetZone
->
getPlayer
()
->
getId
(),
targetZone
->
getPlayer
()
->
getId
(),
targetZone
->
getName
(),
targetZone
->
getName
(),
targetItem
->
getId
()
targetItem
->
getId
(),
color
);
);
}
}
deleteLater
();
deleteLater
();
...
...
cockatrice/src/arrowitem.h
View file @
c57e138a
...
@@ -11,14 +11,22 @@ class ArrowItem : public QObject, public QGraphicsItem {
...
@@ -11,14 +11,22 @@ class ArrowItem : public QObject, public QGraphicsItem {
private:
private:
QPainterPath
path
;
QPainterPath
path
;
protected:
protected:
QColor
color
;
int
id
;
CardItem
*
startItem
,
*
targetItem
;
CardItem
*
startItem
,
*
targetItem
;
QColor
color
;
bool
fullColor
;
public:
public:
ArrowItem
(
CardItem
*
_startItem
=
0
,
CardItem
*
_targetItem
=
0
);
ArrowItem
(
int
id
,
CardItem
*
_startItem
=
0
,
CardItem
*
_targetItem
=
0
,
const
QColor
&
color
=
Qt
::
red
);
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
();
}
void
updatePath
();
void
updatePath
();
void
updatePath
(
const
QPointF
&
endPoint
);
void
updatePath
(
const
QPointF
&
endPoint
);
int
getId
()
const
{
return
id
;
}
void
setStartItem
(
CardItem
*
_item
)
{
startItem
=
_item
;
}
void
setTargetItem
(
CardItem
*
_item
)
{
targetItem
=
_item
;
}
CardItem
*
getStartItem
()
const
{
return
startItem
;
}
CardItem
*
getTargetItem
()
const
{
return
targetItem
;
}
};
};
class
ArrowDragItem
:
public
ArrowItem
{
class
ArrowDragItem
:
public
ArrowItem
{
...
...
cockatrice/src/client.cpp
View file @
c57e138a
...
@@ -23,6 +23,7 @@ ServerEventData::ServerEventData(const QString &line)
...
@@ -23,6 +23,7 @@ ServerEventData::ServerEventData(const QString &line)
eventHash
.
insert
(
"move_card"
,
eventMoveCard
);
eventHash
.
insert
(
"move_card"
,
eventMoveCard
);
eventHash
.
insert
(
"create_token"
,
eventCreateToken
);
eventHash
.
insert
(
"create_token"
,
eventCreateToken
);
eventHash
.
insert
(
"create_arrow"
,
eventCreateArrow
);
eventHash
.
insert
(
"create_arrow"
,
eventCreateArrow
);
eventHash
.
insert
(
"delete_arrow"
,
eventDeleteArrow
);
eventHash
.
insert
(
"set_card_attr"
,
eventSetCardAttr
);
eventHash
.
insert
(
"set_card_attr"
,
eventSetCardAttr
);
eventHash
.
insert
(
"add_counter"
,
eventAddCounter
);
eventHash
.
insert
(
"add_counter"
,
eventAddCounter
);
eventHash
.
insert
(
"set_counter"
,
eventSetCounter
);
eventHash
.
insert
(
"set_counter"
,
eventSetCounter
);
...
@@ -110,6 +111,7 @@ void PendingCommand_DumpAll::responseReceived(ServerResponse resp)
...
@@ -110,6 +111,7 @@ void PendingCommand_DumpAll::responseReceived(ServerResponse resp)
emit
zoneListReceived
(
zoneList
);
emit
zoneListReceived
(
zoneList
);
emit
cardListReceived
(
cardList
);
emit
cardListReceived
(
cardList
);
emit
counterListReceived
(
counterList
);
emit
counterListReceived
(
counterList
);
emit
arrowListReceived
(
arrowList
);
}
}
PendingCommand
::
responseReceived
(
resp
);
PendingCommand
::
responseReceived
(
resp
);
}
}
...
@@ -319,8 +321,7 @@ void Client::readLine()
...
@@ -319,8 +321,7 @@ void Client::readLine()
}
}
int
cmdid
=
values
.
takeFirst
().
toInt
();
int
cmdid
=
values
.
takeFirst
().
toInt
();
PendingCommand
*
pc
=
pendingCommands
.
value
(
cmdid
,
0
);
PendingCommand
*
pc
=
pendingCommands
.
value
(
cmdid
,
0
);
int
colorValue
=
values
[
3
].
toInt
();
ServerCounter
sc
(
values
[
0
].
toInt
(),
values
[
1
].
toInt
(),
values
[
2
],
numberToColor
(
values
[
3
].
toInt
()),
values
[
4
].
toInt
(),
values
[
5
].
toInt
());
ServerCounter
sc
(
values
[
0
].
toInt
(),
values
[
1
].
toInt
(),
values
[
2
],
QColor
(
colorValue
/
65536
,
(
colorValue
%
65536
)
/
256
,
colorValue
%
256
),
values
[
4
].
toInt
(),
values
[
5
].
toInt
());
PendingCommand_ListCounters
*
pcLC
=
qobject_cast
<
PendingCommand_ListCounters
*>
(
pc
);
PendingCommand_ListCounters
*
pcLC
=
qobject_cast
<
PendingCommand_ListCounters
*>
(
pc
);
if
(
pcLC
)
if
(
pcLC
)
...
@@ -332,6 +333,20 @@ void Client::readLine()
...
@@ -332,6 +333,20 @@ void Client::readLine()
else
else
emit
protocolError
();
emit
protocolError
();
}
}
}
else
if
(
prefix
==
"list_arrows"
)
{
if
(
values
.
size
()
!=
10
)
{
emit
protocolError
();
continue
;
}
int
cmdid
=
values
.
takeFirst
().
toInt
();
PendingCommand
*
pc
=
pendingCommands
.
value
(
cmdid
,
0
);
ServerArrow
sa
(
values
[
0
].
toInt
(),
values
[
1
].
toInt
(),
values
[
2
].
toInt
(),
values
[
3
],
values
[
4
].
toInt
(),
values
[
5
].
toInt
(),
values
[
6
],
values
[
7
].
toInt
(),
numberToColor
(
values
[
8
].
toInt
()));
PendingCommand_DumpAll
*
pcDA
=
qobject_cast
<
PendingCommand_DumpAll
*>
(
pc
);
if
(
pcDA
)
pcDA
->
addArrow
(
sa
);
else
emit
protocolError
();
}
else
}
else
emit
protocolError
();
emit
protocolError
();
}
}
...
@@ -498,9 +513,9 @@ PendingCommand *Client::createToken(const QString &zone, const QString &name, co
...
@@ -498,9 +513,9 @@ PendingCommand *Client::createToken(const QString &zone, const QString &name, co
return
cmd
(
QString
(
"create_token|%1|%2|%3|%4|%5"
).
arg
(
zone
).
arg
(
name
).
arg
(
powtough
).
arg
(
x
).
arg
(
y
));
return
cmd
(
QString
(
"create_token|%1|%2|%3|%4|%5"
).
arg
(
zone
).
arg
(
name
).
arg
(
powtough
).
arg
(
x
).
arg
(
y
));
}
}
PendingCommand
*
Client
::
createArrow
(
int
startPlayerId
,
const
QString
&
startZone
,
int
startCardId
,
int
targetPlayerId
,
const
QString
&
targetPlayerZone
,
int
targetCardId
)
PendingCommand
*
Client
::
createArrow
(
int
startPlayerId
,
const
QString
&
startZone
,
int
startCardId
,
int
targetPlayerId
,
const
QString
&
targetPlayerZone
,
int
targetCardId
,
const
QColor
&
color
)
{
{
return
cmd
(
QString
(
"create_arrow|%1|%2|%3|%4|%5|%6"
).
arg
(
startPlayerId
).
arg
(
startZone
).
arg
(
startCardId
).
arg
(
targetPlayerId
).
arg
(
targetPlayerZone
).
arg
(
targetCardId
));
return
cmd
(
QString
(
"create_arrow|%1|%2|%3|%4|%5|%6
|%7
"
).
arg
(
startPlayerId
).
arg
(
startZone
).
arg
(
startCardId
).
arg
(
targetPlayerId
).
arg
(
targetPlayerZone
).
arg
(
targetCardId
)
.
arg
(
colorToNumber
(
color
))
);
}
}
PendingCommand
*
Client
::
setCardAttr
(
const
QString
&
zone
,
int
cardid
,
const
QString
&
aname
,
const
QString
&
avalue
)
PendingCommand
*
Client
::
setCardAttr
(
const
QString
&
zone
,
int
cardid
,
const
QString
&
aname
,
const
QString
&
avalue
)
...
@@ -529,7 +544,7 @@ PendingCommand *Client::incCounter(int counterId, int delta)
...
@@ -529,7 +544,7 @@ PendingCommand *Client::incCounter(int counterId, int delta)
PendingCommand
*
Client
::
addCounter
(
const
QString
&
counterName
,
QColor
color
,
int
radius
,
int
value
)
PendingCommand
*
Client
::
addCounter
(
const
QString
&
counterName
,
QColor
color
,
int
radius
,
int
value
)
{
{
return
cmd
(
QString
(
"add_counter|%1|%2|%3|%4"
).
arg
(
counterName
).
arg
(
color
.
red
()
*
65536
+
color
.
green
()
*
256
+
color
.
blue
(
)).
arg
(
radius
).
arg
(
value
));
return
cmd
(
QString
(
"add_counter|%1|%2|%3|%4"
).
arg
(
counterName
).
arg
(
color
ToNumber
(
color
)).
arg
(
radius
).
arg
(
value
));
}
}
PendingCommand
*
Client
::
setCounter
(
int
counterId
,
int
value
)
PendingCommand
*
Client
::
setCounter
(
int
counterId
,
int
value
)
...
@@ -584,3 +599,13 @@ PendingCommand_DumpAll *Client::dumpAll()
...
@@ -584,3 +599,13 @@ PendingCommand_DumpAll *Client::dumpAll()
cmd
(
"dump_all"
,
pc
);
cmd
(
"dump_all"
,
pc
);
return
pc
;
return
pc
;
}
}
QColor
Client
::
numberToColor
(
int
colorValue
)
const
{
return
QColor
(
colorValue
/
65536
,
(
colorValue
%
65536
)
/
256
,
colorValue
%
256
);
}
int
Client
::
colorToNumber
(
const
QColor
&
color
)
const
{
return
color
.
red
()
*
65536
+
color
.
green
()
*
256
+
color
.
blue
();
}
cockatrice/src/client.h
View file @
c57e138a
...
@@ -45,6 +45,7 @@ enum ServerEventType {
...
@@ -45,6 +45,7 @@ enum ServerEventType {
eventMoveCard
,
eventMoveCard
,
eventCreateToken
,
eventCreateToken
,
eventCreateArrow
,
eventCreateArrow
,
eventDeleteArrow
,
eventSetCardAttr
,
eventSetCardAttr
,
eventAddCounter
,
eventAddCounter
,
eventSetCounter
,
eventSetCounter
,
...
@@ -195,6 +196,31 @@ public:
...
@@ -195,6 +196,31 @@ public:
int
getCount
()
const
{
return
count
;
}
int
getCount
()
const
{
return
count
;
}
};
};
class
ServerArrow
{
private:
int
id
;
int
playerId
;
int
startPlayerId
;
QString
startZone
;
int
startCardId
;
int
targetPlayerId
;
QString
targetZone
;
int
targetCardId
;
QColor
color
;
public:
ServerArrow
(
int
_playerId
,
int
_id
,
int
_startPlayerId
,
const
QString
&
_startZone
,
int
_startCardId
,
int
_targetPlayerId
,
const
QString
&
_targetZone
,
int
_targetCardId
,
const
QColor
&
_color
)
:
id
(
_id
),
playerId
(
_playerId
),
startPlayerId
(
_startPlayerId
),
startZone
(
_startZone
),
startCardId
(
_startCardId
),
targetPlayerId
(
_targetPlayerId
),
targetZone
(
_targetZone
),
targetCardId
(
_targetCardId
),
color
(
_color
)
{
}
int
getId
()
const
{
return
id
;
}
int
getPlayerId
()
const
{
return
playerId
;
}
int
getStartPlayerId
()
const
{
return
startPlayerId
;
}
QString
getStartZone
()
const
{
return
startZone
;
}
int
getStartCardId
()
const
{
return
startCardId
;
}
int
getTargetPlayerId
()
const
{
return
targetPlayerId
;
}
QString
getTargetZone
()
const
{
return
targetZone
;
}
int
getTargetCardId
()
const
{
return
targetCardId
;
}
QColor
getColor
()
const
{
return
color
;
}
};
class
PendingCommand
:
public
QObject
{
class
PendingCommand
:
public
QObject
{
Q_OBJECT
Q_OBJECT
private:
private:
...
@@ -288,17 +314,20 @@ private:
...
@@ -288,17 +314,20 @@ private:
QList
<
ServerZone
>
zoneList
;
QList
<
ServerZone
>
zoneList
;
QList
<
ServerZoneCard
>
cardList
;
QList
<
ServerZoneCard
>
cardList
;
QList
<
ServerCounter
>
counterList
;
QList
<
ServerCounter
>
counterList
;
QList
<
ServerArrow
>
arrowList
;
signals:
signals:
void
playerListReceived
(
QList
<
ServerPlayer
>
_playerList
);
void
playerListReceived
(
QList
<
ServerPlayer
>
_playerList
);
void
zoneListReceived
(
QList
<
ServerZone
>
_zoneList
);
void
zoneListReceived
(
QList
<
ServerZone
>
_zoneList
);
void
cardListReceived
(
QList
<
ServerZoneCard
>
_cardList
);
void
cardListReceived
(
QList
<
ServerZoneCard
>
_cardList
);
void
counterListReceived
(
QList
<
ServerCounter
>
_counterList
);
void
counterListReceived
(
QList
<
ServerCounter
>
_counterList
);
void
arrowListReceived
(
QList
<
ServerArrow
>
_arrowList
);
public:
public:
void
responseReceived
(
ServerResponse
resp
);
void
responseReceived
(
ServerResponse
resp
);
void
addPlayer
(
const
ServerPlayer
&
player
)
{
playerList
.
append
(
player
);
}
void
addPlayer
(
const
ServerPlayer
&
player
)
{
playerList
.
append
(
player
);
}
void
addZone
(
const
ServerZone
&
zone
)
{
zoneList
.
append
(
zone
);
}
void
addZone
(
const
ServerZone
&
zone
)
{
zoneList
.
append
(
zone
);
}
void
addCard
(
const
ServerZoneCard
&
card
)
{
cardList
.
append
(
card
);
}
void
addCard
(
const
ServerZoneCard
&
card
)
{
cardList
.
append
(
card
);
}
void
addCounter
(
const
ServerCounter
&
counter
)
{
counterList
.
append
(
counter
);
}
void
addCounter
(
const
ServerCounter
&
counter
)
{
counterList
.
append
(
counter
);
}
void
addArrow
(
const
ServerArrow
&
arrow
)
{
arrowList
.
append
(
arrow
);
}
};
};
class
Client
:
public
QObject
{
class
Client
:
public
QObject
{
...
@@ -346,6 +375,9 @@ public:
...
@@ -346,6 +375,9 @@ public:
void
connectToServer
(
const
QString
&
hostname
,
unsigned
int
port
,
const
QString
&
_playerName
,
const
QString
&
_password
);
void
connectToServer
(
const
QString
&
hostname
,
unsigned
int
port
,
const
QString
&
_playerName
,
const
QString
&
_password
);
void
disconnectFromServer
();
void
disconnectFromServer
();
QColor
numberToColor
(
int
colorValue
)
const
;
int
colorToNumber
(
const
QColor
&
color
)
const
;
public
slots
:
public
slots
:
PendingCommand
*
chatListChannels
();
PendingCommand
*
chatListChannels
();
PendingCommand_ChatJoinChannel
*
chatJoinChannel
(
const
QString
&
name
);
PendingCommand_ChatJoinChannel
*
chatJoinChannel
(
const
QString
&
name
);
...
@@ -364,7 +396,7 @@ public slots:
...
@@ -364,7 +396,7 @@ public slots:
PendingCommand
*
drawCards
(
unsigned
int
number
);
PendingCommand
*
drawCards
(
unsigned
int
number
);
PendingCommand
*
moveCard
(
int
cardid
,
const
QString
&
startzone
,
const
QString
&
targetzone
,
int
x
,
int
y
=
0
,
bool
faceDown
=
false
);
PendingCommand
*
moveCard
(
int
cardid
,
const
QString
&
startzone
,
const
QString
&
targetzone
,
int
x
,
int
y
=
0
,
bool
faceDown
=
false
);
PendingCommand
*
createToken
(
const
QString
&
zone
,
const
QString
&
name
,
const
QString
&
powtough
,
int
x
,
int
y
);
PendingCommand
*
createToken
(
const
QString
&
zone
,
const
QString
&
name
,
const
QString
&
powtough
,
int
x
,
int
y
);
PendingCommand
*
createArrow
(
int
startPlayerId
,
const
QString
&
startZone
,
int
startCardId
,
int
targetPlayerId
,
const
QString
&
targetPlayerZone
,
int
targetCardId
);
PendingCommand
*
createArrow
(
int
startPlayerId
,
const
QString
&
startZone
,
int
startCardId
,
int
targetPlayerId
,
const
QString
&
targetPlayerZone
,
int
targetCardId
,
const
QColor
&
color
);
PendingCommand
*
setCardAttr
(
const
QString
&
zone
,
int
cardid
,
const
QString
&
aname
,
const
QString
&
avalue
);
PendingCommand
*
setCardAttr
(
const
QString
&
zone
,
int
cardid
,
const
QString
&
aname
,
const
QString
&
avalue
);
PendingCommand
*
readyStart
();
PendingCommand
*
readyStart
();
PendingCommand
*
incCounter
(
int
counterId
,
int
delta
);
PendingCommand
*
incCounter
(
int
counterId
,
int
delta
);
...
...
cockatrice/src/game.cpp
View file @
c57e138a
...
@@ -137,6 +137,7 @@ Player *Game::addPlayer(int playerId, const QString &playerName, bool local)
...
@@ -137,6 +137,7 @@ Player *Game::addPlayer(int playerId, const QString &playerName, bool local)
connect
(
newPlayer
,
SIGNAL
(
logSetCardCounters
(
Player
*
,
QString
,
int
,
int
)),
this
,
SIGNAL
(
logSetCardCounters
(
Player
*
,
QString
,
int
,
int
)));
connect
(
newPlayer
,
SIGNAL
(
logSetCardCounters
(
Player
*
,
QString
,
int
,
int
)),
this
,
SIGNAL
(
logSetCardCounters
(
Player
*
,
QString
,
int
,
int
)));
connect
(
newPlayer
,
SIGNAL
(
logSetTapped
(
Player
*
,
QString
,
bool
)),
this
,
SIGNAL
(
logSetTapped
(
Player
*
,
QString
,
bool
)));
connect
(
newPlayer
,
SIGNAL
(
logSetTapped
(
Player
*
,
QString
,
bool
)),
this
,
SIGNAL
(
logSetTapped
(
Player
*
,
QString
,
bool
)));
connect
(
newPlayer
,
SIGNAL
(
logSetCounter
(
Player
*
,
QString
,
int
,
int
)),
this
,
SIGNAL
(
logSetCounter
(
Player
*
,
QString
,
int
,
int
)));
connect
(
newPlayer
,
SIGNAL
(
logSetCounter
(
Player
*
,
QString
,
int
,
int
)),
this
,
SIGNAL
(
logSetCounter
(
Player
*
,
QString
,
int
,
int
)));
connect
(
newPlayer
,
SIGNAL
(
logCreateArrow
(
Player
*
,
Player
*
,
QString
,
Player
*
,
QString
)),
this
,
SIGNAL
(
logCreateArrow
(
Player
*
,
Player
*
,
QString
,
Player
*
,
QString
)));
connect
(
newPlayer
,
SIGNAL
(
logSetDoesntUntap
(
Player
*
,
QString
,
bool
)),
this
,
SIGNAL
(
logSetDoesntUntap
(
Player
*
,
QString
,
bool
)));
connect
(
newPlayer
,
SIGNAL
(
logSetDoesntUntap
(
Player
*
,
QString
,
bool
)),
this
,
SIGNAL
(
logSetDoesntUntap
(
Player
*
,
QString
,
bool
)));
players
.
insert
(
playerId
,
newPlayer
);
players
.
insert
(
playerId
,
newPlayer
);
...
@@ -203,6 +204,36 @@ void Game::counterListReceived(QList<ServerCounter> list)
...
@@ -203,6 +204,36 @@ void Game::counterListReceived(QList<ServerCounter> list)
}
}
}
}
void
Game
::
arrowListReceived
(
QList
<
ServerArrow
>
list
)
{
QMapIterator
<
int
,
Player
*>
i
(
players
);
while
(
i
.
hasNext
())
i
.
next
().
value
()
->
clearArrows
();
for
(
int
i
=
0
;
i
<
list
.
size
();
++
i
)
{
Player
*
p
=
players
.
value
(
list
[
i
].
getPlayerId
(),
0
);
if
(
!
p
)
continue
;
Player
*
startPlayer
=
players
.
value
(
list
[
i
].
getStartPlayerId
(),
0
);
Player
*
targetPlayer
=
players
.
value
(
list
[
i
].
getTargetPlayerId
(),
0
);
if
(
!
startPlayer
||
!
targetPlayer
)
continue
;
CardZone
*
startZone
=
startPlayer
->
getZones
().
value
(
list
[
i
].
getStartZone
(),
0
);
CardZone
*
targetZone
=
targetPlayer
->
getZones
().
value
(
list
[
i
].
getTargetZone
(),
0
);
if
(
!
startZone
||
!
targetZone
)
continue
;
CardItem
*
startCard
=
startZone
->
getCard
(
list
[
i
].
getStartCardId
(),
QString
());
CardItem
*
targetCard
=
targetZone
->
getCard
(
list
[
i
].
getTargetCardId
(),
QString
());
if
(
!
startCard
||
!
targetCard
)
continue
;
p
->
addArrow
(
list
[
i
].
getId
(),
startCard
,
targetCard
,
list
[
i
].
getColor
());
}
}
void
Game
::
playerListReceived
(
QList
<
ServerPlayer
>
playerList
)
void
Game
::
playerListReceived
(
QList
<
ServerPlayer
>
playerList
)
{
{
QStringList
nameList
;
QStringList
nameList
;
...
@@ -321,26 +352,8 @@ void Game::gameEvent(const ServerEventData &msg)
...
@@ -321,26 +352,8 @@ void Game::gameEvent(const ServerEventData &msg)
}
}
break
;
break
;
}
}
case
eventCreateArrow
:
{
case
eventCreateArrow
:
const
QStringList
&
data
=
msg
.
getEventData
();
case
eventDeleteArrow
:
Player
*
startPlayer
=
players
.
value
(
data
[
0
].
toInt
(),
0
);
Player
*
targetPlayer
=
players
.
value
(
data
[
3
].
toInt
(),
0
);
if
(
!
startPlayer
||
!
targetPlayer
)
break
;
CardZone
*
startZone
=
startPlayer
->
getZones
().
value
(
data
[
1
],
0
);
CardZone
*
targetZone
=
targetPlayer
->
getZones
().
value
(
data
[
4
],
0
);
if
(
!
startZone
||
!
targetZone
)
break
;
CardItem
*
startCard
=
startZone
->
getCard
(
data
[
2
].
toInt
(),
QString
());
CardItem
*
targetCard
=
targetZone
->
getCard
(
data
[
5
].
toInt
(),
QString
());
if
(
!
startCard
||
!
targetCard
)
break
;
emit
logCreateArrow
(
p
,
startPlayer
,
startCard
->
getName
(),
targetPlayer
,
targetCard
->
getName
());
ArrowItem
*
arrow
=
new
ArrowItem
(
startCard
,
targetCard
);
scene
->
addItem
(
arrow
);
break
;
}
case
eventCreateToken
:
case
eventCreateToken
:
case
eventSetupZones
:
case
eventSetupZones
:
case
eventSetCardAttr
:
case
eventSetCardAttr
:
...
@@ -512,6 +525,7 @@ void Game::queryGameState()
...
@@ -512,6 +525,7 @@ void Game::queryGameState()
connect
(
pc
,
SIGNAL
(
zoneListReceived
(
QList
<
ServerZone
>
)),
this
,
SLOT
(
zoneListReceived
(
QList
<
ServerZone
>
)));
connect
(
pc
,
SIGNAL
(
zoneListReceived
(
QList
<
ServerZone
>
)),
this
,
SLOT
(
zoneListReceived
(
QList
<
ServerZone
>
)));
connect
(
pc
,
SIGNAL
(
cardListReceived
(
QList
<
ServerZoneCard
>
)),
this
,
SLOT
(
cardListReceived
(
QList
<
ServerZoneCard
>
)));
connect
(
pc
,
SIGNAL
(
cardListReceived
(
QList
<
ServerZoneCard
>
)),
this
,
SLOT
(
cardListReceived
(
QList
<
ServerZoneCard
>
)));
connect
(
pc
,
SIGNAL
(
counterListReceived
(
QList
<
ServerCounter
>
)),
this
,
SLOT
(
counterListReceived
(
QList
<
ServerCounter
>
)));
connect
(
pc
,
SIGNAL
(
counterListReceived
(
QList
<
ServerCounter
>
)),
this
,
SLOT
(
counterListReceived
(
QList
<
ServerCounter
>
)));
connect
(
pc
,
SIGNAL
(
arrowListReceived
(
QList
<
ServerArrow
>
)),
this
,
SLOT
(
arrowListReceived
(
QList
<
ServerArrow
>
)));
}
}
void
Game
::
activePlayerDrawCard
()
void
Game
::
activePlayerDrawCard
()
...
@@ -543,4 +557,4 @@ Player *Game::getActiveLocalPlayer() const
...
@@ -543,4 +557,4 @@ Player *Game::getActiveLocalPlayer() const
return
p
;
return
p
;
}
}
return
0
;
return
0
;
}
}
\ No newline at end of file
cockatrice/src/game.h
View file @
c57e138a
...
@@ -68,6 +68,7 @@ private slots:
...
@@ -68,6 +68,7 @@ private slots:
void
cardListReceived
(
QList
<
ServerZoneCard
>
list
);
void
cardListReceived
(
QList
<
ServerZoneCard
>
list
);
void
zoneListReceived
(
QList
<
ServerZone
>
list
);
void
zoneListReceived
(
QList
<
ServerZone
>
list
);
void
counterListReceived
(
QList
<
ServerCounter
>
list
);
void
counterListReceived
(
QList
<
ServerCounter
>
list
);
void
arrowListReceived
(
QList
<
ServerArrow
>
list
);
void
readyStart
();
void
readyStart
();
signals:
signals:
...
@@ -107,6 +108,7 @@ public:
...
@@ -107,6 +108,7 @@ public:
void
restartGameDialog
();
void
restartGameDialog
();
void
hoverCardEvent
(
CardItem
*
card
);
void
hoverCardEvent
(
CardItem
*
card
);
Player
*
addPlayer
(
int
playerId
,
const
QString
&
playerName
,
bool
local
);
Player
*
addPlayer
(
int
playerId
,
const
QString
&
playerName
,
bool
local
);
const
QMap
<
int
,
Player
*>
&
getPlayers
()
const
{
return
players
;
}
void
queryGameState
();
void
queryGameState
();
};
};
...
...
cockatrice/src/player.cpp
View file @
c57e138a
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
#include
"client.h"
#include
"client.h"
#include
"cardzone.h"
#include
"cardzone.h"
#include
"counter.h"
#include
"counter.h"
#include
"arrowitem.h"
#include
"zoneviewzone.h"
#include
"zoneviewzone.h"
#include
"zoneviewwidget.h"
#include
"zoneviewwidget.h"
#include
"game.h"
#include
"game.h"
...
@@ -205,6 +206,7 @@ Player::~Player()
...
@@ -205,6 +206,7 @@ Player::~Player()
delete
i
.
next
().
value
();
delete
i
.
next
().
value
();
clearCounters
();
clearCounters
();
clearArrows
();
delete
playerMenu
;
delete
playerMenu
;
}
}
...
@@ -428,6 +430,7 @@ void Player::gameEvent(const ServerEventData &event)
...
@@ -428,6 +430,7 @@ void Player::gameEvent(const ServerEventData &event)
}
}
clearCounters
();
clearCounters
();
clearArrows
();
CardZone
*
deck
=
zones
.
value
(
"deck"
);
CardZone
*
deck
=
zones
.
value
(
"deck"
);
for
(;
deck_cards
;
deck_cards
--
)
for
(;
deck_cards
;
deck_cards
--
)
...
@@ -486,11 +489,9 @@ void Player::gameEvent(const ServerEventData &event)
...
@@ -486,11 +489,9 @@ void Player::gameEvent(const ServerEventData &event)
break
;
break
;
}
}
int
x
=
data
[
5
].
toInt
();
int
x
=
data
[
5
].
toInt
();
int
y
=
data
[
6
].
toInt
();
int
y
=
data
[
6
].
toInt
();
bool
facedown
=
data
[
7
].
toInt
();
bool
facedown
=
data
[
7
].
toInt
();
// XXX Mehr Fehlerbehandlung
int
logPosition
=
position
;
int
logPosition
=
position
;
int
logX
=
x
;
int
logX
=
x
;
...
@@ -499,9 +500,11 @@ void Player::gameEvent(const ServerEventData &event)
...
@@ -499,9 +500,11 @@ void Player::gameEvent(const ServerEventData &event)
if
(
x
==
-
1
)
if
(
x
==
-
1
)
x
=
0
;
x
=
0
;
CardItem
*
card
=
startZone
->
takeCard
(
position
,
cardId
,
cardName
,
startZone
!=
targetZone
);
CardItem
*
card
=
startZone
->
takeCard
(
position
,
cardId
,
cardName
,
startZone
!=
targetZone
);
if
(
!
card
)
// XXX
if
(
!
card
)
{
qDebug
(
"moveCard: card not found"
);
qDebug
(
"moveCard: card not found"
);
break
;
}
card
->
deleteDragItem
();
card
->
deleteDragItem
();
card
->
setFaceDown
(
facedown
);
card
->
setFaceDown
(
facedown
);
...
@@ -512,6 +515,27 @@ void Player::gameEvent(const ServerEventData &event)
...
@@ -512,6 +515,27 @@ void Player::gameEvent(const ServerEventData &event)
targetZone
->
addCard
(
card
,
true
,
x
,
y
);
targetZone
->
addCard
(
card
,
true
,
x
,
y
);
// Look at all arrows from and to the card.
// If the card was moved to another zone, delete the arrows, otherwise update them.
QMapIterator
<
int
,
Player
*>
playerIterator
(
static_cast
<
Game
*>
(
parent
())
->
getPlayers
());
while
(
playerIterator
.
hasNext
())
{
Player
*
p
=
playerIterator
.
next
().
value
();
QList
<
int
>
arrowsToDelete
;
QMapIterator
<
int
,
ArrowItem
*>
arrowIterator
(
p
->
getArrows
());
while
(
arrowIterator
.
hasNext
())
{
ArrowItem
*
arrow
=
arrowIterator
.
next
().
value
();
if
((
arrow
->
getStartItem
()
==
card
)
||
(
arrow
->
getTargetItem
()
==
card
))
{
if
(
startZone
==
targetZone
)
arrow
->
updatePath
();
else
arrowsToDelete
.
append
(
arrow
->
getId
());
}
}
for
(
int
i
=
0
;
i
<
arrowsToDelete
.
size
();
++
i
)
p
->
delArrow
(
arrowsToDelete
[
i
]);
}
break
;
break
;
}
}
case
eventCreateToken
:
{
case
eventCreateToken
:
{
...
@@ -582,6 +606,39 @@ void Player::gameEvent(const ServerEventData &event)
...
@@ -582,6 +606,39 @@ void Player::gameEvent(const ServerEventData &event)
emit
logSetCounter
(
this
,
c
->
getName
(),
value
,
oldValue
);
emit
logSetCounter
(
this
,
c
->
getName
(),
value
,
oldValue
);
break
;
break
;
}
}
case
eventCreateArrow
:
{
if
(
data
.
size
()
!=
8
)
break
;
const
QMap
<
int
,
Player
*>
&
playerList
=
static_cast
<
Game
*>
(
parent
())
->
getPlayers
();
Player
*
startPlayer
=
playerList
.
value
(
data
[
1
].
toInt
(),
0
);
Player
*
targetPlayer
=
playerList
.
value
(
data
[
4
].
toInt
(),
0
);
if
(
!
startPlayer
||
!
targetPlayer
)
return
;
CardZone
*
startZone
=
startPlayer
->
getZones
().
value
(
data
[
2
],
0
);
CardZone
*
targetZone
=
targetPlayer
->
getZones
().
value
(
data
[
5
],
0
);
if
(
!
startZone
||
!
targetZone
)
return
;
CardItem
*
startCard
=
startZone
->
getCard
(
data
[
3
].
toInt
(),
QString
());
CardItem
*
targetCard
=
targetZone
->
getCard
(
data
[
6
].
toInt
(),
QString
());
if
(
!
startCard
||
!
targetCard
)
return
;
addArrow
(
data
[
0
].
toInt
(),
startCard
,
targetCard
,
client
->
numberToColor
(
data
[
7
].
toInt
()));
emit
logCreateArrow
(
this
,
startPlayer
,
startCard
->
getName
(),
targetPlayer
,
targetCard
->
getName
());
break
;
}
case
eventDeleteArrow
:
{
if
(
data
.
size
()
!=
1
)
break
;
delArrow
(
data
[
0
].
toInt
());
break
;
}
default:
default:
qDebug
(
"unhandled player event"
);
qDebug
(
"unhandled player event"
);
}
}
...
@@ -666,6 +723,30 @@ void Player::clearCounters()
...
@@ -666,6 +723,30 @@ void Player::clearCounters()
counters
.
clear
();
counters
.
clear
();
}
}
void
Player
::
addArrow
(
int
arrowId
,
CardItem
*
startCard
,
CardItem
*
targetCard
,
const
QColor
&
color
)
{
ArrowItem
*
arrow
=
new
ArrowItem
(
arrowId
,
startCard
,
targetCard
,
color
);
arrows
.
insert
(
arrowId
,
arrow
);
scene
()
->
addItem
(
arrow
);
}
void
Player
::
delArrow
(
int
arrowId
)
{
ArrowItem
*
a
=
arrows
.
value
(
arrowId
,
0
);
if
(
!
a
)
return
;
arrows
.
remove
(
arrowId
);
delete
a
;
}
void
Player
::
clearArrows
()
{
QMapIterator
<
int
,
ArrowItem
*>
arrowIterator
(
arrows
);
while
(
arrowIterator
.
hasNext
())
delete
arrowIterator
.
next
().
value
();
arrows
.
clear
();
}
void
Player
::
rearrangeCounters
()
void
Player
::
rearrangeCounters
()
{
{
qreal
marginTop
=
50
;
qreal
marginTop
=
50
;
...
...
cockatrice/src/player.h
View file @
c57e138a
...
@@ -14,6 +14,7 @@ class QAction;
...
@@ -14,6 +14,7 @@ class QAction;
class
ZoneViewZone
;
class
ZoneViewZone
;
class
Game
;
class
Game
;
class
Counter
;
class
Counter
;
class
ArrowItem
;
class
CardZone
;
class
CardZone
;
class
TableZone
;
class
TableZone
;
class
HandZone
;
class
HandZone
;
...
@@ -32,6 +33,7 @@ signals:
...
@@ -32,6 +33,7 @@ signals:
void
logSetCardCounters
(
Player
*
player
,
QString
cardName
,
int
value
,
int
oldValue
);
void
logSetCardCounters
(
Player
*
player
,
QString
cardName
,
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
);
void
logCreateArrow
(
Player
*
player
,
Player
*
startPlayer
,
QString
startCard
,
Player
*
targetPlayer
,
QString
targetCard
);
void
logSetDoesntUntap
(
Player
*
player
,
QString
cardName
,
bool
doesntUntap
);
void
logSetDoesntUntap
(
Player
*
player
,
QString
cardName
,
bool
doesntUntap
);
void
sizeChanged
();
void
sizeChanged
();
...
@@ -80,6 +82,7 @@ private:
...
@@ -80,6 +82,7 @@ private:
QRectF
bRect
;
QRectF
bRect
;
QMap
<
int
,
Counter
*>
counters
;
QMap
<
int
,
Counter
*>
counters
;
QMap
<
int
,
ArrowItem
*>
arrows
;
void
rearrangeCounters
();
void
rearrangeCounters
();
void
initSayMenu
();
void
initSayMenu
();
...
@@ -94,6 +97,10 @@ public:
...
@@ -94,6 +97,10 @@ public:
void
addCounter
(
int
counterId
,
const
QString
&
name
,
QColor
color
,
int
radius
,
int
value
);
void
addCounter
(
int
counterId
,
const
QString
&
name
,
QColor
color
,
int
radius
,
int
value
);
void
delCounter
(
int
counterId
);
void
delCounter
(
int
counterId
);
void
clearCounters
();
void
clearCounters
();
void
addArrow
(
int
arrowId
,
CardItem
*
startCard
,
CardItem
*
targetCard
,
const
QColor
&
color
);
void
delArrow
(
int
arrowId
);
void
clearArrows
();
Client
*
client
;
Client
*
client
;
void
addZone
(
CardZone
*
z
);
void
addZone
(
CardZone
*
z
);
...
@@ -105,6 +112,7 @@ public:
...
@@ -105,6 +112,7 @@ public:
QString
getName
()
const
{
return
name
;
}
QString
getName
()
const
{
return
name
;
}
bool
getLocal
()
const
{
return
local
;
}
bool
getLocal
()
const
{
return
local
;
}
const
QMap
<
QString
,
CardZone
*>
&
getZones
()
const
{
return
zones
;
}
const
QMap
<
QString
,
CardZone
*>
&
getZones
()
const
{
return
zones
;
}
const
QMap
<
int
,
ArrowItem
*>
&
getArrows
()
const
{
return
arrows
;
}
TableZone
*
getTable
()
const
{
return
table
;
}
TableZone
*
getTable
()
const
{
return
table
;
}
void
gameEvent
(
const
ServerEventData
&
event
);
void
gameEvent
(
const
ServerEventData
&
event
);
CardDatabase
*
getDb
()
const
{
return
db
;
}
CardDatabase
*
getDb
()
const
{
return
db
;
}
...
...
cockatrice/src/tablezone.cpp
View file @
c57e138a
...
@@ -109,6 +109,7 @@ void TableZone::resizeToContents()
...
@@ -109,6 +109,7 @@ void TableZone::resizeToContents()
xMax
=
minWidth
;
xMax
=
minWidth
;
int
newWidth
=
xMax
+
2
*
marginX
;
int
newWidth
=
xMax
+
2
*
marginX
;
if
(
newWidth
!=
width
)
{
if
(
newWidth
!=
width
)
{
prepareGeometryChange
();
width
=
newWidth
;
width
=
newWidth
;
emit
sizeChanged
();
emit
sizeChanged
();
}
}
...
...
servatrice/src/arrow.h
View file @
c57e138a
...
@@ -5,11 +5,13 @@ class Card;
...
@@ -5,11 +5,13 @@ class Card;
class
Arrow
{
class
Arrow
{
private:
private:
int
id
;
Card
*
startCard
,
*
targetCard
;
Card
*
startCard
,
*
targetCard
;
int
color
;
int
color
;
public:
public:
Arrow
(
Card
*
_startCard
,
Card
*
_targetCard
,
int
_color
)
Arrow
(
int
_id
,
Card
*
_startCard
,
Card
*
_targetCard
,
int
_color
)
:
startCard
(
_startCard
),
targetCard
(
_targetCard
),
color
(
_color
)
{
}
:
id
(
_id
),
startCard
(
_startCard
),
targetCard
(
_targetCard
),
color
(
_color
)
{
}
int
getId
()
const
{
return
id
;
}
Card
*
getStartCard
()
const
{
return
startCard
;
}
Card
*
getStartCard
()
const
{
return
startCard
;
}
Card
*
getTargetCard
()
const
{
return
targetCard
;
}
Card
*
getTargetCard
()
const
{
return
targetCard
;
}
int
getColor
()
const
{
return
color
;
}
int
getColor
()
const
{
return
color
;
}
...
...
servatrice/src/servergame.h
View file @
c57e138a
...
@@ -49,13 +49,13 @@ public:
...
@@ -49,13 +49,13 @@ public:
bool
getGameStarted
()
const
{
return
gameStarted
;
}
bool
getGameStarted
()
const
{
return
gameStarted
;
}
int
getPlayerCount
()
const
{
return
players
.
size
();
}
int
getPlayerCount
()
const
{
return
players
.
size
();
}
const
QList
<
ServerSocket
*>
&
getPlayers
()
const
{
return
players
;
}
const
QList
<
ServerSocket
*>
&
getPlayers
()
const
{
return
players
;
}
ServerSocket
*
getPlayer
(
int
playerId
);
int
getGameId
()
const
{
return
gameId
;
}
int
getGameId
()
const
{
return
gameId
;
}
QString
getDescription
()
const
{
return
description
;
}
QString
getDescription
()
const
{
return
description
;
}
QString
getPassword
()
const
{
return
password
;
}
QString
getPassword
()
const
{
return
password
;
}
int
getMaxPlayers
()
const
{
return
maxPlayers
;
}
int
getMaxPlayers
()
const
{
return
maxPlayers
;
}
bool
getSpectatorsAllowed
()
const
{
return
spectatorsAllowed
;
}
bool
getSpectatorsAllowed
()
const
{
return
spectatorsAllowed
;
}
QString
getGameListLine
()
const
;
QString
getGameListLine
()
const
;
ServerSocket
*
getPlayer
(
int
playerId
);
ReturnMessage
::
ReturnCode
checkJoin
(
const
QString
&
_password
,
bool
spectator
);
ReturnMessage
::
ReturnCode
checkJoin
(
const
QString
&
_password
,
bool
spectator
);
void
addPlayer
(
ServerSocket
*
player
,
bool
spectator
);
void
addPlayer
(
ServerSocket
*
player
,
bool
spectator
);
void
removePlayer
(
ServerSocket
*
player
);
void
removePlayer
(
ServerSocket
*
player
);
...
...
servatrice/src/serversocket.cpp
View file @
c57e138a
...
@@ -93,11 +93,6 @@ ServerSocket::ServerSocket(Server *_server, QObject *parent)
...
@@ -93,11 +93,6 @@ ServerSocket::ServerSocket(Server *_server, QObject *parent)
<<
QVariant
::
Int
<<
QVariant
::
Int
<<
QVariant
::
Int
,
&
ServerSocket
::
cmdCreateArrow
));
<<
QVariant
::
Int
,
&
ServerSocket
::
cmdCreateArrow
));
commandHash
.
insert
(
"delete_arrow"
,
CommandProperties
(
true
,
true
,
true
,
false
,
QList
<
QVariant
::
Type
>
()
commandHash
.
insert
(
"delete_arrow"
,
CommandProperties
(
true
,
true
,
true
,
false
,
QList
<
QVariant
::
Type
>
()
<<
QVariant
::
Int
<<
QVariant
::
String
<<
QVariant
::
Int
<<
QVariant
::
Int
<<
QVariant
::
String
<<
QVariant
::
Int
,
&
ServerSocket
::
cmdDeleteArrow
));
<<
QVariant
::
Int
,
&
ServerSocket
::
cmdDeleteArrow
));
commandHash
.
insert
(
"set_card_attr"
,
CommandProperties
(
true
,
true
,
true
,
false
,
QList
<
QVariant
::
Type
>
()
commandHash
.
insert
(
"set_card_attr"
,
CommandProperties
(
true
,
true
,
true
,
false
,
QList
<
QVariant
::
Type
>
()
<<
QVariant
::
String
<<
QVariant
::
String
...
@@ -173,6 +168,18 @@ int ServerSocket::newCounterId() const
...
@@ -173,6 +168,18 @@ int ServerSocket::newCounterId() const
return
id
+
1
;
return
id
+
1
;
}
}
int
ServerSocket
::
newArrowId
()
const
{
int
id
=
0
;
QMapIterator
<
int
,
Arrow
*>
i
(
arrows
);
while
(
i
.
hasNext
())
{
Arrow
*
a
=
i
.
next
().
value
();
if
(
a
->
getId
()
>
id
)
id
=
a
->
getId
();
}
return
id
+
1
;
}
PlayerZone
*
ServerSocket
::
getZone
(
const
QString
&
name
)
const
PlayerZone
*
ServerSocket
::
getZone
(
const
QString
&
name
)
const
{
{
QListIterator
<
PlayerZone
*>
ZoneIterator
(
zones
);
QListIterator
<
PlayerZone
*>
ZoneIterator
(
zones
);
...
@@ -233,8 +240,9 @@ void ServerSocket::clearZones()
...
@@ -233,8 +240,9 @@ void ServerSocket::clearZones()
delete
counterIterator
.
next
().
value
();
delete
counterIterator
.
next
().
value
();
counters
.
clear
();
counters
.
clear
();
for
(
int
i
=
0
;
i
<
arrows
.
size
();
i
++
)
QMapIterator
<
int
,
Arrow
*>
arrowIterator
(
arrows
);
delete
arrows
.
at
(
i
);
while
(
arrowIterator
.
hasNext
())
delete
arrowIterator
.
next
().
value
();
arrows
.
clear
();
arrows
.
clear
();
}
}
...
@@ -248,6 +256,16 @@ void ServerSocket::leaveGame()
...
@@ -248,6 +256,16 @@ void ServerSocket::leaveGame()
clearZones
();
clearZones
();
}
}
bool
ServerSocket
::
deleteArrow
(
int
arrowId
)
{
Arrow
*
arrow
=
arrows
.
value
(
arrowId
,
0
);
if
(
!
arrow
)
return
false
;
arrows
.
remove
(
arrowId
);
delete
arrow
;
return
true
;
}
void
ServerSocket
::
readClient
()
void
ServerSocket
::
readClient
()
{
{
while
(
canReadLine
())
{
while
(
canReadLine
())
{
...
@@ -556,6 +574,23 @@ ReturnMessage::ReturnCode ServerSocket::cmdMoveCard(const QList<QVariant> ¶m
...
@@ -556,6 +574,23 @@ ReturnMessage::ReturnCode ServerSocket::cmdMoveCard(const QList<QVariant> ¶m
.
arg
(
targetzone
->
getName
())
.
arg
(
targetzone
->
getName
())
.
arg
(
x
)
.
arg
(
x
)
.
arg
(
y
),
this
);
.
arg
(
y
),
this
);
// If the card was moved to another zone, delete all arrows from and to the card
if
(
startzone
!=
targetzone
)
{
const
QList
<
ServerSocket
*>
&
players
=
game
->
getPlayers
();
for
(
int
i
=
0
;
i
<
players
.
size
();
++
i
)
{
QList
<
int
>
arrowsToDelete
;
QMapIterator
<
int
,
Arrow
*>
arrowIterator
(
players
[
i
]
->
getArrows
());
while
(
arrowIterator
.
hasNext
())
{
Arrow
*
arrow
=
arrowIterator
.
next
().
value
();
if
((
arrow
->
getStartCard
()
==
card
)
||
(
arrow
->
getTargetCard
()
==
card
))
arrowsToDelete
.
append
(
arrow
->
getId
());
}
for
(
int
j
=
0
;
j
<
arrowsToDelete
.
size
();
++
j
)
players
[
i
]
->
deleteArrow
(
arrowsToDelete
[
j
]);
}
}
return
ReturnMessage
::
ReturnOk
;
return
ReturnMessage
::
ReturnOk
;
}
}
...
@@ -597,13 +632,18 @@ ReturnMessage::ReturnCode ServerSocket::cmdCreateArrow(const QList<QVariant> &pa
...
@@ -597,13 +632,18 @@ ReturnMessage::ReturnCode ServerSocket::cmdCreateArrow(const QList<QVariant> &pa
Card
*
targetCard
=
targetZone
->
getCard
(
params
[
5
].
toInt
(),
false
);
Card
*
targetCard
=
targetZone
->
getCard
(
params
[
5
].
toInt
(),
false
);
if
(
!
startCard
||
!
targetCard
||
(
startCard
==
targetCard
))
if
(
!
startCard
||
!
targetCard
||
(
startCard
==
targetCard
))
return
ReturnMessage
::
ReturnContextError
;
return
ReturnMessage
::
ReturnContextError
;
for
(
int
i
=
0
;
i
<
arrows
.
size
();
++
i
)
QMapIterator
<
int
,
Arrow
*>
arrowIterator
(
arrows
);
if
((
arrows
[
i
]
->
getStartCard
()
==
startCard
)
&&
(
arrows
[
i
]
->
getTargetCard
()
==
targetCard
))
while
(
arrowIterator
.
hasNext
())
{
Arrow
*
temp
=
arrowIterator
.
next
().
value
();
if
((
temp
->
getStartCard
()
==
startCard
)
&&
(
temp
->
getTargetCard
()
==
targetCard
))
return
ReturnMessage
::
ReturnContextError
;
return
ReturnMessage
::
ReturnContextError
;
}
int
color
=
params
[
6
].
toInt
();
int
color
=
params
[
6
].
toInt
();
arrows
.
append
(
new
Arrow
(
startCard
,
targetCard
,
color
));
Arrow
*
arrow
=
new
Arrow
(
newArrowId
(),
startCard
,
targetCard
,
color
);
emit
broadcastEvent
(
QString
(
"create_arrow|%1|%2|%3|%4|%5|%6|%7"
)
arrows
.
insert
(
arrow
->
getId
(),
arrow
);
emit
broadcastEvent
(
QString
(
"create_arrow|%1|%2|%3|%4|%5|%6|%7|%8"
)
.
arg
(
arrow
->
getId
())
.
arg
(
startPlayer
->
getPlayerId
())
.
arg
(
startPlayer
->
getPlayerId
())
.
arg
(
startZone
->
getName
())
.
arg
(
startZone
->
getName
())
.
arg
(
startCard
->
getId
())
.
arg
(
startCard
->
getId
())
...
@@ -617,34 +657,11 @@ ReturnMessage::ReturnCode ServerSocket::cmdCreateArrow(const QList<QVariant> &pa
...
@@ -617,34 +657,11 @@ ReturnMessage::ReturnCode ServerSocket::cmdCreateArrow(const QList<QVariant> &pa
ReturnMessage
::
ReturnCode
ServerSocket
::
cmdDeleteArrow
(
const
QList
<
QVariant
>
&
params
)
ReturnMessage
::
ReturnCode
ServerSocket
::
cmdDeleteArrow
(
const
QList
<
QVariant
>
&
params
)
{
{
ServerSocket
*
startPlayer
=
game
->
getPlayer
(
params
[
0
].
toInt
());
int
arrowId
=
params
[
0
].
toInt
();
ServerSocket
*
targetPlayer
=
game
->
getPlayer
(
params
[
3
].
toInt
());
if
(
!
deleteArrow
(
arrowId
))
if
(
!
startPlayer
||
!
targetPlayer
)
return
ReturnMessage
::
ReturnContextError
;
PlayerZone
*
startZone
=
startPlayer
->
getZone
(
params
[
1
].
toString
());
PlayerZone
*
targetZone
=
targetPlayer
->
getZone
(
params
[
4
].
toString
());
if
(
!
startZone
||
!
targetZone
)
return
ReturnMessage
::
ReturnContextError
;
return
ReturnMessage
::
ReturnContextError
;
Card
*
startCard
=
startZone
->
getCard
(
params
[
2
].
toInt
(),
false
);
Card
*
targetCard
=
targetZone
->
getCard
(
params
[
5
].
toInt
(),
false
);
Arrow
*
arrow
=
0
;
emit
broadcastEvent
(
QString
(
"delete_arrow|%1"
).
arg
(
arrowId
),
this
);
for
(
int
i
=
0
;
i
<
arrows
.
size
();
++
i
)
if
((
arrows
[
i
]
->
getStartCard
()
==
startCard
)
&&
(
arrows
[
i
]
->
getTargetCard
()
==
targetCard
))
{
arrow
=
arrows
.
takeAt
(
i
);
break
;
}
if
(
!
arrow
)
return
ReturnMessage
::
ReturnContextError
;
emit
broadcastEvent
(
QString
(
"delete_arrow|%1|%2|%3|%4|%5|%6"
)
.
arg
(
startPlayer
->
getPlayerId
())
.
arg
(
startZone
->
getName
())
.
arg
(
startCard
->
getId
())
.
arg
(
targetPlayer
->
getPlayerId
())
.
arg
(
targetZone
->
getName
())
.
arg
(
targetCard
->
getId
()),
this
);
return
ReturnMessage
::
ReturnOk
;
return
ReturnMessage
::
ReturnOk
;
}
}
...
@@ -866,15 +883,18 @@ ReturnMessage::ReturnCode ServerSocket::cmdSetActivePhase(const QList<QVariant>
...
@@ -866,15 +883,18 @@ ReturnMessage::ReturnCode ServerSocket::cmdSetActivePhase(const QList<QVariant>
QStringList
ServerSocket
::
listArrowsHelper
(
ServerSocket
*
player
)
QStringList
ServerSocket
::
listArrowsHelper
(
ServerSocket
*
player
)
{
{
QStringList
result
;
QStringList
result
;
const
QList
<
Arrow
*>
&
arrowList
=
player
->
getArrows
();
QMapIterator
<
int
,
Arrow
*>
arrowIterator
(
player
->
getArrows
());
for
(
int
i
=
0
;
i
<
arrowList
.
size
();
++
i
)
{
while
(
arrowIterator
.
hasNext
())
{
Card
*
startCard
=
arrowList
[
i
]
->
getStartCard
();
Arrow
*
arrow
=
arrowIterator
.
next
().
value
();
Card
*
targetCard
=
arrowList
[
i
]
->
getTargetCard
();
Card
*
startCard
=
arrow
->
getStartCard
();
Card
*
targetCard
=
arrow
->
getTargetCard
();
PlayerZone
*
startZone
=
startCard
->
getZone
();
PlayerZone
*
startZone
=
startCard
->
getZone
();
PlayerZone
*
targetZone
=
targetCard
->
getZone
();
PlayerZone
*
targetZone
=
targetCard
->
getZone
();
ServerSocket
*
startPlayer
=
startZone
->
getPlayer
();
ServerSocket
*
startPlayer
=
startZone
->
getPlayer
();
ServerSocket
*
targetPlayer
=
targetZone
->
getPlayer
();
ServerSocket
*
targetPlayer
=
targetZone
->
getPlayer
();
result
<<
QString
(
"%1|%2|%3|%4|%5|%6|%7"
).
arg
(
startPlayer
->
getPlayerName
()).
arg
(
startZone
->
getName
()).
arg
(
startCard
->
getId
()).
arg
(
targetPlayer
->
getPlayerName
()).
arg
(
targetZone
->
getName
()).
arg
(
targetCard
->
getId
()).
arg
(
arrowList
[
i
]
->
getColor
());
result
<<
QString
(
"%1|%2|%3|%4|%5|%6|%7|%8|%9"
).
arg
(
player
->
getPlayerId
()).
arg
(
arrow
->
getId
()).
arg
(
startPlayer
->
getPlayerId
()).
arg
(
startZone
->
getName
()).
arg
(
startCard
->
getId
()).
arg
(
targetPlayer
->
getPlayerId
()).
arg
(
targetZone
->
getName
()).
arg
(
targetCard
->
getId
()).
arg
(
arrow
->
getColor
());
}
}
return
result
;
return
result
;
}
}
...
...
servatrice/src/serversocket.h
View file @
c57e138a
...
@@ -115,13 +115,14 @@ private:
...
@@ -115,13 +115,14 @@ private:
QList
<
QString
>
SideboardList
;
QList
<
QString
>
SideboardList
;
QList
<
PlayerZone
*>
zones
;
QList
<
PlayerZone
*>
zones
;
QMap
<
int
,
Counter
*>
counters
;
QMap
<
int
,
Counter
*>
counters
;
Q
List
<
Arrow
*>
arrows
;
Q
Map
<
int
,
Arrow
*>
arrows
;
int
playerId
;
int
playerId
;
QString
playerName
;
QString
playerName
;
bool
spectator
;
bool
spectator
;
int
nextCardId
;
int
nextCardId
;
int
newCardId
();
int
newCardId
();
int
newCounterId
()
const
;
int
newCounterId
()
const
;
int
newArrowId
()
const
;
PlayerZone
*
getZone
(
const
QString
&
name
)
const
;
PlayerZone
*
getZone
(
const
QString
&
name
)
const
;
void
clearZones
();
void
clearZones
();
bool
parseCommand
(
QString
line
);
bool
parseCommand
(
QString
line
);
...
@@ -149,7 +150,8 @@ public:
...
@@ -149,7 +150,8 @@ public:
bool
getAcceptsChatChannelListChanges
()
const
{
return
acceptsChatChannelListChanges
;
}
bool
getAcceptsChatChannelListChanges
()
const
{
return
acceptsChatChannelListChanges
;
}
const
QList
<
PlayerZone
*>
&
getZones
()
const
{
return
zones
;
}
const
QList
<
PlayerZone
*>
&
getZones
()
const
{
return
zones
;
}
const
QMap
<
int
,
Counter
*>
&
getCounters
()
const
{
return
counters
;
}
const
QMap
<
int
,
Counter
*>
&
getCounters
()
const
{
return
counters
;
}
const
QList
<
Arrow
*>
&
getArrows
()
const
{
return
arrows
;
}
const
QMap
<
int
,
Arrow
*>
&
getArrows
()
const
{
return
arrows
;
}
bool
deleteArrow
(
int
arrowId
);
void
setupZones
();
void
setupZones
();
};
};
...
...
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