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
eff0c0cc
Commit
eff0c0cc
authored
Sep 15, 2010
by
Max-Wilhelm Bruker
Browse files
arrow crash bug fix
parent
6fb16545
Changes
3
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/arrowitem.cpp
View file @
eff0c0cc
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
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
)
{
{
qDebug
()
<<
"ArrowItem constructor: startItem="
<<
startItem
;
setZValue
(
2000000005
);
setZValue
(
2000000005
);
if
(
startItem
)
if
(
startItem
)
...
@@ -62,6 +63,9 @@ void ArrowItem::updatePath(const QPointF &endPoint)
...
@@ -62,6 +63,9 @@ void ArrowItem::updatePath(const QPointF &endPoint)
const
double
headLength
=
headWidth
/
sqrt
(
2
);
const
double
headLength
=
headWidth
/
sqrt
(
2
);
const
double
phi
=
15
;
const
double
phi
=
15
;
if
(
!
startItem
)
return
;
QPointF
startPoint
=
startItem
->
mapToScene
(
QPointF
(
startItem
->
boundingRect
().
width
()
/
2
,
startItem
->
boundingRect
().
height
()
/
2
));
QPointF
startPoint
=
startItem
->
mapToScene
(
QPointF
(
startItem
->
boundingRect
().
width
()
/
2
,
startItem
->
boundingRect
().
height
()
/
2
));
QLineF
line
(
startPoint
,
endPoint
);
QLineF
line
(
startPoint
,
endPoint
);
qreal
lineLength
=
line
.
length
();
qreal
lineLength
=
line
.
length
();
...
@@ -141,6 +145,11 @@ void ArrowDragItem::addChildArrow(ArrowDragItem *childArrow)
...
@@ -141,6 +145,11 @@ void ArrowDragItem::addChildArrow(ArrowDragItem *childArrow)
void
ArrowDragItem
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
void
ArrowDragItem
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
{
// This ensures that if a mouse move event happens after a call to delArrow(),
// the event will be discarded as it would create some stray pointers.
if
(
!
startItem
)
return
;
QPointF
endPos
=
event
->
scenePos
();
QPointF
endPos
=
event
->
scenePos
();
QList
<
QGraphicsItem
*>
colliding
=
scene
()
->
items
(
endPos
);
QList
<
QGraphicsItem
*>
colliding
=
scene
()
->
items
(
endPos
);
...
@@ -177,6 +186,9 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -177,6 +186,9 @@ void ArrowDragItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void
ArrowDragItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
)
void
ArrowDragItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
{
if
(
!
startItem
)
return
;
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
CardZone
*
startZone
=
static_cast
<
CardItem
*>
(
startItem
)
->
getZone
();
CardZone
*
startZone
=
static_cast
<
CardItem
*>
(
startItem
)
->
getZone
();
// 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.
...
@@ -222,6 +234,9 @@ ArrowAttachItem::ArrowAttachItem(ArrowTarget *_startItem)
...
@@ -222,6 +234,9 @@ ArrowAttachItem::ArrowAttachItem(ArrowTarget *_startItem)
void
ArrowAttachItem
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
void
ArrowAttachItem
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
{
if
(
!
startItem
)
return
;
QPointF
endPos
=
event
->
scenePos
();
QPointF
endPos
=
event
->
scenePos
();
QList
<
QGraphicsItem
*>
colliding
=
scene
()
->
items
(
endPos
);
QList
<
QGraphicsItem
*>
colliding
=
scene
()
->
items
(
endPos
);
...
@@ -249,6 +264,9 @@ void ArrowAttachItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
...
@@ -249,6 +264,9 @@ void ArrowAttachItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void
ArrowAttachItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
/*event*/
)
void
ArrowAttachItem
::
mouseReleaseEvent
(
QGraphicsSceneMouseEvent
*
/*event*/
)
{
{
if
(
!
startItem
)
return
;
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
if
(
targetItem
&&
(
targetItem
!=
startItem
))
{
CardItem
*
startCard
=
qgraphicsitem_cast
<
CardItem
*>
(
startItem
);
CardItem
*
startCard
=
qgraphicsitem_cast
<
CardItem
*>
(
startItem
);
CardZone
*
startZone
=
startCard
->
getZone
();
CardZone
*
startZone
=
startCard
->
getZone
();
...
...
cockatrice/src/arrowtarget.cpp
View file @
eff0c0cc
#include
"arrowtarget.h"
#include
"arrowtarget.h"
#include
"arrowitem.h"
#include
"arrowitem.h"
#include
"player.h"
#include
"player.h"
#include
<QDebug>
ArrowTarget
::
ArrowTarget
(
Player
*
_owner
,
QGraphicsItem
*
parent
)
ArrowTarget
::
ArrowTarget
(
Player
*
_owner
,
QGraphicsItem
*
parent
)
:
AbstractGraphicsItem
(
parent
),
owner
(
_owner
),
beingPointedAt
(
false
)
:
AbstractGraphicsItem
(
parent
),
owner
(
_owner
),
beingPointedAt
(
false
)
...
@@ -9,6 +10,7 @@ ArrowTarget::ArrowTarget(Player *_owner, QGraphicsItem *parent)
...
@@ -9,6 +10,7 @@ ArrowTarget::ArrowTarget(Player *_owner, QGraphicsItem *parent)
ArrowTarget
::~
ArrowTarget
()
ArrowTarget
::~
ArrowTarget
()
{
{
qDebug
()
<<
"ArrowTarget destructor"
;
for
(
int
i
=
0
;
i
<
arrowsFrom
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
arrowsFrom
.
size
();
++
i
)
{
arrowsFrom
[
i
]
->
setStartItem
(
0
);
arrowsFrom
[
i
]
->
setStartItem
(
0
);
arrowsFrom
[
i
]
->
delArrow
();
arrowsFrom
[
i
]
->
delArrow
();
...
...
cockatrice/src/player.cpp
View file @
eff0c0cc
...
@@ -721,7 +721,7 @@ void Player::eventMoveCard(Event_MoveCard *event)
...
@@ -721,7 +721,7 @@ void Player::eventMoveCard(Event_MoveCard *event)
while
(
playerIterator
.
hasNext
())
{
while
(
playerIterator
.
hasNext
())
{
Player
*
p
=
playerIterator
.
next
().
value
();
Player
*
p
=
playerIterator
.
next
().
value
();
QList
<
int
>
arrowsToDelete
;
QList
<
ArrowItem
*
>
arrowsToDelete
;
QMapIterator
<
int
,
ArrowItem
*>
arrowIterator
(
p
->
getArrows
());
QMapIterator
<
int
,
ArrowItem
*>
arrowIterator
(
p
->
getArrows
());
while
(
arrowIterator
.
hasNext
())
{
while
(
arrowIterator
.
hasNext
())
{
ArrowItem
*
arrow
=
arrowIterator
.
next
().
value
();
ArrowItem
*
arrow
=
arrowIterator
.
next
().
value
();
...
@@ -729,11 +729,11 @@ void Player::eventMoveCard(Event_MoveCard *event)
...
@@ -729,11 +729,11 @@ void Player::eventMoveCard(Event_MoveCard *event)
if
(
startZone
==
targetZone
)
if
(
startZone
==
targetZone
)
arrow
->
updatePath
();
arrow
->
updatePath
();
else
else
arrowsToDelete
.
append
(
arrow
->
getId
()
);
arrowsToDelete
.
append
(
arrow
);
}
}
}
}
for
(
int
i
=
0
;
i
<
arrowsToDelete
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
arrowsToDelete
.
size
();
++
i
)
p
->
delArrow
(
arrowsToDelete
[
i
]);
arrowsToDelete
[
i
]
->
delArrow
(
);
}
}
}
}
...
@@ -928,7 +928,7 @@ void Player::deleteCard(CardItem *c)
...
@@ -928,7 +928,7 @@ void Player::deleteCard(CardItem *c)
if
(
dialogSemaphore
)
if
(
dialogSemaphore
)
cardsToDelete
.
append
(
c
);
cardsToDelete
.
append
(
c
);
else
else
delete
c
;
c
->
delete
Later
()
;
}
}
void
Player
::
addZone
(
CardZone
*
z
)
void
Player
::
addZone
(
CardZone
*
z
)
...
...
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