Lebegő számok
This commit is contained in:
@@ -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))
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user