Add animation to ring
parent
4cb2065518
commit
e982d25f2b
|
@ -124,6 +124,7 @@ class GameBoard(BoxBoard):
|
||||||
self.numring.setPos(x, y)
|
self.numring.setPos(x, y)
|
||||||
self.numring.setVisible(True)
|
self.numring.setVisible(True)
|
||||||
self.numring.setFocus()
|
self.numring.setFocus()
|
||||||
|
self.numring.toggle_anim(True)
|
||||||
else:
|
else:
|
||||||
self.gamegrid.freeze = False
|
self.gamegrid.freeze = False
|
||||||
self.gamegrid.setFocus()
|
self.gamegrid.setFocus()
|
||||||
|
|
|
@ -63,6 +63,12 @@ class animBox(QGraphicsObject):
|
||||||
|
|
||||||
self.freeze = False
|
self.freeze = False
|
||||||
|
|
||||||
|
def set_freeze(self, freeze):
|
||||||
|
self.freeze = freeze
|
||||||
|
self.setAcceptHoverEvents(~freeze)
|
||||||
|
if freeze:
|
||||||
|
self.length = 0
|
||||||
|
|
||||||
# Toggle the animation to be play forward or backward
|
# Toggle the animation to be play forward or backward
|
||||||
def toggle_anim(self, toggling):
|
def toggle_anim(self, toggling):
|
||||||
if toggling:
|
if toggling:
|
||||||
|
@ -133,6 +139,7 @@ class animBox(QGraphicsObject):
|
||||||
# Reimplemented hoverEvents to detect the mouse and toggle the animation
|
# Reimplemented hoverEvents to detect the mouse and toggle the animation
|
||||||
def hoverEnterEvent(self, event):
|
def hoverEnterEvent(self, event):
|
||||||
if ~self.detected and ~self.freeze:
|
if ~self.detected and ~self.freeze:
|
||||||
|
print('lol')
|
||||||
self.hoverEnter.emit()
|
self.hoverEnter.emit()
|
||||||
self.detected = True
|
self.detected = True
|
||||||
self.toggle_anim(True)
|
self.toggle_anim(True)
|
||||||
|
|
|
@ -169,8 +169,6 @@ class SudokuGrid(BaseSudokuItem):
|
||||||
painter.setPen(self.selection_pen)
|
painter.setPen(self.selection_pen)
|
||||||
painter.drawRect(self.selection_box)
|
painter.drawRect(self.selection_box)
|
||||||
|
|
||||||
# TODO: Possibly draw the fixed cell here
|
|
||||||
|
|
||||||
def hoverMoveEvent(self, event):
|
def hoverMoveEvent(self, event):
|
||||||
if not (self.freeze and self.drawn):
|
if not (self.freeze and self.drawn):
|
||||||
box_w = bound_value(0, int(event.pos().x()/self.cell_width), 8)
|
box_w = bound_value(0, int(event.pos().x()/self.cell_width), 8)
|
||||||
|
@ -227,25 +225,50 @@ class NumberRing(BaseSudokuItem):
|
||||||
super().__init__(parent=parent)
|
super().__init__(parent=parent)
|
||||||
|
|
||||||
self.setVisible(False)
|
self.setVisible(False)
|
||||||
self.radius = 48
|
|
||||||
self.cell_width = 24
|
self.cell_width = 24
|
||||||
self.cell_height = 24
|
self.cell_height = 24
|
||||||
|
|
||||||
self.cell_buttons = []
|
self.cell_buttons = []
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
cell_x = self.radius * np.sin(np.deg2rad(360/10*i)) - self.cell_width/2
|
|
||||||
cell_y = - self.radius * np.cos(np.deg2rad(360 / 10 * i)) - self.cell_height/2
|
|
||||||
if i == 0:
|
if i == 0:
|
||||||
cell_string = 'X'
|
cell_string = 'X'
|
||||||
else:
|
else:
|
||||||
cell_string = str(i)
|
cell_string = str(i)
|
||||||
btn = buttons.animBox(cell_x, cell_y, self.cell_width,
|
btn = buttons.animBox(0, 0, self.cell_width,
|
||||||
self.cell_height, cell_string, parent=self)
|
self.cell_height, cell_string, parent=self)
|
||||||
|
|
||||||
self.cell_buttons.append(btn)
|
self.cell_buttons.append(btn)
|
||||||
|
|
||||||
|
self.radius = 54
|
||||||
|
# Set up the radius to be animated
|
||||||
|
self.anim = QPropertyAnimation(self, b'radius')
|
||||||
|
self.anim.setDuration(100) # Animation speed
|
||||||
|
self.anim.setStartValue(0)
|
||||||
|
for t in range(1, 10):
|
||||||
|
self.anim.setKeyValueAt(t / 10, self.radius * t / 10)
|
||||||
|
self.anim.setEndValue(self.radius)
|
||||||
|
self.anim.finished.connect(self.finish_animation)
|
||||||
|
|
||||||
self.setFlag(QGraphicsItem.ItemIsFocusable, True)
|
self.setFlag(QGraphicsItem.ItemIsFocusable, True)
|
||||||
|
|
||||||
|
self.freeze_buttons(True)
|
||||||
|
|
||||||
|
def finish_animation(self):
|
||||||
|
if self.radius == 0:
|
||||||
|
self.setVisible(False)
|
||||||
|
self.freeze_buttons(True)
|
||||||
|
else:
|
||||||
|
self.freeze_buttons(False)
|
||||||
|
|
||||||
|
# Toggle the animation to be play forward or backward
|
||||||
|
def toggle_anim(self, toggling):
|
||||||
|
self.freeze_buttons(True)
|
||||||
|
if toggling:
|
||||||
|
self.anim.setDirection(QAbstractAnimation.Forward)
|
||||||
|
else:
|
||||||
|
self.anim.setDirection(QAbstractAnimation.Backward)
|
||||||
|
|
||||||
|
self.anim.start()
|
||||||
|
|
||||||
def boundingRect(self):
|
def boundingRect(self):
|
||||||
return QRectF(-5-self.radius-self.cell_width/2, -5-self.radius-self.cell_height/2,
|
return QRectF(-5-self.radius-self.cell_width/2, -5-self.radius-self.cell_height/2,
|
||||||
self.cell_width+self.radius*2+10, self.cell_height + self.radius * 2 + 10)
|
self.cell_width+self.radius*2+10, self.cell_height + self.radius * 2 + 10)
|
||||||
|
@ -259,12 +282,32 @@ class NumberRing(BaseSudokuItem):
|
||||||
btn.buttonClicked.connect(func)
|
btn.buttonClicked.connect(func)
|
||||||
print('Buttons Connected')
|
print('Buttons Connected')
|
||||||
|
|
||||||
#def freeze_buttons(self, state):
|
def freeze_buttons(self, freeze):
|
||||||
# for btn in self.cell_buttons:
|
for btn in self.cell_buttons:
|
||||||
# btn.freeze = state
|
btn.set_freeze(freeze)
|
||||||
|
|
||||||
def focusOutEvent(self, event):
|
def focusOutEvent(self, event):
|
||||||
self.setVisible(False)
|
self.toggle_anim(False)
|
||||||
|
#self.setVisible(False)
|
||||||
|
|
||||||
|
# Defining the length to be drawn as a pyqtProperty
|
||||||
|
@pyqtProperty(float)
|
||||||
|
def radius(self):
|
||||||
|
return self._radius
|
||||||
|
|
||||||
|
# Determine the length of the four lines to be drawn
|
||||||
|
@radius.setter
|
||||||
|
def radius(self, value):
|
||||||
|
self._radius = value
|
||||||
|
|
||||||
|
for i, btn in enumerate(self.cell_buttons):
|
||||||
|
cell_x = value * np.sin(np.deg2rad(360/10*i)) - self.cell_width/2
|
||||||
|
cell_y = - value * np.cos(np.deg2rad(360 / 10 * i)) - self.cell_height/2
|
||||||
|
|
||||||
|
btn.setX(cell_x)
|
||||||
|
btn.setY(cell_y)
|
||||||
|
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
|
||||||
class PlayMenu(BaseSudokuItem):
|
class PlayMenu(BaseSudokuItem):
|
||||||
|
|
Loading…
Reference in New Issue