Lebegő számok

This commit is contained in:
markojozsef
2026-10-17 15:31:14 +02:00
parent f26964e697
commit a4cb6136a8
4 changed files with 51 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
import math import math
K_NORMAL = 100 K_NORMAL = 100
K_DEFUP = 50 K_DEFUP = 50
@@ -56,7 +56,7 @@ class Action:
def __repr__(self): def __repr__(self):
return self.__str__() return self.__str__()
def execute(self): def execute(self, damage_callback):
target = self.where target = self.where
if self.who.ko or self.who.stone: if self.who.ko or self.who.stone:
print(f" -> {self.who.name} cannot move!") print(f" -> {self.who.name} cannot move!")
@@ -91,8 +91,10 @@ class Action:
if delta_hp > 0: if delta_hp > 0:
print(f" -> {target.name} got healed for {delta_hp} HP!") print(f" -> {target.name} got healed for {delta_hp} HP!")
damage_callback(delta_hp, target)
elif delta_hp < 0: elif delta_hp < 0:
print(f" -> {target.name} suffered {-delta_hp} damage!") print(f" -> {target.name} suffered {-delta_hp} damage!")
damage_callback(delta_hp, target)
target.hp = max(0, min(target.maxhp, target.hp + delta_hp)) target.hp = max(0, min(target.maxhp, target.hp + delta_hp))

View File

@@ -5,14 +5,14 @@ from battle import Combatant, Action, Damage, StatusChange
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Animáció (ugyanaz, mint az eredetiben) # Animáció (ugyanaz, mint az eredetiben)
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
def anim_default(action, text, timer, dt): def anim_default(action, text, timer, dt, damage_callback):
if timer == 0: if timer == 0:
text.reset(action.name) text.reset(action.name)
text.type_all() text.type_all()
if timer >= 1: if timer >= 1:
text.reset("") text.reset("")
action.execute() action.execute(damage_callback)
return True return True
return False return False

View File

