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
61b82bd6
Commit
61b82bd6
authored
Jun 27, 2010
by
Max-Wilhelm Bruker
Browse files
arrows can target players now
parent
cbf201ed
Changes
25
Hide whitespace changes
Inline
Side-by-side
common/server_card.h
View file @
61b82bd6
...
@@ -20,12 +20,14 @@
...
@@ -20,12 +20,14 @@
#ifndef SERVER_CARD_H
#ifndef SERVER_CARD_H
#define SERVER_CARD_H
#define SERVER_CARD_H
#include
"server_arrowtarget.h"
#include
<QString>
#include
<QString>
#include
<QMap>
#include
<QMap>
class
Server_CardZone
;
class
Server_CardZone
;
class
Server_Card
{
class
Server_Card
:
public
Server_ArrowTarget
{
Q_OBJECT
private:
private:
Server_CardZone
*
zone
;
Server_CardZone
*
zone
;
int
id
;
int
id
;
...
...
common/server_game.cpp
View file @
61b82bd6
...
@@ -197,6 +197,28 @@ Server_Player *Server_Game::addPlayer(Server_ProtocolHandler *handler, bool spec
...
@@ -197,6 +197,28 @@ Server_Player *Server_Game::addPlayer(Server_ProtocolHandler *handler, bool spec
void
Server_Game
::
removePlayer
(
Server_Player
*
player
)
void
Server_Game
::
removePlayer
(
Server_Player
*
player
)
{
{
players
.
remove
(
player
->
getPlayerId
());
players
.
remove
(
player
->
getPlayerId
());
// Remove all arrows of other players pointing to the player being removed or to one of his cards.
QMapIterator
<
int
,
Server_Player
*>
playerIterator
(
players
);
while
(
playerIterator
.
hasNext
())
{
Server_Player
*
p
=
playerIterator
.
next
().
value
();
QList
<
Server_Arrow
*>
arrows
=
p
->
getArrows
().
values
();
QList
<
Server_Arrow
*>
toDelete
;
for
(
int
i
=
0
;
i
<
arrows
.
size
();
++
i
)
{
Server_Arrow
*
a
=
arrows
[
i
];
Server_Card
*
targetCard
=
qobject_cast
<
Server_Card
*>
(
a
->
getTargetItem
());
if
(
targetCard
)
{
if
(
targetCard
->
getZone
()
->
getPlayer
()
==
player
)
toDelete
.
append
(
a
);
}
else
if
((
static_cast
<
Server_Player
*>
(
a
->
getTargetItem
())
==
player
)
||
(
a
->
getStartCard
()
->
getZone
()
->
getPlayer
()
==
player
))
toDelete
.
append
(
a
);
}
for
(
int
i
=
0
;
i
<
toDelete
.
size
();
++
i
)
{
sendGameEvent
(
new
Event_DeleteArrow
(
p
->
getPlayerId
(),
toDelete
[
i
]
->
getId
()));
p
->
deleteArrow
(
toDelete
[
i
]
->
getId
());
}
}
sendGameEvent
(
new
Event_Leave
(
player
->
getPlayerId
()));
sendGameEvent
(
new
Event_Leave
(
player
->
getPlayerId
()));
bool
spectator
=
player
->
getSpectator
();
bool
spectator
=
player
->
getSpectator
();
delete
player
;
delete
player
;
...
@@ -243,16 +265,29 @@ QList<ServerInfo_Player *> Server_Game::getGameState(Server_Player *playerWhosAs
...
@@ -243,16 +265,29 @@ QList<ServerInfo_Player *> Server_Game::getGameState(Server_Player *playerWhosAs
QMapIterator
<
int
,
Server_Arrow
*>
arrowIterator
(
player
->
getArrows
());
QMapIterator
<
int
,
Server_Arrow
*>
arrowIterator
(
player
->
getArrows
());
while
(
arrowIterator
.
hasNext
())
{
while
(
arrowIterator
.
hasNext
())
{
Server_Arrow
*
arrow
=
arrowIterator
.
next
().
value
();
Server_Arrow
*
arrow
=
arrowIterator
.
next
().
value
();
arrowList
.
append
(
new
ServerInfo_Arrow
(
Server_Card
*
targetCard
=
qobject_cast
<
Server_Card
*>
(
arrow
->
getTargetItem
());
arrow
->
getId
(),
if
(
targetCard
)
arrow
->
getStartCard
()
->
getZone
()
->
getPlayer
()
->
getPlayerId
(),
arrowList
.
append
(
new
ServerInfo_Arrow
(
arrow
->
getStartCard
()
->
getZone
()
->
getName
(),
arrow
->
getId
(),
arrow
->
getStartCard
()
->
getId
(),
arrow
->
getStartCard
()
->
getZone
()
->
getPlayer
()
->
getPlayerId
(),
arrow
->
getTargetCard
()
->
getZone
()
->
getPlayer
()
->
getPlayerId
(),
arrow
->
getStartCard
()
->
getZone
()
->
getName
(),
arrow
->
getTargetCard
()
->
getZone
()
->
getName
(),
arrow
->
getStartCard
()
->
getId
(),
arrow
->
getTargetCard
()
->
getId
(),
targetCard
->
getZone
()
->
getPlayer
()
->
getPlayerId
(),
arrow
->
getColor
()
targetCard
->
getZone
()
->
getName
(),
));
targetCard
->
getId
(),
arrow
->
getColor
()
));
else
arrowList
.
append
(
new
ServerInfo_Arrow
(
arrow
->
getId
(),
arrow
->
getStartCard
()
->
getZone
()
->
getPlayer
()
->
getPlayerId
(),
arrow
->
getStartCard
()
->
getZone
()
->
getName
(),
arrow
->
getStartCard
()
->
getId
(),
qobject_cast
<
Server_Player
*>
(
arrow
->
getTargetItem
())
->
getPlayerId
(),
QString
(),
-
1
,
arrow
->
getColor
()
));
}
}
QList
<
ServerInfo_Counter
*>
counterList
;
QList
<
ServerInfo_Counter
*>
counterList
;
...
...
common/server_player.h
View file @
61b82bd6
#ifndef PLAYER_H
#ifndef PLAYER_H
#define PLAYER_H
#define PLAYER_H
#include
<QObject>
#include
"server_arrowtarget.h"
#include
<QString>
#include
<QString>
#include
<QList>
#include
<QList>
#include
<QMap>
#include
<QMap>
...
@@ -15,7 +15,7 @@ class Server_ProtocolHandler;
...
@@ -15,7 +15,7 @@ class Server_ProtocolHandler;
class
ProtocolItem
;
class
ProtocolItem
;
class
ServerInfo_PlayerProperties
;
class
ServerInfo_PlayerProperties
;
class
Server_Player
:
public
QObjec
t
{
class
Server_Player
:
public
Server_ArrowTarge
t
{
Q_OBJECT
Q_OBJECT
private:
private:
Server_Game
*
game
;
Server_Game
*
game
;
...
...
common/server_protocolhandler.cpp
View file @
61b82bd6
...
@@ -593,7 +593,7 @@ ResponseCode Server_ProtocolHandler::moveCard(Server_Game *game, Server_Player *
...
@@ -593,7 +593,7 @@ ResponseCode Server_ProtocolHandler::moveCard(Server_Game *game, Server_Player *
QMapIterator
<
int
,
Server_Arrow
*>
arrowIterator
(
players
[
i
]
->
getArrows
());
QMapIterator
<
int
,
Server_Arrow
*>
arrowIterator
(
players
[
i
]
->
getArrows
());
while
(
arrowIterator
.
hasNext
())
{
while
(
arrowIterator
.
hasNext
())
{
Server_Arrow
*
arrow
=
arrowIterator
.
next
().
value
();
Server_Arrow
*
arrow
=
arrowIterator
.
next
().
value
();
if
((
arrow
->
getStartCard
()
==
card
)
||
(
arrow
->
getTarget
Card
()
==
card
))
if
((
arrow
->
getStartCard
()
==
card
)
||
(
arrow
->
getTarget
Item
()
==
card
))
arrowsToDelete
.
append
(
arrow
->
getId
());
arrowsToDelete
.
append
(
arrow
->
getId
());
}
}
for
(
int
j
=
0
;
j
<
arrowsToDelete
.
size
();
++
j
)
for
(
int
j
=
0
;
j
<
arrowsToDelete
.
size
();
++
j
)
...
@@ -689,21 +689,33 @@ ResponseCode Server_ProtocolHandler::cmdCreateArrow(Command_CreateArrow *cmd, Co
...
@@ -689,21 +689,33 @@ ResponseCode Server_ProtocolHandler::cmdCreateArrow(Command_CreateArrow *cmd, Co
if
(
!
startPlayer
||
!
targetPlayer
)
if
(
!
startPlayer
||
!
targetPlayer
)
return
RespNameNotFound
;
return
RespNameNotFound
;
Server_CardZone
*
startZone
=
startPlayer
->
getZones
().
value
(
cmd
->
getStartZone
());
Server_CardZone
*
startZone
=
startPlayer
->
getZones
().
value
(
cmd
->
getStartZone
());
Server_CardZone
*
targetZone
=
targetPlayer
->
getZones
().
value
(
cmd
->
getTargetZone
());
bool
playerTarget
=
cmd
->
getTargetZone
().
isEmpty
();
if
(
!
startZone
||
!
targetZone
)
Server_CardZone
*
targetZone
=
0
;
if
(
!
playerTarget
)
targetZone
=
targetPlayer
->
getZones
().
value
(
cmd
->
getTargetZone
());
if
(
!
startZone
||
(
!
targetZone
&&
!
playerTarget
))
return
RespNameNotFound
;
return
RespNameNotFound
;
Server_Card
*
startCard
=
startZone
->
getCard
(
cmd
->
getStartCardId
(),
false
);
Server_Card
*
startCard
=
startZone
->
getCard
(
cmd
->
getStartCardId
(),
false
);
Server_Card
*
targetCard
=
targetZone
->
getCard
(
cmd
->
getTargetCardId
(),
false
);
Server_Card
*
targetCard
=
0
;
if
(
!
startCard
||
!
targetCard
||
(
startCard
==
targetCard
))
if
(
!
playerTarget
)
targetCard
=
targetZone
->
getCard
(
cmd
->
getTargetCardId
(),
false
);
if
(
!
startCard
||
(
!
targetCard
&&
!
playerTarget
)
||
(
startCard
==
targetCard
))
return
RespContextError
;
return
RespContextError
;
Server_ArrowTarget
*
targetItem
;
if
(
playerTarget
)
targetItem
=
targetPlayer
;
else
targetItem
=
targetCard
;
QMapIterator
<
int
,
Server_Arrow
*>
arrowIterator
(
player
->
getArrows
());
QMapIterator
<
int
,
Server_Arrow
*>
arrowIterator
(
player
->
getArrows
());
while
(
arrowIterator
.
hasNext
())
{
while
(
arrowIterator
.
hasNext
())
{
Server_Arrow
*
temp
=
arrowIterator
.
next
().
value
();
Server_Arrow
*
temp
=
arrowIterator
.
next
().
value
();
if
((
temp
->
getStartCard
()
==
startCard
)
&&
(
temp
->
getTarget
Card
()
==
target
Card
))
if
((
temp
->
getStartCard
()
==
startCard
)
&&
(
temp
->
getTarget
Item
()
==
target
Item
))
return
RespContextError
;
return
RespContextError
;
}
}
Server_Arrow
*
arrow
=
new
Server_Arrow
(
player
->
newArrowId
(),
startCard
,
target
Card
,
cmd
->
getColor
());
Server_Arrow
*
arrow
=
new
Server_Arrow
(
player
->
newArrowId
(),
startCard
,
target
Item
,
cmd
->
getColor
());
player
->
addArrow
(
arrow
);
player
->
addArrow
(
arrow
);
game
->
sendGameEvent
(
new
Event_CreateArrows
(
player
->
getPlayerId
(),
QList
<
ServerInfo_Arrow
*>
()
<<
new
ServerInfo_Arrow
(
game
->
sendGameEvent
(
new
Event_CreateArrows
(
player
->
getPlayerId
(),
QList
<
ServerInfo_Arrow
*>
()
<<
new
ServerInfo_Arrow
(
arrow
->
getId
(),
arrow
->
getId
(),
...
@@ -711,8 +723,8 @@ ResponseCode Server_ProtocolHandler::cmdCreateArrow(Command_CreateArrow *cmd, Co
...
@@ -711,8 +723,8 @@ ResponseCode Server_ProtocolHandler::cmdCreateArrow(Command_CreateArrow *cmd, Co
startZone
->
getName
(),
startZone
->
getName
(),
startCard
->
getId
(),
startCard
->
getId
(),
targetPlayer
->
getPlayerId
(),
targetPlayer
->
getPlayerId
(),
targetZone
->
getNam
e
(),
cmd
->
getTargetZon
e
(),
t
argetCard
->
get
Id
(),
cmd
->
getT
argetCardId
(),
cmd
->
getColor
()
cmd
->
getColor
()
)));
)));
return
RespOk
;
return
RespOk
;
...
...
servatrice/servatrice.pro
View file @
61b82bd6
...
@@ -29,7 +29,8 @@ HEADERS += src/servatrice.h \
...
@@ -29,7 +29,8 @@ HEADERS += src/servatrice.h \
..
/
common
/
server_counter
.
h
\
..
/
common
/
server_counter
.
h
\
..
/
common
/
server_game
.
h
\
..
/
common
/
server_game
.
h
\
..
/
common
/
server_player
.
h
\
..
/
common
/
server_player
.
h
\
..
/
common
/
server_protocolhandler
.
h
..
/
common
/
server_protocolhandler
.
h
\
..
/
common
/
server_arrowtarget
.
h
SOURCES
+=
src
/
main
.
cpp
\
SOURCES
+=
src
/
main
.
cpp
\
src
/
servatrice
.
cpp
\
src
/
servatrice
.
cpp
\
...
...
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