2019-11-02 17:27:54 -05:00
|
|
|
from direct.gui.DirectGui import *
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from direct.task import Task
|
|
|
|
from toontown.toonbase import TTLocalizer
|
2019-12-30 00:07:56 -06:00
|
|
|
from . import PlayingCardGlobals
|
2019-11-02 17:27:54 -05:00
|
|
|
|
|
|
|
class PlayingCardBase:
|
|
|
|
|
|
|
|
def __init__(self, value):
|
|
|
|
self.faceUp = 1
|
|
|
|
self.setValue(value)
|
|
|
|
|
|
|
|
def getCardName(self):
|
|
|
|
PlayingCardGlobals.getCardName(self.value)
|
|
|
|
|
|
|
|
def getRank(self):
|
|
|
|
return self.rank
|
|
|
|
|
|
|
|
def getSuit(self):
|
|
|
|
return self.suit
|
|
|
|
|
|
|
|
def getValue(self):
|
|
|
|
return self.value
|
|
|
|
|
|
|
|
def setImage(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def setValue(self, value):
|
|
|
|
self.value = value
|
|
|
|
if self.value == PlayingCardGlobals.Unknown:
|
|
|
|
self.suit = None
|
|
|
|
self.rank = None
|
|
|
|
self.turnDown()
|
|
|
|
else:
|
2019-12-31 12:36:56 -06:00
|
|
|
self.suit = value // PlayingCardGlobals.MaxRank
|
2019-11-02 17:27:54 -05:00
|
|
|
self.rank = value % PlayingCardGlobals.MaxRank
|
|
|
|
self.setImage()
|
|
|
|
return
|
|
|
|
|
|
|
|
def isFaceUp(self):
|
|
|
|
return self.faceUp
|
|
|
|
|
|
|
|
def isFaceDown(self):
|
|
|
|
return not self.faceUp
|
|
|
|
|
|
|
|
def turnUp(self):
|
|
|
|
self.faceUp = 1
|
|
|
|
self.setImage()
|
|
|
|
|
|
|
|
def turnDown(self):
|
|
|
|
self.faceUp = 0
|
|
|
|
self.setImage()
|
|
|
|
|
|
|
|
|
|
|
|
class PlayingCardNodePath(NodePath, PlayingCardBase):
|
|
|
|
|
|
|
|
def __init__(self, style, value):
|
|
|
|
self.image = None
|
|
|
|
self.style = style
|
|
|
|
NodePath.__init__(self, 'PlayingCard')
|
|
|
|
PlayingCardBase.__init__(self, value)
|
|
|
|
return
|
|
|
|
|
|
|
|
def setImage(self):
|
|
|
|
if self.faceUp:
|
|
|
|
image = PlayingCardGlobals.getImage(self.style, self.suit, self.rank)
|
|
|
|
else:
|
|
|
|
image = PlayingCardGlobals.getBack(self.style)
|
|
|
|
if self.image:
|
|
|
|
self.image.removeNode()
|
|
|
|
self.image = image.copyTo(self)
|
|
|
|
|
|
|
|
|
|
|
|
class PlayingCardButton(PlayingCardBase, DirectButton):
|
|
|
|
|
|
|
|
def __init__(self, style, value):
|
|
|
|
PlayingCardBase.__init__(self, value)
|
|
|
|
self.style = style
|
|
|
|
DirectButton.__init__(self, relief=None)
|
|
|
|
self.initialiseoptions(PlayingCardButton)
|
|
|
|
self.bind(DGG.B1PRESS, self.dragStart)
|
|
|
|
self.bind(DGG.B1RELEASE, self.dragStop)
|
|
|
|
return
|
|
|
|
|
|
|
|
def setImage(self):
|
|
|
|
if self.faceUp:
|
|
|
|
image = PlayingCardGlobals.getImage(self.style, self.suit, self.rank)
|
|
|
|
else:
|
|
|
|
image = PlayingCardGlobals.getBack(self.style)
|
|
|
|
self['image'] = image
|
|
|
|
|
|
|
|
def dragStart(self, event):
|
|
|
|
taskMgr.remove(self.taskName('dragTask'))
|
|
|
|
vWidget2render2d = self.getPos(render2d)
|
|
|
|
vMouse2render2d = Point3(event.getMouse()[0], 0, event.getMouse()[1])
|
|
|
|
editVec = Vec3(vWidget2render2d - vMouse2render2d)
|
|
|
|
task = taskMgr.add(self.dragTask, self.taskName('dragTask'))
|
|
|
|
task.editVec = editVec
|
|
|
|
|
|
|
|
def dragTask(self, task):
|
|
|
|
mwn = base.mouseWatcherNode
|
|
|
|
if mwn.hasMouse():
|
|
|
|
vMouse2render2d = Point3(mwn.getMouse()[0], 0, mwn.getMouse()[1])
|
|
|
|
newPos = vMouse2render2d + task.editVec
|
|
|
|
self.setPos(render2d, newPos)
|
|
|
|
return Task.cont
|
|
|
|
|
|
|
|
def dragStop(self, event):
|
|
|
|
taskMgr.remove(self.taskName('dragTask'))
|
|
|
|
messenger.send('PlayingCardDrop', sentArgs=[self])
|
|
|
|
|
|
|
|
def destroy(self):
|
|
|
|
taskMgr.remove(self.taskName('dragTask'))
|
|
|
|
DirectButton.destroy(self)
|