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
8fea7178
Commit
8fea7178
authored
Sep 08, 2010
by
Max-Wilhelm Bruker
Browse files
arrow crash fix. this fixes bug #0000001
parent
a5f678bc
Changes
5
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/arrowitem.cpp
View file @
8fea7178
...
@@ -27,17 +27,30 @@ ArrowItem::ArrowItem(Player *_player, int _id, ArrowTarget *_startItem, ArrowTar
...
@@ -27,17 +27,30 @@ ArrowItem::ArrowItem(Player *_player, int _id, ArrowTarget *_startItem, ArrowTar
ArrowItem
::~
ArrowItem
()
ArrowItem
::~
ArrowItem
()
{
{
qDebug
()
<<
"ArrowItem destructor"
;
qDebug
()
<<
"ArrowItem destructor"
;
if
(
startItem
)
}
void
ArrowItem
::
delArrow
()
{
if
(
startItem
)
{
startItem
->
removeArrowFrom
(
this
);
startItem
->
removeArrowFrom
(
this
);
startItem
=
0
;
}
if
(
targetItem
)
{
if
(
targetItem
)
{
targetItem
->
setBeingPointedAt
(
false
);
targetItem
->
setBeingPointedAt
(
false
);
targetItem
->
removeArrowTo
(
this
);
targetItem
->
removeArrowTo
(
this
);
targetItem
=
0
;
}
}
player
->
removeArrow
(
this
);
deleteLater
();
}
}
void
ArrowItem
::
updatePath
()
void
ArrowItem
::
updatePath
()
{
{
if
(
!
targetItem
)
return
;
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
);
}
}
...
@@ -196,7 +209,7 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
...
@@ -196,7 +209,7 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
));
));
}
}
}
}
del
eteLater
();
del
Arrow
();
for
(
int
i
=
0
;
i
<
childArrows
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
childArrows
.
size
();
++
i
)
childArrows
[
i
]
->
mouseReleaseEvent
(
event
);
childArrows
[
i
]
->
mouseReleaseEvent
(
event
);
...
@@ -251,5 +264,6 @@ void ArrowAttachItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * /*event*/)
...
@@ -251,5 +264,6 @@ void ArrowAttachItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * /*event*/)
targetCard
->
getId
()
targetCard
->
getId
()
));
));
}
}
deleteLater
();
delArrow
();
}
}
cockatrice/src/arrowitem.h
View file @
8fea7178
...
@@ -36,6 +36,7 @@ public:
...
@@ -36,6 +36,7 @@ public:
void
setTargetItem
(
ArrowTarget
*
_item
)
{
targetItem
=
_item
;
}
void
setTargetItem
(
ArrowTarget
*
_item
)
{
targetItem
=
_item
;
}
ArrowTarget
*
getStartItem
()
const
{
return
startItem
;
}
ArrowTarget
*
getStartItem
()
const
{
return
startItem
;
}
ArrowTarget
*
getTargetItem
()
const
{
return
targetItem
;
}
ArrowTarget
*
getTargetItem
()
const
{
return
targetItem
;
}
void
delArrow
();
};
};
class
ArrowDragItem
:
public
ArrowItem
{
class
ArrowDragItem
:
public
ArrowItem
{
...
...
cockatrice/src/arrowtarget.cpp
View file @
8fea7178
...
@@ -9,10 +9,14 @@ ArrowTarget::ArrowTarget(Player *_owner, QGraphicsItem *parent)
...
@@ -9,10 +9,14 @@ ArrowTarget::ArrowTarget(Player *_owner, QGraphicsItem *parent)
ArrowTarget
::~
ArrowTarget
()
ArrowTarget
::~
ArrowTarget
()
{
{
while
(
!
arrowsFrom
.
isEmpty
())
for
(
int
i
=
0
;
i
<
arrowsFrom
.
size
();
++
i
)
{
arrowsFrom
.
first
()
->
getPlayer
()
->
delArrow
(
arrowsFrom
.
first
()
->
getId
());
arrowsFrom
[
i
]
->
setStartItem
(
0
);
while
(
!
arrowsTo
.
isEmpty
())
arrowsFrom
[
i
]
->
delArrow
();
arrowsTo
.
first
()
->
getPlayer
()
->
delArrow
(
arrowsTo
.
first
()
->
getId
());
}
for
(
int
i
=
0
;
i
<
arrowsTo
.
size
();
++
i
)
{
arrowsTo
[
i
]
->
setTargetItem
(
0
);
arrowsTo
[
i
]
->
delArrow
();
}
}
}
void
ArrowTarget
::
setBeingPointedAt
(
bool
_beingPointedAt
)
void
ArrowTarget
::
setBeingPointedAt
(
bool
_beingPointedAt
)
...
...
cockatrice/src/player.cpp
View file @
8fea7178
...
@@ -813,13 +813,13 @@ void Player::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/
...
@@ -813,13 +813,13 @@ void Player::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/
void
Player
::
processPlayerInfo
(
ServerInfo_Player
*
info
)
void
Player
::
processPlayerInfo
(
ServerInfo_Player
*
info
)
{
{
clearCounters
();
clearArrows
();
QMapIterator
<
QString
,
CardZone
*>
zoneIt
(
zones
);
QMapIterator
<
QString
,
CardZone
*>
zoneIt
(
zones
);
while
(
zoneIt
.
hasNext
())
while
(
zoneIt
.
hasNext
())
zoneIt
.
next
().
value
()
->
clearContents
();
zoneIt
.
next
().
value
()
->
clearContents
();
clearCounters
();
clearArrows
();
QList
<
ServerInfo_Zone
*>
zl
=
info
->
getZoneList
();
QList
<
ServerInfo_Zone
*>
zl
=
info
->
getZoneList
();
for
(
int
i
=
0
;
i
<
zl
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
zl
.
size
();
++
i
)
{
ServerInfo_Zone
*
zoneInfo
=
zl
[
i
];
ServerInfo_Zone
*
zoneInfo
=
zl
[
i
];
...
@@ -957,15 +957,20 @@ void Player::delArrow(int arrowId)
...
@@ -957,15 +957,20 @@ void Player::delArrow(int arrowId)
ArrowItem
*
a
=
arrows
.
value
(
arrowId
,
0
);
ArrowItem
*
a
=
arrows
.
value
(
arrowId
,
0
);
if
(
!
a
)
if
(
!
a
)
return
;
return
;
arrows
.
remove
(
arrowId
);
a
->
delArrow
();
delete
a
;
}
void
Player
::
removeArrow
(
ArrowItem
*
arrow
)
{
if
(
arrow
->
getId
()
!=
-
1
)
arrows
.
remove
(
arrow
->
getId
());
}
}
void
Player
::
clearArrows
()
void
Player
::
clearArrows
()
{
{
QMapIterator
<
int
,
ArrowItem
*>
arrowIterator
(
arrows
);
QMapIterator
<
int
,
ArrowItem
*>
arrowIterator
(
arrows
);
while
(
arrowIterator
.
hasNext
())
while
(
arrowIterator
.
hasNext
())
delete
arrowIterator
.
next
().
value
();
arrowIterator
.
next
().
value
()
->
delArrow
()
;
arrows
.
clear
();
arrows
.
clear
();
}
}
...
...
cockatrice/src/player.h
View file @
8fea7178
...
@@ -167,6 +167,7 @@ public:
...
@@ -167,6 +167,7 @@ public:
ArrowItem
*
addArrow
(
ServerInfo_Arrow
*
arrow
);
ArrowItem
*
addArrow
(
ServerInfo_Arrow
*
arrow
);
ArrowItem
*
addArrow
(
int
arrowId
,
CardItem
*
startCard
,
ArrowTarget
*
targetItem
,
const
QColor
&
color
);
ArrowItem
*
addArrow
(
int
arrowId
,
CardItem
*
startCard
,
ArrowTarget
*
targetItem
,
const
QColor
&
color
);
void
delArrow
(
int
arrowId
);
void
delArrow
(
int
arrowId
);
void
removeArrow
(
ArrowItem
*
arrow
);
void
clearArrows
();
void
clearArrows
();
PlayerTarget
*
getPlayerTarget
()
const
{
return
playerTarget
;
}
PlayerTarget
*
getPlayerTarget
()
const
{
return
playerTarget
;
}
...
...
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