@@ -24,6 +24,7 @@ inventory = []
enemy_sprites = [] enemy_sprites = []
party_sprites = [] party_sprites = []
floating_numbers = []
gray_cache = {} gray_cache = {}
action_queue = [] action_queue = []
@@ -31,8 +32,8 @@ cur_action = None
action_timer = 0 action_timer = 0
menu_text = TextRenderer(6, 76, 210) menu_text = TextRenderer(6, 76, 210)
action_text = TextRenderer(128, 204, None, True) action_text = TextRenderer(122, 204, None, True)
action_panel = renderers.NineSlicesPanel(73,187,110,40) action_panel = renderers.NineSlicesPanel(67,187,110,40)
show_action_panel = False show_action_panel = False
menu_open = 0 menu_open = 0
@@ -48,8 +49,18 @@ def enemy_pos(i):
def party_pos(i): def party_pos(i):
return (40 + (i % 2) * 30, 165 - i * 25) return (40 + (i % 2) * 30, 165 - i * 25)
def sprite_pos(who):
if who in party_members:
i = party_members.index(who)
return party_pos(i)
elif who in enemies:
i = enemies.index(who)
return enemy_pos(i)
else:
return (0,0)
def switch(game): def switch(game):
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory, enemy_sprites, party_sprites global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory, enemy_sprites, party_sprites, floating_numbers
enemies = copy.deepcopy(battle_data.battles[battle_id]["enemies"]) enemies = copy.deepcopy(battle_data.battles[battle_id]["enemies"])
party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"]) party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"])
enemy_turn = copy.deepcopy(battle_data.battles[battle_id]["enemy_turn_func"]) enemy_turn = copy.deepcopy(battle_data.battles[battle_id]["enemy_turn_func"])
@@ -60,6 +71,7 @@ def switch(game):
enemy_sprites = battle_data.battles[battle_id]["enemy_sprites"] enemy_sprites = battle_data.battles[battle_id]["enemy_sprites"]
party_sprites = battle_data.battles[battle_id]["party_sprites"] party_sprites = battle_data.battles[battle_id]["party_sprites"]
battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True) battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True)
floating_numbers = []
close_menu() close_menu()
def close_menu(): def close_menu():
@@ -230,7 +242,7 @@ def menu_action(data):
"Támadás", user, targets[0], "Támadás", user, targets[0],
Damage(user.attack, 0, 0, 0), StatusChange(0, 0, 0), Damage(user.attack, 0, 0, 0), StatusChange(0, 0, 0),
battle_data.anim_default)) battle_data.anim_default))
open_target_menu(user, aparty, eparty, "ene", queue_attack, open_target_menu(user, aparty, eparty, "ene", queue_attack,
lambda *a: open_menu((user, 0, aparty, eparty))) lambda *a: open_menu((user, 0, aparty, eparty)))
case "magic": case "magic":
@@ -244,6 +256,17 @@ def menu_action(data):
close_menu() close_menu()
# !!! CHATGPT VÉGE !!! # !!! CHATGPT VÉGE !!!
def damage_callback(amount, target):
normalized = -amount if amount < 0 else amount
color = (255,255,255) if amount < 0 else (100,255,100)
tr = TextRenderer(*sprite_pos(target), None, True)
tr.reset(str(normalized))
tr.type_all()
floating_numbers.append([tr, color, 0, 0.4, 0.5])
def update(game, dt): def update(game, dt):
global menu_open, cur_action, action_timer, show_action_panel global menu_open, cur_action, action_timer, show_action_panel
@@ -274,7 +297,7 @@ def update(game, dt):
action_timer = 0 action_timer = 0
if cur_action != None: if cur_action != None:
if cur_action.animation(cur_action, action_text, action_timer, dt): if cur_action.animation(cur_action, action_text, action_timer, dt, damage_callback):
cur_action = None cur_action = None
show_action_panel = False show_action_panel = False
else: else:
@@ -290,6 +313,12 @@ def update(game, dt):
for m in menu: for m in menu:
m.update() m.update()
for n in floating_numbers:
n[0].move(n[2], n[3])
n[4] -= dt
if n[4] <= 0:
floating_numbers.remove(n)
if len(enemies) != 0 and all(e.ko or e.stone for e in enemies): if len(enemies) != 0 and all(e.ko or e.stone for e in enemies):
print("\nVICTORY! all enemies were defeated.") print("\nVICTORY! all enemies were defeated.")
battle_music.stop() battle_music.stop()
@@ -340,6 +369,10 @@ def draw_battlers(combatants, sprite_table, pos_func):
def draw(game): def draw(game):
draw_battlers(enemies, enemy_sprites, enemy_pos) draw_battlers(enemies, enemy_sprites, enemy_pos)
draw_battlers(party_members, party_sprites, party_pos) draw_battlers(party_members, party_sprites, party_pos)
for n in floating_numbers:
n[0].render(n[1])
panel.render() panel.render()
for m in menu: for m in menu:
m.render() m.render()

View File

@@ -78,14 +78,19 @@ class TextRenderer:
def type_all(self): def type_all(self):
while not self.type_tick(): while not self.type_tick():
pass pass
def move(self, x, y):
for s in self.sprites:
s[1] = s[1].move(x, y)
def render(self): def render(self, discoloration=(255,255,255)):
offset = -(sum(s[2] for s in self.sprites) // 2) if self.center else 0 offset = -(sum(s[2] for s in self.sprites) // 2) if self.center else 0
for s in self.sprites: for s in self.sprites:
arcade.draw_texture_rect( arcade.draw_texture_rect(
s[0], s[0],
s[1].move(offset, 0), s[1].move(offset, 0),
pixelated=True pixelated=True,
color=arcade.types.Color(*discoloration)
) )
# a \n display függvénye # a \n display függvénye