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
a171df74
Commit
a171df74
authored
Feb 11, 2014
by
Matt Kelly
Browse files
Convert to 4-space indents
parent
ac8c967d
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/abstractclient.cpp
View file @
a171df74
...
...
@@ -20,31 +20,31 @@
#include
"client_metatypes.h"
AbstractClient
::
AbstractClient
(
QObject
*
parent
)
:
QObject
(
parent
),
nextCmdId
(
0
),
status
(
StatusDisconnected
)
:
QObject
(
parent
),
nextCmdId
(
0
),
status
(
StatusDisconnected
)
{
qRegisterMetaType
<
QVariant
>
(
"QVariant"
);
qRegisterMetaType
<
CommandContainer
>
(
"CommandContainer"
);
qRegisterMetaType
<
Response
>
(
"Response"
);
qRegisterMetaType
<
Response
::
ResponseCode
>
(
"Response::ResponseCode"
);
qRegisterMetaType
<
ClientStatus
>
(
"ClientStatus"
);
qRegisterMetaType
<
RoomEvent
>
(
"RoomEvent"
);
qRegisterMetaType
<
GameEventContainer
>
(
"GameEventContainer"
);
qRegisterMetaType
<
Event_ServerIdentification
>
(
"Event_ServerIdentification"
);
qRegisterMetaType
<
Event_ConnectionClosed
>
(
"Event_ConnectionClosed"
);
qRegisterMetaType
<
Event_ServerShutdown
>
(
"Event_ServerShutdown"
);
qRegisterMetaType
<
Event_AddToList
>
(
"Event_AddToList"
);
qRegisterMetaType
<
Event_RemoveFromList
>
(
"Event_RemoveFromList"
);
qRegisterMetaType
<
Event_UserJoined
>
(
"Event_UserJoined"
);
qRegisterMetaType
<
Event_UserLeft
>
(
"Event_UserLeft"
);
qRegisterMetaType
<
Event_ServerMessage
>
(
"Event_ServerMessage"
);
qRegisterMetaType
<
Event_ListRooms
>
(
"Event_ListRooms"
);
qRegisterMetaType
<
Event_GameJoined
>
(
"Event_GameJoined"
);
qRegisterMetaType
<
Event_UserMessage
>
(
"Event_UserMessage"
);
qRegisterMetaType
<
ServerInfo_User
>
(
"ServerInfo_User"
);
qRegisterMetaType
<
QList
<
ServerInfo_User
>
>
(
"QList<ServerInfo_User>"
);
qRegisterMetaType
<
Event_ReplayAdded
>
(
"Event_ReplayAdded"
);
connect
(
this
,
SIGNAL
(
sigQueuePendingCommand
(
PendingCommand
*
)),
this
,
SLOT
(
queuePendingCommand
(
PendingCommand
*
)));
qRegisterMetaType
<
QVariant
>
(
"QVariant"
);
qRegisterMetaType
<
CommandContainer
>
(
"CommandContainer"
);
qRegisterMetaType
<
Response
>
(
"Response"
);
qRegisterMetaType
<
Response
::
ResponseCode
>
(
"Response::ResponseCode"
);
qRegisterMetaType
<
ClientStatus
>
(
"ClientStatus"
);
qRegisterMetaType
<
RoomEvent
>
(
"RoomEvent"
);
qRegisterMetaType
<
GameEventContainer
>
(
"GameEventContainer"
);
qRegisterMetaType
<
Event_ServerIdentification
>
(
"Event_ServerIdentification"
);
qRegisterMetaType
<
Event_ConnectionClosed
>
(
"Event_ConnectionClosed"
);
qRegisterMetaType
<
Event_ServerShutdown
>
(
"Event_ServerShutdown"
);
qRegisterMetaType
<
Event_AddToList
>
(
"Event_AddToList"
);
qRegisterMetaType
<
Event_RemoveFromList
>
(
"Event_RemoveFromList"
);
qRegisterMetaType
<
Event_UserJoined
>
(
"Event_UserJoined"
);
qRegisterMetaType
<
Event_UserLeft
>
(
"Event_UserLeft"
);
qRegisterMetaType
<
Event_ServerMessage
>
(
"Event_ServerMessage"
);
qRegisterMetaType
<
Event_ListRooms
>
(
"Event_ListRooms"
);
qRegisterMetaType
<
Event_GameJoined
>
(
"Event_GameJoined"
);
qRegisterMetaType
<
Event_UserMessage
>
(
"Event_UserMessage"
);
qRegisterMetaType
<
ServerInfo_User
>
(
"ServerInfo_User"
);
qRegisterMetaType
<
QList
<
ServerInfo_User
>
>
(
"QList<ServerInfo_User>"
);
qRegisterMetaType
<
Event_ReplayAdded
>
(
"Event_ReplayAdded"
);
connect
(
this
,
SIGNAL
(
sigQueuePendingCommand
(
PendingCommand
*
)),
this
,
SLOT
(
queuePendingCommand
(
PendingCommand
*
)));
}
AbstractClient
::~
AbstractClient
()
...
...
@@ -53,110 +53,110 @@ AbstractClient::~AbstractClient()
void
AbstractClient
::
processProtocolItem
(
const
ServerMessage
&
item
)
{
switch
(
item
.
message_type
())
{
case
ServerMessage
::
RESPONSE
:
{
const
Response
&
response
=
item
.
response
();
const
int
cmdId
=
response
.
cmd_id
();
PendingCommand
*
pend
=
pendingCommands
.
value
(
cmdId
,
0
);
if
(
!
pend
)
return
;
pendingCommands
.
remove
(
cmdId
);
pend
->
processResponse
(
response
);
pend
->
deleteLater
();
break
;
}
case
ServerMessage
::
SESSION_EVENT
:
{
const
SessionEvent
&
event
=
item
.
session_event
();
switch
((
SessionEvent
::
SessionEventType
)
getPbExtension
(
event
))
{
case
SessionEvent
::
SERVER_IDENTIFICATION
:
emit
serverIdentificationEventReceived
(
event
.
GetExtension
(
Event_ServerIdentification
::
ext
));
break
;
case
SessionEvent
::
SERVER_MESSAGE
:
emit
serverMessageEventReceived
(
event
.
GetExtension
(
Event_ServerMessage
::
ext
));
break
;
case
SessionEvent
::
SERVER_SHUTDOWN
:
emit
serverShutdownEventReceived
(
event
.
GetExtension
(
Event_ServerShutdown
::
ext
));
break
;
case
SessionEvent
::
CONNECTION_CLOSED
:
emit
connectionClosedEventReceived
(
event
.
GetExtension
(
Event_ConnectionClosed
::
ext
));
break
;
case
SessionEvent
::
USER_MESSAGE
:
emit
userMessageEventReceived
(
event
.
GetExtension
(
Event_UserMessage
::
ext
));
break
;
case
SessionEvent
::
LIST_ROOMS
:
emit
listRoomsEventReceived
(
event
.
GetExtension
(
Event_ListRooms
::
ext
));
break
;
case
SessionEvent
::
ADD_TO_LIST
:
emit
addToListEventReceived
(
event
.
GetExtension
(
Event_AddToList
::
ext
));
break
;
case
SessionEvent
::
REMOVE_FROM_LIST
:
emit
removeFromListEventReceived
(
event
.
GetExtension
(
Event_RemoveFromList
::
ext
));
break
;
case
SessionEvent
::
USER_JOINED
:
emit
userJoinedEventReceived
(
event
.
GetExtension
(
Event_UserJoined
::
ext
));
break
;
case
SessionEvent
::
USER_LEFT
:
emit
userLeftEventReceived
(
event
.
GetExtension
(
Event_UserLeft
::
ext
));
break
;
case
SessionEvent
::
GAME_JOINED
:
emit
gameJoinedEventReceived
(
event
.
GetExtension
(
Event_GameJoined
::
ext
));
break
;
case
SessionEvent
::
REPLAY_ADDED
:
emit
replayAddedEventReceived
(
event
.
GetExtension
(
Event_ReplayAdded
::
ext
));
break
;
switch
(
item
.
message_type
())
{
case
ServerMessage
::
RESPONSE
:
{
const
Response
&
response
=
item
.
response
();
const
int
cmdId
=
response
.
cmd_id
();
PendingCommand
*
pend
=
pendingCommands
.
value
(
cmdId
,
0
);
if
(
!
pend
)
return
;
pendingCommands
.
remove
(
cmdId
);
pend
->
processResponse
(
response
);
pend
->
deleteLater
();
break
;
}
case
ServerMessage
::
SESSION_EVENT
:
{
const
SessionEvent
&
event
=
item
.
session_event
();
switch
((
SessionEvent
::
SessionEventType
)
getPbExtension
(
event
))
{
case
SessionEvent
::
SERVER_IDENTIFICATION
:
emit
serverIdentificationEventReceived
(
event
.
GetExtension
(
Event_ServerIdentification
::
ext
));
break
;
case
SessionEvent
::
SERVER_MESSAGE
:
emit
serverMessageEventReceived
(
event
.
GetExtension
(
Event_ServerMessage
::
ext
));
break
;
case
SessionEvent
::
SERVER_SHUTDOWN
:
emit
serverShutdownEventReceived
(
event
.
GetExtension
(
Event_ServerShutdown
::
ext
));
break
;
case
SessionEvent
::
CONNECTION_CLOSED
:
emit
connectionClosedEventReceived
(
event
.
GetExtension
(
Event_ConnectionClosed
::
ext
));
break
;
case
SessionEvent
::
USER_MESSAGE
:
emit
userMessageEventReceived
(
event
.
GetExtension
(
Event_UserMessage
::
ext
));
break
;
case
SessionEvent
::
LIST_ROOMS
:
emit
listRoomsEventReceived
(
event
.
GetExtension
(
Event_ListRooms
::
ext
));
break
;
case
SessionEvent
::
ADD_TO_LIST
:
emit
addToListEventReceived
(
event
.
GetExtension
(
Event_AddToList
::
ext
));
break
;
case
SessionEvent
::
REMOVE_FROM_LIST
:
emit
removeFromListEventReceived
(
event
.
GetExtension
(
Event_RemoveFromList
::
ext
));
break
;
case
SessionEvent
::
USER_JOINED
:
emit
userJoinedEventReceived
(
event
.
GetExtension
(
Event_UserJoined
::
ext
));
break
;
case
SessionEvent
::
USER_LEFT
:
emit
userLeftEventReceived
(
event
.
GetExtension
(
Event_UserLeft
::
ext
));
break
;
case
SessionEvent
::
GAME_JOINED
:
emit
gameJoinedEventReceived
(
event
.
GetExtension
(
Event_GameJoined
::
ext
));
break
;
case
SessionEvent
::
REPLAY_ADDED
:
emit
replayAddedEventReceived
(
event
.
GetExtension
(
Event_ReplayAdded
::
ext
));
break
;
default:
break
;
}
break
;
}
case
ServerMessage
::
GAME_EVENT_CONTAINER
:
{
emit
gameEventContainerReceived
(
item
.
game_event_container
());
break
;
}
case
ServerMessage
::
ROOM_EVENT
:
{
emit
roomEventReceived
(
item
.
room_event
());
break
;
}
}
}
break
;
}
case
ServerMessage
::
GAME_EVENT_CONTAINER
:
{
emit
gameEventContainerReceived
(
item
.
game_event_container
());
break
;
}
case
ServerMessage
::
ROOM_EVENT
:
{
emit
roomEventReceived
(
item
.
room_event
());
break
;
}
}
}
void
AbstractClient
::
setStatus
(
const
ClientStatus
_status
)
{
QMutexLocker
locker
(
&
clientMutex
);
if
(
_status
!=
status
)
{
status
=
_status
;
emit
statusChanged
(
_status
);
}
QMutexLocker
locker
(
&
clientMutex
);
if
(
_status
!=
status
)
{
status
=
_status
;
emit
statusChanged
(
_status
);
}
}
void
AbstractClient
::
sendCommand
(
const
CommandContainer
&
cont
)
{
sendCommand
(
new
PendingCommand
(
cont
));
sendCommand
(
new
PendingCommand
(
cont
));
}
void
AbstractClient
::
sendCommand
(
PendingCommand
*
pend
)
{
pend
->
moveToThread
(
thread
());
emit
sigQueuePendingCommand
(
pend
);
pend
->
moveToThread
(
thread
());
emit
sigQueuePendingCommand
(
pend
);
}
void
AbstractClient
::
queuePendingCommand
(
PendingCommand
*
pend
)
{
// This function is always called from the client thread via signal/slot.
const
int
cmdId
=
getNewCmdId
();
pend
->
getCommandContainer
().
set_cmd_id
(
cmdId
);
pendingCommands
.
insert
(
cmdId
,
pend
);
sendCommandContainer
(
pend
->
getCommandContainer
());
// This function is always called from the client thread via signal/slot.
const
int
cmdId
=
getNewCmdId
();
pend
->
getCommandContainer
().
set_cmd_id
(
cmdId
);
pendingCommands
.
insert
(
cmdId
,
pend
);
sendCommandContainer
(
pend
->
getCommandContainer
());
}
PendingCommand
*
AbstractClient
::
prepareSessionCommand
(
const
::
google
::
protobuf
::
Message
&
cmd
)
{
CommandContainer
cont
;
SessionCommand
*
c
=
cont
.
add_session_command
();
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
CommandContainer
cont
;
SessionCommand
*
c
=
cont
.
add_session_command
();
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
}
PendingCommand
*
AbstractClient
::
prepareRoomCommand
(
const
::
google
::
protobuf
::
Message
&
cmd
,
int
roomId
)
{
CommandContainer
cont
;
RoomCommand
*
c
=
cont
.
add_room_command
();
cont
.
set_room_id
(
roomId
);
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
CommandContainer
cont
;
RoomCommand
*
c
=
cont
.
add_room_command
();
cont
.
set_room_id
(
roomId
);
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
}
PendingCommand
*
AbstractClient
::
prepareModeratorCommand
(
const
::
google
::
protobuf
::
Message
&
cmd
)
{
CommandContainer
cont
;
ModeratorCommand
*
c
=
cont
.
add_moderator_command
();
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
CommandContainer
cont
;
ModeratorCommand
*
c
=
cont
.
add_moderator_command
();
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
}
PendingCommand
*
AbstractClient
::
prepareAdminCommand
(
const
::
google
::
protobuf
::
Message
&
cmd
)
{
CommandContainer
cont
;
AdminCommand
*
c
=
cont
.
add_admin_command
();
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
CommandContainer
cont
;
AdminCommand
*
c
=
cont
.
add_admin_command
();
c
->
GetReflection
()
->
MutableMessage
(
c
,
cmd
.
GetDescriptor
()
->
FindExtensionByName
(
"ext"
))
->
CopyFrom
(
cmd
);
return
new
PendingCommand
(
cont
);
}
cockatrice/src/cardzone.cpp
View file @
a171df74
...
...
@@ -10,257 +10,257 @@
#include
"pb/serverinfo_user.pb.h"
CardZone
::
CardZone
(
Player
*
_p
,
const
QString
&
_name
,
bool
_hasCardAttr
,
bool
_isShufflable
,
bool
_contentsKnown
,
QGraphicsItem
*
parent
,
bool
_isView
)
:
AbstractGraphicsItem
(
parent
),
player
(
_p
),
name
(
_name
),
cards
(
_contentsKnown
),
view
(
NULL
),
menu
(
NULL
),
doubleClickAction
(
0
),
hasCardAttr
(
_hasCardAttr
),
isShufflable
(
_isShufflable
),
isView
(
_isView
)
:
AbstractGraphicsItem
(
parent
),
player
(
_p
),
name
(
_name
),
cards
(
_contentsKnown
),
view
(
NULL
),
menu
(
NULL
),
doubleClickAction
(
0
),
hasCardAttr
(
_hasCardAttr
),
isShufflable
(
_isShufflable
),
isView
(
_isView
)
{
if
(
!
isView
)
player
->
addZone
(
this
);
if
(
!
isView
)
player
->
addZone
(
this
);
}
CardZone
::~
CardZone
()
{
qDebug
()
<<
"CardZone destructor: "
<<
name
;
delete
view
;
clearContents
();
qDebug
()
<<
"CardZone destructor: "
<<
name
;
delete
view
;
clearContents
();
}
void
CardZone
::
retranslateUi
()
{
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
cards
[
i
]
->
retranslateUi
();
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
cards
[
i
]
->
retranslateUi
();
}
void
CardZone
::
clearContents
()
{
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
());
player
->
deleteCard
(
cards
.
at
(
i
));
}
cards
.
clear
();
emit
cardCountChanged
();
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
());
player
->
deleteCard
(
cards
.
at
(
i
));
}
cards
.
clear
();
emit
cardCountChanged
();
}
QString
CardZone
::
getTranslatedName
(
bool
hisOwn
,
GrammaticalCase
gc
)
const
{
QString
ownerName
=
player
->
getName
();
bool
female
=
player
->
getUserInfo
()
->
gender
()
==
ServerInfo_User
::
Female
;
if
(
name
==
"hand"
)
return
female
?
(
hisOwn
?
tr
(
"her hand"
,
"nominative, female owner"
)
:
tr
(
"%1's hand"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his hand"
,
"nominative, male owner"
)
:
tr
(
"%1's hand"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
else
if
(
name
==
"deck"
)
switch
(
gc
)
{
case
CaseLookAtZone
:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"look at zone, female owner"
)
:
tr
(
"%1's library"
,
"look at zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"look at zone, male owner"
)
:
tr
(
"%1's library"
,
"look at zone, male owner"
).
arg
(
ownerName
)
);
case
CaseTopCardsOfZone
:
return
female
?
(
hisOwn
?
tr
(
"of her library"
,
"top cards of zone, female owner"
)
:
tr
(
"of %1's library"
,
"top cards of zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"of his library"
,
"top cards of zone, male owner"
)
:
tr
(
"of %1's library"
,
"top cards of zone, male owner"
).
arg
(
ownerName
)
);
case
CaseRevealZone
:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"reveal zone, female owner"
)
:
tr
(
"%1's library"
,
"reveal zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"reveal zone, male owner"
)
:
tr
(
"%1's library"
,
"reveal zone, male owner"
).
arg
(
ownerName
)
);
case
CaseShuffleZone
:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"shuffle, female owner"
)
:
tr
(
"%1's library"
,
"shuffle, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"shuffle, male owner"
)
:
tr
(
"%1's library"
,
"shuffle, male owner"
).
arg
(
ownerName
)
);
default:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"nominative, female owner"
)
:
tr
(
"%1's library"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"nominative, male owner"
)
:
tr
(
"%1's library"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
}
else
if
(
name
==
"grave"
)
return
female
?
(
hisOwn
?
tr
(
"her graveyard"
,
"nominative, female owner"
)
:
tr
(
"%1's graveyard"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his graveyard"
,
"nominative, male owner"
)
:
tr
(
"%1's graveyard"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
else
if
(
name
==
"rfg"
)
return
female
?
(
hisOwn
?
tr
(
"her exile"
,
"nominative, female owner"
)
:
tr
(
"%1's exile"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his exile"
,
"nominative, male owner"
)
:
tr
(
"%1's exile"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
else
if
(
name
==
"sb"
)
switch
(
gc
)
{
case
CaseLookAtZone
:
return
female
?
(
hisOwn
?
tr
(
"her sideboard"
,
"look at zone, female owner"
)
:
tr
(
"%1's sideboard"
,
"look at zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his sideboard"
,
"look at zone, male owner"
)
:
tr
(
"%1's sideboard"
,
"look at zone, male owner"
).
arg
(
ownerName
)
);
case
CaseNominative
:
return
female
?
(
hisOwn
?
tr
(
"her sideboard"
,
"nominative, female owner"
)
:
tr
(
"%1's sideboard"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his sideboard"
,
"nominative, male owner"
)
:
tr
(
"%1's sideboard"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
QString
ownerName
=
player
->
getName
();
bool
female
=
player
->
getUserInfo
()
->
gender
()
==
ServerInfo_User
::
Female
;
if
(
name
==
"hand"
)
return
female
?
(
hisOwn
?
tr
(
"her hand"
,
"nominative, female owner"
)
:
tr
(
"%1's hand"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his hand"
,
"nominative, male owner"
)
:
tr
(
"%1's hand"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
else
if
(
name
==
"deck"
)
switch
(
gc
)
{
case
CaseLookAtZone
:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"look at zone, female owner"
)
:
tr
(
"%1's library"
,
"look at zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"look at zone, male owner"
)
:
tr
(
"%1's library"
,
"look at zone, male owner"
).
arg
(
ownerName
)
);
case
CaseTopCardsOfZone
:
return
female
?
(
hisOwn
?
tr
(
"of her library"
,
"top cards of zone, female owner"
)
:
tr
(
"of %1's library"
,
"top cards of zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"of his library"
,
"top cards of zone, male owner"
)
:
tr
(
"of %1's library"
,
"top cards of zone, male owner"
).
arg
(
ownerName
)
);
case
CaseRevealZone
:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"reveal zone, female owner"
)
:
tr
(
"%1's library"
,
"reveal zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"reveal zone, male owner"
)
:
tr
(
"%1's library"
,
"reveal zone, male owner"
).
arg
(
ownerName
)
);
case
CaseShuffleZone
:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"shuffle, female owner"
)
:
tr
(
"%1's library"
,
"shuffle, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"shuffle, male owner"
)
:
tr
(
"%1's library"
,
"shuffle, male owner"
).
arg
(
ownerName
)
);
default:
return
female
?
(
hisOwn
?
tr
(
"her library"
,
"nominative, female owner"
)
:
tr
(
"%1's library"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his library"
,
"nominative, male owner"
)
:
tr
(
"%1's library"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
}
else
if
(
name
==
"grave"
)
return
female
?
(
hisOwn
?
tr
(
"her graveyard"
,
"nominative, female owner"
)
:
tr
(
"%1's graveyard"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his graveyard"
,
"nominative, male owner"
)
:
tr
(
"%1's graveyard"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
else
if
(
name
==
"rfg"
)
return
female
?
(
hisOwn
?
tr
(
"her exile"
,
"nominative, female owner"
)
:
tr
(
"%1's exile"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his exile"
,
"nominative, male owner"
)
:
tr
(
"%1's exile"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
else
if
(
name
==
"sb"
)
switch
(
gc
)
{
case
CaseLookAtZone
:
return
female
?
(
hisOwn
?
tr
(
"her sideboard"
,
"look at zone, female owner"
)
:
tr
(
"%1's sideboard"
,
"look at zone, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his sideboard"
,
"look at zone, male owner"
)
:
tr
(
"%1's sideboard"
,
"look at zone, male owner"
).
arg
(
ownerName
)
);
case
CaseNominative
:
return
female
?
(
hisOwn
?
tr
(
"her sideboard"
,
"nominative, female owner"
)
:
tr
(
"%1's sideboard"
,
"nominative, female owner"
).
arg
(
ownerName
)
)
:
(
hisOwn
?
tr
(
"his sideboard"
,
"nominative, male owner"
)
:
tr
(
"%1's sideboard"
,
"nominative, male owner"
).
arg
(
ownerName
)
);
default:
break
;
}
return
QString
();
}
return
QString
();
}
void
CardZone
::
mouseDoubleClickEvent
(
QGraphicsSceneMouseEvent
*/
*
event
*/
)
{
if
(
doubleClickAction
)
doubleClickAction
->
trigger
();
if
(
doubleClickAction
)
doubleClickAction
->
trigger
();
}
bool
CardZone
::
showContextMenu
(
const
QPoint
&
screenPos
)
{
if
(
menu
)
{
menu
->
exec
(
screenPos
);
return
true
;
}
return
false
;
if
(
menu
)
{
menu
->
exec
(
screenPos
);
return
true
;
}
return
false
;
}
void
CardZone
::
mousePressEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
if
(
event
->
button
()
==
Qt
::
RightButton
)
{
if
(
showContextMenu
(
event
->
screenPos
()))
event
->
accept
();
else
event
->
ignore
();
}
else
event
->
ignore
();
if
(
event
->
button
()
==
Qt
::
RightButton
)
{
if
(
showContextMenu
(
event
->
screenPos
()))
event
->
accept
();
else
event
->
ignore
();
}
else
event
->
ignore
();
}
void
CardZone
::
addCard
(
CardItem
*
card
,
bool
reorganize
,
int
x
,
int
y
)
{
if
(
view
)
if
((
x
<=
view
->
getCards
().
size
())
||
(
view
->
getNumberCards
()
==
-
1
))
view
->
addCard
(
new
CardItem
(
player
,
card
->
getName
(),
card
->
getId
()),
reorganize
,
x
,
y
);
if
(
view
)
if
((
x
<=
view
->
getCards
().
size
())
||
(
view
->
getNumberCards
()
==
-
1
))
view
->
addCard
(
new
CardItem
(
player
,
card
->
getName
(),
card
->
getId
()),
reorganize
,
x
,
y
);
card
->
setZone
(
this
);
addCardImpl
(
card
,
x
,
y
);
card
->
setZone
(
this
);
addCardImpl
(
card
,
x
,
y
);
if
(
reorganize
)
reorganizeCards
();
emit
cardCountChanged
();
if
(
reorganize
)
reorganizeCards
();
emit
cardCountChanged
();
}
CardItem
*
CardZone
::
getCard
(
int
cardId
,
const
QString
&
cardName
)
{
CardItem
*
c
=
cards
.
findCard
(
cardId
,
false
);
if
(
!
c
)
{
qDebug
()
<<
"CardZone::getCard: card id="
<<
cardId
<<
"not found"
;
return
0
;
}
// If the card's id is -1, this zone is invisible,
// so we need to give the card an id and a name as it comes out.
// It can be assumed that in an invisible zone, all cards are equal.
if
((
c
->
getId
()
==
-
1
)
||
(
c
->
getName
().
isEmpty
()))
{
c
->
setId
(
cardId
);
c
->
setName
(
cardName
);
}
return
c
;
CardItem
*
c
=
cards
.
findCard
(
cardId
,
false
);
if
(
!
c
)
{
qDebug
()
<<
"CardZone::getCard: card id="
<<
cardId
<<
"not found"
;
return
0
;
}
// If the card's id is -1, this zone is invisible,
// so we need to give the card an id and a name as it comes out.
// It can be assumed that in an invisible zone, all cards are equal.
if
((
c
->
getId
()
==
-
1
)
||
(
c
->
getName
().
isEmpty
()))
{
c
->
setId
(
cardId
);
c
->
setName
(
cardName
);
}
return
c
;
}
CardItem
*
CardZone
::
takeCard
(
int
position
,
int
cardId
,
bool
/*canResize*/
)
{
if
(
position
==
-
1
)
{
// position == -1 means either that the zone is indexed by card id
// or that it doesn't matter which card you take.
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
if
(
cards
[
i
]
->
getId
()
==
cardId
)
{
position
=
i
;
break
;
}
if
(
position
==
-
1
)
position
=
0
;
}
if
(
position
>=
cards
.
size
())
return
0
;
if
(
position
==
-
1
)
{
// position == -1 means either that the zone is indexed by card id
// or that it doesn't matter which card you take.
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
if
(
cards
[
i
]
->
getId
()
==
cardId
)
{
position
=
i
;
break
;
}
if
(
position
==
-
1
)
position
=
0
;
}
if
(
position
>=
cards
.
size
())
return
0
;
CardItem
*
c
=
cards
.
takeAt
(
position
);
CardItem
*
c
=
cards
.
takeAt
(
position
);
if
(
view
)
view
->
removeCard
(
position
);
if
(
view
)
view
->
removeCard
(
position
);
c
->
setId
(
cardId
);
c
->
setId
(
cardId
);
reorganizeCards
();
emit
cardCountChanged
();
return
c
;
reorganizeCards
();
emit
cardCountChanged
();
return
c
;
}
void
CardZone
::
removeCard
(
CardItem
*
card
)
{
cards
.
removeAt
(
cards
.
indexOf
(
card
));
reorganizeCards
();
emit
cardCountChanged
();
player
->
deleteCard
(
card
);
cards
.
removeAt
(
cards
.
indexOf
(
card
));
reorganizeCards
();
emit
cardCountChanged
();
player
->
deleteCard
(
card
);
}
void
CardZone
::
moveAllToZone
()
{
QList
<
QVariant
>
data
=
static_cast
<
QAction
*>
(
sender
())
->
data
().
toList
();
QString
targetZone
=
data
[
0
].
toString
();
int
targetX
=
data
[
1
].
toInt
();
Command_MoveCard
cmd
;
cmd
.
set_start_zone
(
getName
().
toStdString
());
cmd
.
set_target_player_id
(
player
->
getId
());
cmd
.
set_target_zone
(
targetZone
.
toStdString
());
cmd
.
set_x
(
targetX
);
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
cmd
.
mutable_cards_to_move
()
->
add_card
()
->
set_card_id
(
cards
[
i
]
->
getId
());
player
->
sendGameCommand
(
cmd
);
QList
<
QVariant
>
data
=
static_cast
<
QAction
*>
(
sender
())
->
data
().
toList
();
QString
targetZone
=
data
[
0
].
toString
();
int
targetX
=
data
[
1
].
toInt
();
Command_MoveCard
cmd
;
cmd
.
set_start_zone
(
getName
().
toStdString
());
cmd
.
set_target_player_id
(
player
->
getId
());
cmd
.
set_target_zone
(
targetZone
.
toStdString
());
cmd
.
set_x
(
targetX
);
for
(
int
i
=
0
;
i
<
cards
.
size
();
++
i
)
cmd
.
mutable_cards_to_move
()
->
add_card
()
->
set_card_id
(
cards
[
i
]
->
getId
());
player
->
sendGameCommand
(
cmd
);
}
QPointF
CardZone
::
closestGridPoint
(
const
QPointF
&
point
)
{
return
point
;
return
point
;
}
cockatrice/src/player.cpp
View file @
a171df74
This diff is collapsed.
Click to expand it.
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