From 5e1411d74101c53da83a76176f1f6dbe46103a95 Mon Sep 17 00:00:00 2001 From: Hannah-Dagemark Date: Fri, 27 Sep 2024 14:37:53 +0200 Subject: [PATCH] 27/09-24 --- Main.py | 241 ++++++++++++++---- Map/MapManager.py | 8 +- Map/__pycache__/MapManager.cpython-312.pyc | Bin 18723 -> 18976 bytes Map/__pycache__/TileTypes.cpython-312.pyc | Bin 5176 -> 5167 bytes Realms/RealmManager.py | 8 + .../__pycache__/RealmManager.cpython-312.pyc | Bin 5801 -> 6148 bytes .../__pycache__/ScriptUtils.cpython-312.pyc | Bin 164 -> 155 bytes 7 files changed, 209 insertions(+), 48 deletions(-) diff --git a/Main.py b/Main.py index 4bb189c..504d37e 100644 --- a/Main.py +++ b/Main.py @@ -13,8 +13,8 @@ import RealmManager # pygame setup pygame.init() -w,h = 1280, 720 -screen = pygame.display.set_mode((w, h)) +screenwidth,screenheight = 1280, 720 +screen = pygame.display.set_mode((screenwidth,screenheight)) pygame.display.set_caption('CountDuchKing') clock = pygame.time.Clock() running = True @@ -132,25 +132,22 @@ class uText: self.takenPos = [] self.texts_to_remove = [] + def getRect(self,text): + tp = self.font.render(text, True, (255, 255, 255)) + return tp.get_rect() + def write(self, text, position): if not (text,position) in self.texts: for textTest in self.texts: if textTest[0] != text and textTest[1] == position: self.texts.remove(textTest) self.texts.append((text,position)) - #print("\n\nT E X T S :") - #p = [] - #for t in self.texts: - # p.append(t[0]) - #print(p) - def delete(self, parameter, info): + def removeText(self, t): text2 = [] - for place in self.texts: - if place[0] != info and parameter == "name": - text2.append(place) - elif place[1] != info and parameter == "pos": - text2.append(place) + for text in self.texts: + if str(text[0]) != str(t): + text2.append(text) self.texts = text2 def runText(self): @@ -182,6 +179,12 @@ class uText: for subbit in bit[1]: i += 1 self.write(f"{subbit[1].capitalize()}, {subbit[0]}",(1090,100+50*i)) + elif bit[0] == "buildings": + self.write(f"{bit[0].capitalize()}:", (840,100 + 50*i)) + i -= 1 + for subbit in bit[1]: + i += 1 + self.write(f"{subbit.capitalize()}",(1090,100+50*i)) else: self.write(f"{bit[0].capitalize()}:",(840,100 + 50*i)) if bit[1] != [] and bit[1] != {}: @@ -225,7 +228,7 @@ class uButtons: "blue": (0, 0, 255,) } - def addButton(self, name, x, y, width, height, colour_standby=(255,255,255), colour_hover=(200, 200, 200), onAction=None, delOnAction=False): + def addButton(self, name, x, y, colour_standby=(255,255,255), colour_hover=(200, 200, 200), onAction=None, delOnAction=False, padX=10, padY=4, padding=None): if colour_standby != (255,255,255): if self.colours[colour_standby] != None: colour_standby = self.colours[colour_standby] @@ -236,21 +239,39 @@ class uButtons: colour_hover = self.colours[colour_hover] else: colour_hover = (200, 200, 200) + if padding != None: + padding[0] = self.colours[padding[0]] + + textRect = uTexter.getRect(name) + width = textRect.width + padX + height = textRect.height + padY button = { "text": name, - "xPos": x, - "yPos": y, + "xPos": x-(padX/2), + "yPos": y-(padY/2), "width": int(width), "height": int(height), "colour_standby": colour_standby, "colour_hover": colour_hover, "button_action": onAction, "delOnAction": delOnAction, - "isHover": False + "isHover": False, + "padding": padding } self.buttons.append(button) uTexter.write(name,(x,y)) + def removeButton(self, name): + for b in self.buttons: + if b["text"] == name: + print(f"Succesfully removed button {name}") + uTexter.removeText(name) + self.buttons.remove(b) + pass + print(f"Failed to remove button {name} among buttons ") + for b in self.buttons: + print(b["text"]) + def updateHover(self): pos = pygame.mouse.get_pos() for button in self.buttons: @@ -264,6 +285,11 @@ class uButtons: def drawButtons(self): for button in self.buttons: + if button["padding"] != None: + bP = button["padding"] + ofst = bP[1]/2 + padRect = pygame.Rect(button["xPos"]-ofst,button["yPos"]-ofst,button["width"]+bP[1],button["height"]+bP[1]) + pygame.draw.rect(screen,(bP[0]),padRect) buttonRect = pygame.Rect(button["xPos"],button["yPos"],button["width"],button["height"]) if button["isHover"] == False: pygame.draw.rect(screen,(button["colour_standby"]),buttonRect) @@ -275,11 +301,11 @@ class uButtons: if button["isHover"] == True: if button["button_action"] != None: if button["delOnAction"] == True: - self.buttons.remove(button) - uTexter.write("",(button["xPos"],button["yPos"])) + self.removeButton(button["text"]) exec(button["button_action"]) else: print(f"No action found for button {button["text"]}") + class uCommunicate: @@ -289,29 +315,33 @@ class uCommunicate: self.turnHolder = 0 self.resourceView = False #False = State resources, True = Player resources self.resourceViewActive = True #False = No Button Rendered, True = Button Rendered + self.tileSelectable = True def startGame(self): GameRealms.load(map) self.globalGameState = 1 self.globalTurn = 1 uTexter.write("Turn:",(850,580)) - uButtoner.addButton("Player", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True) - uButtoner.addButton("Claim", 850, 500,110,40,"darkgray","gray","uCommunicator.claimState()") + uButtoner.addButton("Player", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True) + uButtoner.addButton("Claim", 850, 500,"darkgray","gray","uCommunicator.claimState()") t2 = Thread(target=uCommunicator.gameLoop) t2.start() - def tileSelected(self): - uButtoner.addButton("Build", 0, 600, 100, 50, "darkgray", "gray", "uPopper.buildMenu()") - uButtoner.addButton("Assemble", 150, 600, 180, 50, "darkgray", "gray", "uPopper.buildMenu()") - uButtoner.addButton("Order", 380, 600, 120, 50, "darkgray", "gray", "uPopper.buildMenu()") - + def tileSelected(self, tPressed): + if self.globalGameState == 1: + print(f"Checking for {tPressed} in {GameRealms.getPlayer("p1").heldTiles}") + if GameRealms.tileInPlayer(tPressed,self.turnHolder): + uPopper.buttonManager() + else: + uPopper.buttonManager(True) + def switchResourceView(self): if self.resourceView: - uButtoner.addButton("Player", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True) + uButtoner.addButton("Player", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True) self.resourceView = False elif not self.resourceView: if tile_pressed != None: - uButtoner.addButton("State", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True) + uButtoner.addButton("State", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True) self.resourceViewActive = True else: self.resourceViewActive = False @@ -394,31 +424,147 @@ class uCommunicate: GameMap.claimTileFor(expandTile,GameRealms.getPlayer(f"{ccc}"),map) curPlayer.heldTiles.append(expandTile) +class tileMod: + + def __init__(self): + self.ct = 0 #Current tile + + def cct(self, t): #cycle current tile + self.ct = t + + def modIsAvailable(self,mod): + tile = GameMap.tiles[str(self.ct)] + if str(mod) in tile.buildings: + return False + return True + def buildHouse(self): + tile = GameMap.tiles[str(self.ct)] + tile.buildings.append("house") + tile.resources.append((0.25,"villagers")) + + def buildLogger(self): + print("building logger") + tile = GameMap.tiles[str(self.ct)] + tile.buildings.append("logger") + for r in tile.resources: + print(r) + if r[1] == "wood": + a = r[0]*2 + i = tile.resources.index(r) + tile.resources.remove(r) + tile.resources.insert(i,(a,"wood")) + break + + print((a,"wood")) + class uPop: def __init__(self): - self.yes = True - self.menuColour = (100, 100, 100) - self.itemColour = (200, 200, 200) - self.Popup = None - self.hasPopup = False - - def buildMenu(self): - self.hasPopup = True - self.Popup = { - "x": 200, "y": 200 - } + self.pops = {} + self.pop = None + self.buttons = False + self.popButtons = False + self.doneCheck = False + def buttonManager(self,clean=False): + if self.buttons == False and not clean: + print("Creating buttons") + uButtoner.addButton("Build", 0, 600, "darkgray", "gray", "uPopper.prefabBuild()", True) + uButtoner.addButton("Assemble", 150, 600, "darkgray", "gray", "uPopper.prefabAssemble()", True) + uButtoner.addButton("Order", 380, 600, "darkgray", "gray", "uPopper.prefabOrder()", True) + self.buttons = True + elif clean == True and self.buttons == True: + uButtoner.removeButton("Build") + uButtoner.removeButton("Assemble") + uButtoner.removeButton("Order") + self.buttons = False + + def prefabBuild(self): + print("running prefab build") + uPopper.buildPop("build",(("house","tModder.buildHouse()"),("logger","tModder.buildLogger()"))) + uButtoner.addButton("Exit", 0, 600, "darkgray", "gray", "uPopper.closePop()", True) + def prefabAssemble(self): + uPopper.buildPop("assemble",(("hello","print(\"gayass\")"),("goodbye","print(\"WootWoot\")"))) + uButtoner.addButton("Exit", 150, 600, "darkgray", "gray", "uPopper.closePop()", True) + def prefabOrder(self): + uPopper.buildPop("order",(("hello","print(\"gayass\")"),("goodbye","print(\"WootWoot\")"))) + uButtoner.addButton("Exit", 380, 600, "darkgray", "gray", "uPopper.closePop()", True) + + def buildPop(self,nameId,content,defaultColour=(100,100,100),itemColour=(200,200,200)): + curWidth = 0 + curHeight = 0 + for item in content: + t = item[0] + w, h = uTexter.getRect(str(t)).width,uTexter.getRect(str(t)).height + curHeight += h+10 + if curWidth < w: + curWidth = w + + w = curWidth + 20 + h = curHeight + 20 + x = (mapWidth-w)/2 + y = (mapHeight-h)/2 + popup = { + "x":x,"y":y,"w":w,"h":h, + "name": nameId, + "defaultColour": defaultColour, + "itemColour": itemColour, + "contents": content #Lists in the format of (buttonName,buttonAction) as the position and size is predefined + } + self.pops[nameId] = popup + self.pop = nameId + + def drawPop(self): + if self.pop != None: + p = self.pops[self.pop] + iX = p["x"] + 10 + iY = p["y"] + 10 + oY = 0 + a = 0 + if self.popButtons == False: + + uCommunicator.tileSelectable = False + for item in p["contents"]: + text = item[0] + action = item[1] + if tModder.modIsAvailable(text): + uButtoner.addButton(str(text), iX,iY+oY,"darkgray", "gray",action,True,10,4,["black",2]) + oY += uTexter.getRect(str(text)).height+10 + a += 1 + if a == 0: + uButtoner.addButton("All buildings completed",iX,iY+oY,"darkgray", "gray","uPopper.closePop()",True,10,4,["black",2]) + p["contents"] = (("All buildings completed",),) + self.doneCheck = True + self.popButtons = True + if self.doneCheck: + self.popRect = uTexter.getRect("All buildings completed") + self.popRect.x, self.popRect.y = p["x"],p["y"] + pygame.draw.rect(screen,(p["defaultColour"]),self.popRect) + else: + self.popRect = pygame.Rect(p["x"],p["y"],p["w"],p["h"]) + pygame.draw.rect(screen,(p["defaultColour"]),self.popRect) - + def closePop(self): + for c in self.pops[self.pop]["contents"]: + uButtoner.removeButton(str(c[0])) + print(f"Removed {c[0]}") + uCommunicator.tileSelectable = True + self.doneCheck = False + self.popButtons = False + self.pop = None + self.buttonManager(True) + self.buttonManager() + + +tModder = tileMod() uPopper = uPop() uButtoner = uButtons() uTexter = uText() uCommunicator = uCommunicate() def prerenderGraphics(): - uButtoner.addButton("Start Game", 850, 500, 200, 50, "darkgray", "gray", "uCommunicator.startGame()", True) + uButtoner.addButton("Start Game", 850, 500, "darkgray", "gray", "uCommunicator.startGame()", True) prerenderGraphics() @@ -457,30 +603,31 @@ while running: print(f"MB1 is true") pos = pygame.mouse.get_pos() uButtoner.pressed(pos) - if pos[0] < 830 and pos[1] < 580: + if pos[0] < 830 and pos[1] < 580 and uCommunicator.tileSelectable == True: tile_pressed = GameMap.findTileAt(pos) if tile_pressed != None: GameMap.paintTileBorder(tile_pressed, map) + tModder.cct(tile_pressed) + uCommunicator.tileSelected(tile_pressed) # fill the screen with a color to wipe away anything from last frame screen.fill("black") if uCommunicator.resourceViewActive == False and uCommunicator.resourceView == True and tile_pressed != None: - uButtoner.addButton("State", 850, 0, 120, 50, "darkgray", "gray", "uCommunicator.switchResourceView()", True) + uButtoner.addButton("State", 850, 0, "darkgray", "gray", "uCommunicator.switchResourceView()", True) if tile_pressed != None and uCommunicator.resourceView == False: uTexter.runResourceView(tile_pressed, "t") elif uCommunicator.globalGameState == 1: uTexter.runResourceView("p1", "p") - - if tile_pressed != None: - uCommunicator.tileSelected() + + screen.blit(map, maprect) + uPopper.drawPop() uButtoner.updateHover() uButtoner.drawButtons() uTexter.runText() - screen.blit(map, maprect) # RENDER YOUR GAME HERE diff --git a/Map/MapManager.py b/Map/MapManager.py index d933a4e..76d252a 100644 --- a/Map/MapManager.py +++ b/Map/MapManager.py @@ -159,7 +159,13 @@ class MapManager: tile.paint_pixels(mapObject, int(colour1),int(colour2),int(colour3)) tile.findBorder(mapObject) tile.add_resources(self.TileWorker.get_resource_for(terrain)) - + + #### Interactions + def buildHouse(self, tile): + pass + def buildBigHouse(self, tile): + pass + # Etc etc def re_load(self): print("To Be Implomented") diff --git a/Map/__pycache__/MapManager.cpython-312.pyc b/Map/__pycache__/MapManager.cpython-312.pyc index 63033afd3ca8be928b3ab64fdb2805a7b51c701f..fd70b27e805927fcd5bac6a91779b2f891584bd2 100644 GIT binary patch delta 1372 zcmZvcUrbYX6vywWr7M+I0S%x6Emc{gUZj>P1#0X}Q*83H}Cd;yiMIU^b$&$Sp9^9V?AIuB`ml%Cm_B+3V3i?a#=l=ej zbH2ZO&dI(04UC@w+e53>BJpwMpV*#$?`hk9=*KU;ot27pSn67&*fZCq(|lwwt~-k z=L$w7X^tZMircVVgxwr-^sFLqAlg@uteh`7dvcS!d0 zC)YV3ily=jh@mV8;ZHp+7eg5(#I>McnIZpjbOg$a^Tt9|VtA`z8$8orG`PWZoFa{4 zL!%$2Fwyug9LHX_15Vl^oi;*|b=s_3yqBS( zpDd^;f-dWXpjmn_` z$4rd|`7~>xddhw3V7sy$&CTJ)8IK%4e8)p058JHA4pGY*Jlxz-O`z0JTe$fCR|1AJr?XN9%*sH z2!7vE1@-u#=dDu_s0N?j6fhWTb96{Qrh)~9W+enG z;Ya)|xEg}`!Qe4)U8J2$gv*3)2~-|N8D~R;VZsPDgesk)p*v_judi0q9>IdKQ2(;I or?1Sddy`5!uKL+e_;;wPCSZj1QxfsT$L27=R+yH=OZ*}J2h`I{YXATM delta 1172 zcmZvbU2IEX7{~i`=M>x8O|n_H`e=1VeN?q-Y;+5YDO(9!e56LJXI1G=oA-2BgC&$~ zkue@$VLpOHmXMg^int&V35kdckuAQiTyVi5A+Eg7vE9f{a(?H{^S=M*d7qDS?F`&F z4VD*XbH0H;(avq{pZupRdm)Tls#^IG!z%cKWjL}{9I7l8 zHcH9YYVm?TfGA#ZPlpITa#uhHzI8kJ`j2}mx0fwk4I^sX!bxCm=So)|bCMSYGaftN zKI>TvpVf~ZFPL&7=Ggm{}GcOs2E$8EbeY2r@IJg!af3Jzz!3R5qb$dgfoOVVJbmSmy%}$ zdX+UCIfEuNfLNk68SP?~)&M>+1X>b6bZRC+v}%O~e6wPTI7RcQw(4Fe+sReT$g$dG z9ySJJEJ%hdK3qD_5us&2;RK3RHry+bJ1mcw-HseM{~iTn-_E)%E%!};k{x-%KcBvP_VWaFG*{g_+s zv~}~t*^;sFjgby1os4t^<@S^VpDcelQNM$c*Y?5+Kg`0HD?<7-up2lt;DtHZ8t5t? zJ);LH;Qq!+eF;AYd@vtvb&ny7@9LVtqt2_pZ7ijJu$ctC^m>AK@axLiGiYYBR{c6@ z8pIv{hH^(*ujXRayUHlc(5p{>_`eoYNLENN6Yk-r#ww^+vyHvrI!l&wg!6=}1nMlK zW-+QgJ4EQl`9W&|MQ0&G9M=cSK)`r#H^lK((7NJPcF?(%_}L6anCIA MC{5ZN#CDe#0037LHvj+t diff --git a/Realms/RealmManager.py b/Realms/RealmManager.py index 464de50..f57cdd6 100644 --- a/Realms/RealmManager.py +++ b/Realms/RealmManager.py @@ -28,6 +28,12 @@ class RealmManager: p = self.players[x] print(f"Player {p.id}/{p.name} with colour {p.borderColour}") + def tileInPlayer(self, tile, player): + for t in self.players[int(player)].heldTiles: + if str(tile) == str(t): + return True + return False + def getPlayer(self, detail): if detail == "p1": return self.players[0] @@ -72,6 +78,8 @@ class Player: "tools": 0.0, } self.daywiseResourceGain = { + "settlers": 0.0, + "villagers": 0.0, "wood": 0.0, "stone": 0.0, "food": 0.0, diff --git a/Realms/__pycache__/RealmManager.cpython-312.pyc b/Realms/__pycache__/RealmManager.cpython-312.pyc index 8192c887a8bf7f20c18e9c16e75b06fb492d3977..1be76757d9a346431a74f05d526a26a934ec0ef3 100644 GIT binary patch delta 791 zcmYk4Jxo(k6vyv*A1!U#(x)wy6tOX&wne@yArS%rY6J2iK{SR`V?&>ctq*eFTWT;k zbTE-Yat8*8!A)agVmdiFx#%KsP#+F14lV@CKr{}X(~98@zkBch|G($H+;g9wDR%hY zd%bRk-}J9LH{-rlpW$!C)f&^;EM(cNly$DIgxp!R$Yz}dN3`bEvy`L0clccTvZ-@3 zJ(4jDJ)P9eoVBo6@;T#DSf+CSJ{3n=?-dbiOk8)>g{=R9CFuoJgAF){r|!UVl3fck zc3-xfRfDl5I0zlmUYYpmQ56Q$aPd9En7D3;7=MM~$h9f3IO$&*bk;WQ@!$owpsfj$_#D zLp)%gwcuLgYU9S-=E?QkmKOV@CAPFgnMtn3hl5{hk33F1Dr^jI!g}gs?TIh-;awG- zT?g|A`6(ryo?9?1zL3xBoX12g&*;aTIg(wTFYQu|&{E}4*AGkC=5ec`=>{#WRgGNhs4KbRBD?lp zI80krH`subg5mDIbT5WXPerSj3)Q+tO^0C>8#M@X%MqIi22f9eMbk>Fx#JKv}~$hpZ!c zWP@!hLCLxlA0hLssVFeT&J`85*t3#`4C^T$kt~LroEQ+?$jcBf6gVR!$|aM`6B>jA z77a}&mvAA4q>&vfM>5D5Vx8&74oR`gP$Hkf>3{m`UTieWt-6*X1s>p2beQvL1Ate- V*R#*U3VaD@?-U~7{T4XZ1%H#BYt{e& diff --git a/Script/__pycache__/ScriptUtils.cpython-312.pyc b/Script/__pycache__/ScriptUtils.cpython-312.pyc index 24c6d33af90715deb6a6753240486312865f4482..6a5682603b493457636b05c0ed33c3e9f5d835da 100644 GIT binary patch delta 46 zcmZ3&IGd6CG%qg~0}xbeWK85X7PoS?iU}=FEh>)jNX*Mijd4jW&MwI>m>A~<02(O{ A0{{R3 delta 55 zcmbQuxP+1WG%qg~0}z-N$xh@pR&aK)5NX*MijB&|NF3nBND=Cg~&n)pM JO_~_$1^}Yg5m*2K