From 77fb62ca5f9b9683860d2a055642585b7c120f34 Mon Sep 17 00:00:00 2001 From: steev Date: Tue, 12 Dec 2023 20:45:01 +0100 Subject: [PATCH] successfully added card snapping --- Game_Client/Classes/Objects/BoardField.py | 7 ++++++- .../Classes/Objects/Cards/MonsterCard.py | 11 ++++++++--- .../__pycache__/MonsterCard.cpython-311.pyc | Bin 4725 -> 4957 bytes Game_Client/Classes/Objects/World.py | 16 ++++++++-------- .../__pycache__/BoardField.cpython-311.pyc | Bin 3384 -> 3629 bytes .../Objects/__pycache__/World.cpython-311.pyc | Bin 5229 -> 5362 bytes Game_Client/Classes/System/App.py | 15 +++++++++++---- .../System/__pycache__/App.cpython-311.pyc | Bin 5221 -> 6369 bytes 8 files changed, 33 insertions(+), 16 deletions(-) diff --git a/Game_Client/Classes/Objects/BoardField.py b/Game_Client/Classes/Objects/BoardField.py index c4d8270..fb336bd 100644 --- a/Game_Client/Classes/Objects/BoardField.py +++ b/Game_Client/Classes/Objects/BoardField.py @@ -2,14 +2,16 @@ import pygame class BoardField(): __name:str + __side:str __type:str __pos:pygame.Vector2 __size:tuple __color:tuple = (255,255,255) _rect:pygame.Rect - def __init__(self, name:str, type:str, pos:pygame.Vector2, size:tuple, color:tuple): + def __init__(self, name:str, side:str, type:str, pos:pygame.Vector2, size:tuple, color:tuple): self.__name = name + self.__side = side self.__type = type self.__pos = pos self.__size = size @@ -19,6 +21,9 @@ class BoardField(): def getName(self) -> str: return self.__name + def getSide(self) -> str: + return self.__side + def getType(self) -> str: return self.__type diff --git a/Game_Client/Classes/Objects/Cards/MonsterCard.py b/Game_Client/Classes/Objects/Cards/MonsterCard.py index ff85836..42a05db 100644 --- a/Game_Client/Classes/Objects/Cards/MonsterCard.py +++ b/Game_Client/Classes/Objects/Cards/MonsterCard.py @@ -13,6 +13,7 @@ class MonsterCard(pygame.sprite.Sprite): __dragging:bool = False __offset:pygame.Vector2 = pygame.Vector2(0,0) __inputHandler: InputHandler + __type:str = "MonsterCard" image:pygame.image rect:pygame.rect @@ -37,8 +38,6 @@ class MonsterCard(pygame.sprite.Sprite): self.__attacks.append(attack) def update(self): - print("card update") - print(self.getDragging()) if self.getDragging(): mouse_pos = self.__inputHandler.getMousePos() self.__pos = mouse_pos @@ -65,8 +64,14 @@ class MonsterCard(pygame.sprite.Sprite): def getPos(self): return self.__pos + def getType(self): + return self.__type + def setDragging(self, dragging:bool): self.__dragging = dragging def setOffset(self, offset:pygame.Vector2): - self.__offset = offset \ No newline at end of file + self.__offset = offset + + def setPos(self, pos:pygame.Vector2): + self.__pos = pos \ No newline at end of file diff --git a/Game_Client/Classes/Objects/Cards/__pycache__/MonsterCard.cpython-311.pyc b/Game_Client/Classes/Objects/Cards/__pycache__/MonsterCard.cpython-311.pyc index 8716d370706f7ee08a9715f7e900029cd8d88df8..0cdb2d2d44cdfb2ed571d4cf75a6f8a9d0f6629a 100644 GIT binary patch delta 1557 zcmZ`(U1$?o6rP(-rZbsLCO=J@pEgO+#GTb7?p9qD*DY#;U20iSLF&Sg^^UcoiQbH& zvEBBeVi$Z+uHfPi6nv24gMvQF?wh{sLj)fr;Om0;qPY9w!s0oTv`*Z0l6-UWo$vhI zIrq-rYhUKIyPD<`;QIIWIqUXS?E(4e>TkcyQDM?=iI$ftJHTg2$2HX81)Q(L1=@_m zsmM`3D0^2}s#zipSn5%U>I>qePJ;`=WRQjcLo{rOM?EwGd>Cw3eqj3+h{%5@vAv+| zrwPC~OH;~3r3dzLzW_8b6>4mw=K52!l-H5=TBJ= zZ+I^CWN;ZR?MSV9)?&6U<2Xv9{@pB@Av1#6 zv*H4o+ZI=N)4O6(VZVUCWinw%d{)V6I=EOK!0<4G-&bN}1An4q)GvUl?*o_@c-%Km z3cR8gGbI!fwhnH~gc+#8#(!y?S3tb`7p+f-@sJ*a zO#>wkJ0(V4ay%ESCBSY;b<6&tR&RveUAMV$)Z$uU;L-S^c-glIA7=#<#sDwsxgp$* zt)9BgTDoags@0lZv8UnGnkGwvi>>9hzNVt1i6@W^BlII|MZk9u+lheVXU2CSGui-((~oT;ii~|?=vyYe+-W4qW8-;!YcUrqu@m~ z^+q7xHt@}%ZDomg6Til8rIAj27TSZul7_<4aBE5MMuNS`@Z7T`zaGjPDKrNVoCXh~ u0Ha_c7sI6xW-)+;I=du_D3GAR z=s_|XJ#x|zFB)zh{0B_5m?kQT2anz`;>DBiZ7FO;XS3hVy!pOw-oBann)=lszmVlh z0UCXFL+@UZUy+WLxA#4|IN`x4Hr`L7^VAKYib4R$9^FZ0-908!Wyv|DP<2TdQmGfv zOMSX?%t8GS_d(xg1knIQ{j>^r0U89Xq9MQ_JpdS@)w&BfVc;B~5&L>$vV+z@xSB=> z1ue#tj@9)qj(cT9=EGu)DEy9i#jQei%!}aT-^A-RQRvQA^-oV3rq0feFxrw%k57%8 z>2zQ{Q_)5`oj@pq_vbdiQ^6$g*=dwKhtbR32q~GJ6IKadEDP|AQ?2@&XrJ`5V{^iU zqv*O?R#Xk%CUay?NMj0C1Dd^GUW}*3Vvh=g0=}AKVAeefzmu5B(h*bFDmKfrY<$Y( zy{=?~0(6!H&>ZYAd^TN~=@~;$XQvGV^GGCEBY)(oJ$48N#tguM@KutRGaFJgFGX`w z6i4)v691^gHISc$zP)kpYdc6v)?zwT^+M0&hST0+D@+)8+7^V*YT)6WoD^eCe6jL)bsGf15Dyq@N7jxV|4>;MJc@xm*{z%u z0a=Tug|zWDcOz-!!|vvgC36GSGS91toRlcgitf@r_wVl3PzSo(boi$QT@15=|HGwA zvchpIzv+nvPoQ`&wfUSBx2*|UG%nHdEl)DoRVup;Ww*(o5Uzc)tXv!EE|tyZq%dnj zW<7tc9F1eT>=eMx-m`k-@9z4fqQ%Z(LsaAUUAsD!w?rt diff --git a/Game_Client/Classes/Objects/World.py b/Game_Client/Classes/Objects/World.py index 37c5b77..a1f3a58 100644 --- a/Game_Client/Classes/Objects/World.py +++ b/Game_Client/Classes/Objects/World.py @@ -19,29 +19,29 @@ class World(): # construct elements arround the playerfield # Todo add lifepoint label for player and enemy and make them scriptable pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), 15) - self.__boardFields.append(BoardField("EnemyDeck", "Deck", pVector, (self.__cardWidth, self.__cardHeight), (0,255,0))) + self.__boardFields.append(BoardField("EnemyDeck", "Enemy", "Deck", pVector, (self.__cardWidth, self.__cardHeight), (0,255,0))) pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 0)), (self.__cardHeight + 25)) - self.__boardFields.append(BoardField("EnemyGraveyard", "Grave", pVector, (self.__cardWidth, self.__cardHeight), (0,255,0))) + self.__boardFields.append(BoardField("EnemyGraveyard", "Enemy", "Grave", pVector, (self.__cardWidth, self.__cardHeight), (0,255,0))) pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 5)), ((2 * self.__cardHeight) + 60)) - self.__boardFields.append(BoardField("PlayerDeck", "Deck", pVector, (self.__cardWidth, self.__cardHeight), (255,0,0))) + self.__boardFields.append(BoardField("PlayerDeck", "Player", "Deck", pVector, (self.__cardWidth, self.__cardHeight), (255,0,0))) pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * 5)), ((2 * self.__cardHeight) + self.__cardHeight + 70)) - self.__boardFields.append(BoardField("PlayerGraveyard", "Grave", pVector, (self.__cardWidth, self.__cardHeight), (255,0,0))) + self.__boardFields.append(BoardField("PlayerGraveyard", "Player", "Grave", pVector, (self.__cardWidth, self.__cardHeight), (255,0,0))) for i in range(5): pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * i)), ((2 * self.__cardHeight) + 60)) - self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i),"MonsterField",pVector,(self.__cardWidth, self.__cardHeight),(255,255,255))) + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "MonsterField",pVector,(self.__cardWidth, self.__cardHeight),(255,255,255))) pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * i)), ((2 * self.__cardHeight) + self.__cardHeight + 70)) - self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "EffectField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) + self.__boardFields.append(BoardField("PlayerMonsterField-"+str(i), "Player", "EffectField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * (i+1)), 15), (self.__cardWidth, self.__cardHeight)) - self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "MonsterField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) + self.__boardFields.append(BoardField("EnemyMonsterField-"+str(i), "Enemy", "MonsterField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) pVector = pygame.Vector2((self.__cardOffset + ((self.__cardWidth + 10) * (i+1))), (self.__cardHeight + 25)) - self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "EffectField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) + self.__boardFields.append(BoardField("EnemySpellTrapField-"+str(i), "Enemy", "EffectField", pVector, (self.__cardWidth, self.__cardHeight), (255,255,255))) def getBoardFields(self) -> list: return self.__boardFields diff --git a/Game_Client/Classes/Objects/__pycache__/BoardField.cpython-311.pyc b/Game_Client/Classes/Objects/__pycache__/BoardField.cpython-311.pyc index aeeb3ecd243de767607ab71a6d8a1014d10adb7d..1481fa3ee8dd3a9c03e8d162c8e9e9acd56137b9 100644 GIT binary patch literal 3629 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 GjQs+ZRv=*j diff --git a/Game_Client/Classes/System/App.py b/Game_Client/Classes/System/App.py index 075704d..8e83619 100644 --- a/Game_Client/Classes/System/App.py +++ b/Game_Client/Classes/System/App.py @@ -62,15 +62,22 @@ class App: if event.type == pygame.QUIT: self.onCleanup() elif pygame.mouse.get_pressed()[0]: # Wenn linke Maustaste gedrückt wird - print("mousebutton down") mouse_x, mouse_y = pygame.mouse.get_pos() mouse_pos = pygame.Vector2(mouse_x, mouse_y) for card in self.cards: if card.rect.collidepoint(mouse_pos): card.setDragging(True) - print(card.getDragging()) - # Berechnung des Offset zwischen der Karte und der Mausposition - card.setOffset(mouse_pos - card.getPos()) + + # card.setOffset(mouse_pos - card.getPos()) + for field in self.__world.getBoardFields(): + if field.getRect().collidepoint(mouse_pos): + if field.getSide() == "Player": + if field.getType() == "MonsterField" and card.getType() == "MonsterCard": + # todo: resize card so that it fits into the card field + pygame.transform.scale(card.image,(int((field.getRect().width - 10)),int((field.getRect().height - 10)))) + card.rect.center = field.getRect().center + card.setDragging(False) + self.__window.getScreen().blit(card.image, field.getRect().center) elif event.type == pygame.MOUSEBUTTONUP: if event.button == 1: # Wenn linke Maustaste losgelassen wird diff --git a/Game_Client/Classes/System/__pycache__/App.cpython-311.pyc b/Game_Client/Classes/System/__pycache__/App.cpython-311.pyc index d826af9a691db62680e22f964f156f98a7616475..355ac301a3e78712e25756d3b0083ba112ee324c 100644 GIT binary patch delta 1669 zcmaJ=OH3O_7@k?|HILec5U`0&F);xgZ;&D6kO*XC9%`v<5UhjR0Fhyr#ICXF+I@tY zn%;WgKs%M%15ph^ArI8FhgS39xTxb8tI|UoX}o@0NlW{I98!> zFF~iONQg4PQOHO4nF~H2E$QNosu=(YUCLO>V}kYNY9#cr&a8P-dr+P}Y*ej=sOHLE zrbu*5pbZl!DGZ#Zq%b6O@9A2Oa@ryy{2ed26iI~+spL|%Bx)l_(4oUB7I&(<{nR@` z^{RrS7je1wm*Z(}-67Nexy?~mFtZyac5q+0T0&;k8B?rK_viPZ#S3T#oNhlK90-IO zRFBjVwR}{{Lbf&g&b;>$lK+1weNuAteA1yZ#Xax92Gu+6pU4#@kS%DI4=wZ`7kGFFs9I> z;lL$cxKG~0(0$Uaj%U$^-ic)W$)sQ)CWZ@q+!GB5T){1-XcvTFB(CT%JjTx!H|(Va zzJQDeIbNxV3xP;%E-K6`+SqI$%q!a9eBc7Flwn7q76%nb|0wh~6{K z-mMVr!?Jxi56YWy;x=Y$X=7ATbE^I^#wE}~hd z>t^ru-fQk{_s&JhiP_MODEx~CCr-*tPloYGjAys|yE8w<((H>FHXyM9kxkCZEdGM& za71Jy;>dzLvhedO@$_qN{sX}4aDe)wxa7$)L_OTIc&Qu!qtqBx&=nQ|vc!ZeST_Rw zM0esW!LY;-mRa|}t)(xQzDRzZl->SwR|mGA$Mmv{E5r0iOwW#AWcp>MKh5-GY}=b* z`X#1cWCmqsFvAQ>%*O@ztZW>?E zox(kUy8*%KQRqiw)lT>ldaL?6oJNkCYZhUcG+S9LE(kWf6UZYJTtrNu2Q}XtEn4hc m5^JqV^Rn?cl4vIs<}*c`6h_PYfBMe9M$Ld9+@;Qil2x4~(HU@${6!bQ+hw!O$XN#cv;QMjT@B7a0`<-(>4}9ri zpPEdah{o5orQ`?0He2j;>FKtO=D|A+LTgCIQM8Jur}7$jYj(k2=WVU{Q8GcmNSqSw zXhmAvS{3!cu|C)^*l;_%Hh7M8v?@_FE$11TNjGPzY|#MQMn5B7mYJfFE_rywSXs%` zI)RYPz=Y8cZ}b)|?O|z;T|+rD>vu0xnI{;b7c`Foqe6Za7l>;0q@~4PYuXfhWlfrE zaS81&)+3|zp9USO!6PrD3Ef}vPAWg0K<80_iHoZ4vSmKIm`h$=l%#CNo5>K(bHbZ&N*Vx6JyPVZXgx!X={RKeW)r7l!bwNmtQd^@Yp6u;Lr6_y!dcsgOvCMD~bxBYr==IkYA1th`*=&cDhl!KgxF6%s3v z*pGcfb0~|fj=OMzKc(-cw&?{R&yVBN@QDxN2{`1R;|uWE_Dra^(I=|6t_PeRGg(EtDd