Lebegő számok
This commit is contained in:
@@ -56,7 +56,7 @@ class Action:
|
||||
def __repr__(self):
|
||||
return self.__str__()
|
||||
|
||||
def execute(self):
|
||||
def execute(self, damage_callback):
|
||||
target = self.where
|
||||
if self.who.ko or self.who.stone:
|
||||
print(f" -> {self.who.name} cannot move!")
|
||||
@@ -91,8 +91,10 @@ class Action:
|
||||
|
||||
if delta_hp > 0:
|
||||
print(f" -> {target.name} got healed for {delta_hp} HP!")
|
||||
damage_callback(delta_hp, target)
|
||||
elif delta_hp < 0:
|
||||
print(f" -> {target.name} suffered {-delta_hp} damage!")
|
||||
damage_callback(delta_hp, target)
|
||||
|
||||
target.hp = max(0, min(target.maxhp, target.hp + delta_hp))
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@ from battle import Combatant, Action, Damage, StatusChange
|
||||
# ---------------------------------------------------------------------------
|
||||
# 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:
|
||||
text.reset(action.name)
|
||||
text.type_all()
|
||||
|
||||
if timer >= 1:
|
||||
text.reset("")
|
||||
action.execute()
|
||||
action.execute(damage_callback)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
@@ -24,6 +24,7 @@ inventory = []
|
||||
|
||||
enemy_sprites = []
|
||||
party_sprites = []
|
||||
floating_numbers = []
|
||||
gray_cache = {}
|
||||
|
||||
action_queue = []
|
||||
@@ -31,8 +32,8 @@ cur_action = None
|
||||
action_timer = 0
|
||||
|
||||
menu_text = TextRenderer(6, 76, 210)
|
||||
action_text = TextRenderer(128, 204, None, True)
|
||||
action_panel = renderers.NineSlicesPanel(73,187,110,40)
|
||||
action_text = TextRenderer(122, 204, None, True)
|
||||
action_panel = renderers.NineSlicesPanel(67,187,110,40)
|
||||
show_action_panel = False
|
||||
|
||||
menu_open = 0
|
||||
@@ -48,8 +49,18 @@ def enemy_pos(i):
|
||||
def party_pos(i):
|
||||
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):
|
||||
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"])
|
||||
party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"])
|
||||
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"]
|
||||
party_sprites = battle_data.battles[battle_id]["party_sprites"]
|
||||
battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True)
|
||||
floating_numbers = []
|
||||
close_menu()
|
||||
|
||||
def close_menu():
|
||||
@@ -244,6 +256,17 @@ def menu_action(data):
|
||||
close_menu()
|
||||
|
||||
# !!! 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):
|
||||
global menu_open, cur_action, action_timer, show_action_panel
|
||||
|
||||
@@ -274,7 +297,7 @@ def update(game, dt):
|
||||
action_timer = 0
|
||||
|
||||
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
|
||||
show_action_panel = False
|
||||
else:
|
||||
@@ -290,6 +313,12 @@ def update(game, dt):
|
||||
for m in menu:
|
||||
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):
|
||||
print("\nVICTORY! all enemies were defeated.")
|
||||
battle_music.stop()
|
||||
@@ -340,6 +369,10 @@ def draw_battlers(combatants, sprite_table, pos_func):
|
||||
def draw(game):
|
||||
draw_battlers(enemies, enemy_sprites, enemy_pos)
|
||||
draw_battlers(party_members, party_sprites, party_pos)
|
||||
|
||||
for n in floating_numbers:
|
||||
n[0].render(n[1])
|
||||
|
||||
panel.render()
|
||||
for m in menu:
|
||||
m.render()
|
||||
|
||||
@@ -79,13 +79,18 @@ class TextRenderer:
|
||||
while not self.type_tick():
|
||||
pass
|
||||
|
||||
def render(self):
|
||||
def move(self, x, y):
|
||||
for s in self.sprites:
|
||||
s[1] = s[1].move(x, y)
|
||||
|
||||
def render(self, discoloration=(255,255,255)):
|
||||
offset = -(sum(s[2] for s in self.sprites) // 2) if self.center else 0
|
||||
for s in self.sprites:
|
||||
arcade.draw_texture_rect(
|
||||
s[0],
|
||||
s[1].move(offset, 0),
|
||||
pixelated=True
|
||||
pixelated=True,
|
||||
color=arcade.types.Color(*discoloration)
|
||||
)
|
||||
|
||||
# a \n display függvénye
|
||||
|
||||
Reference in New Issue
Block a user