Add working shop with upgrades and the dark mode wizard, and now the white mode is default, high score and evaded tax in main and add more tax evasion levels

This commit is contained in:
csd4ni3l
2025-10-11 22:16:10 +02:00
parent 5798f3ba2a
commit 5358e3b8ff
4 changed files with 222 additions and 50 deletions

View File

@@ -1,4 +1,6 @@
import arcade, arcade.gui
import arcade, arcade.gui, os, json
from math import ceil
from utils.constants import button_style, SHOP_ITEMS
from utils.preload import button_texture, button_hovered_texture
@@ -10,12 +12,86 @@ class Shop(arcade.gui.UIView):
self.pypresence_client = pypresence_client
self.anchor = self.add_widget(arcade.gui.UIAnchorLayout(size_hint=(1, 1)))
self.grid = self.anchor.add(arcade.gui.UIGridLayout(size_hint=(0.75, 0.75), column_count=4, row_count=999), anchor_x="center", anchor_y="center")
self.grid = self.anchor.add(arcade.gui.UIGridLayout(column_count=4, row_count=ceil(len(SHOP_ITEMS) / 4), horizontal_spacing=10, vertical_spacing=10), anchor_x="center", anchor_y="center")
if os.path.exists("data.json"):
with open("data.json", "r") as file:
self.data = json.load(file)
else:
self.data = {}
if not "shop" in self.data:
self.data["shop"] = {}
self.shop_buttons = []
def main_exit(self):
with open("data.json", "w") as file:
file.write(json.dumps(self.data, indent=4))
from menus.main import Main
self.window.show_view(Main(self.pypresence_client))
def on_show_view(self):
super().on_show_view()
self.back_button = arcade.gui.UITextureButton(texture=button_texture, texture_hovered=button_hovered_texture, text='<--', style=button_style, width=100, height=50)
self.back_button.on_click = lambda event: self.main_exit()
self.anchor.add(self.back_button, anchor_x="left", anchor_y="top", align_x=5, align_y=-5)
self.evaded_tax_label = self.anchor.add(arcade.gui.UILabel(f"Evaded Tax: {self.data['evaded_tax']}$", font_size=24), anchor_x="center", anchor_y="top")
for n, shop_item in enumerate(SHOP_ITEMS):
row, col = n // 4, n % 4
if not shop_item[1] in self.data["shop"]:
self.data["shop"][shop_item[1]] = 0
upgrade_cost = (self.data["shop"][shop_item[1]] + 1) * shop_item[3]
max_count = shop_item[2]
notice_string = "\n(Also increases knockback)" if "DMG" in shop_item[0] else ""
level_string = self.data["shop"][shop_item[1]] if self.data["shop"][shop_item[1]] < max_count else "Max"
button = self.grid.add(arcade.gui.UITextureButton(
text=f'{shop_item[0]}{notice_string}\nLevel: {level_string}\nUpgrade Cost: {upgrade_cost}$\n{shop_item[2] - self.data["shop"][shop_item[1]]}',
texture=button_texture,
texture_hovered=button_hovered_texture,
style=button_style,
width=self.window.width / 8,
height=self.window.width / 8,
multiline=True,
align="center"
), row=row, column=col)
self.shop_buttons.append(button)
button.on_click = lambda event, n=n: self.buy_upgrade(n)
def buy_upgrade(self, n):
item_list = SHOP_ITEMS[n]
json_name = item_list[1]
max_count = item_list[2]
current_level = self.data["shop"][json_name]
cost = (current_level + 1) * item_list[3]
if not self.data["evaded_tax"] >= cost:
return
if current_level >= item_list[2]:
return
self.data["shop"][json_name] += 1
self.data["evaded_tax"] -= cost
notice_string = "\n(Also increases knockback)" if "DMG" in item_list[0] else ""
level_string = self.data["shop"][item_list[1]] if self.data["shop"][item_list[1]] < max_count else "Max"
self.shop_buttons[n].text = f"{item_list[0]}{notice_string}\nLevel: {level_string}\nUpgrade Cost: {cost + item_list[3]}"
self.evaded_tax_label.text = f"Evaded Tax: {self.data['evaded_tax']}$"
def on_key_press(self, symbol, modifiers):
if symbol == arcade.key.ESCAPE:
from menus.main import Main
self.window.show_view(Main(self.pypresence_client))
self.main_exit()