Grafikusítás

This commit is contained in:
markojozsef
2026-10-16 15:30:09 +02:00
parent 5a06c526cc
commit db772207db
3 changed files with 62 additions and 20 deletions

View File

@@ -4,6 +4,7 @@ import pygame
pygame.mixer.init()
sprites = {
"kefka" : arcade.load_texture("res/sprite/kefka.png"),
"cursor" : arcade.load_texture("res/sprite/handcursor.png"),
"font" : arcade.load_spritesheet("res/sprite/font.png"),
"panel" : arcade.load_spritesheet("res/sprite/panel.png"),

View File

@@ -245,10 +245,20 @@ battles = [
Combatant("Mira, a Tanonc Varázsló", 90, 15, 50, 5, 10, 10, False, False),
Combatant("Bence, a Gyakornok Pap", 100, 12, 60, 10, 20, 20, False, False),
],
"enemy_sprites": [
# normál, kritikus , halott
["cursor", "cursor", "cursor"],
["cursor", "cursor", "cursor"],
["cursor", "cursor", "cursor"]
],
"party_members": [
Combatant("Mordrak, a Sötét Úr", 400, 50, 80, 30, 20, 20, False, False),
Combatant("Csontvázőr", 150, 35, 67, 40, -40, 0, False, False),
],
"party_sprites": [
["kefka", "kefka", "kefka"],
["cursor", "cursor", "cursor"]
],
"enemy_turn_func": hero_turn_rookies,
"mus_id": "mus_fnafsux",
"init_ai_data": _hero_moves(can_petrify=False),

View File

@@ -4,6 +4,7 @@ import random
import renderers
import arcade
import gamestate
from PIL import Image
from battle import Combatant, Action, Damage, StatusChange
from menu import MenuItem
@@ -21,12 +22,14 @@ party_menus = []
spells = []
inventory = []
enemy_sprites = []
party_sprites = []
gray_cache = {}
action_queue = []
cur_action = None
action_timer = 0
party_text = TextRenderer(3, 206, 210)
ene_text = TextRenderer(123, 206, 210)
menu_text = TextRenderer(6, 76, 210)
action_text = TextRenderer(110, 215, 210)
@@ -37,8 +40,14 @@ panel = renderers.NineSlicesPanel(0,0,230,100)
battle_id = 0
def enemy_pos(i):
return (185, 195 - i * 40)
def party_pos(i):
return (40 + (i % 2) * 30, 165 - i * 35)
def switch(game):
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory, enemy_sprites, party_sprites
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"])
@@ -46,6 +55,8 @@ def switch(game):
party_menus = copy.deepcopy(battle_data.battles[battle_id]["menus"])
spells = copy.deepcopy(battle_data.battles[battle_id]["spells"])
inventory = copy.deepcopy(battle_data.battles[battle_id]["inventory"])
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)
close_menu()
@@ -264,17 +275,7 @@ def update(game, dt):
cur_action = None
else:
action_timer += dt
# Szövegek Frissítése
partytext = ""
enetext = ""
for m in party_members:
partytext += f"=={m.name}==\nHP: {m.hp}\n"
for e in enemies:
enetext += f"=={e.name}==\nHP: {e.hp}\n"
if len(menu_queue) != 0 and menu_open == 0:
whose = menu_queue.pop(0)
menu_open = whose
@@ -297,18 +298,48 @@ def update(game, dt):
gamestate.switch_gamestate(game,"gameover")
return
party_text.reset(partytext)
ene_text.reset(enetext)
party_text.type_all()
ene_text.type_all()
# !!! CHATGPT !!!
def make_gray(tex, key):
img = tex.image.convert("RGBA")
a = img.getchannel("A")
l = img.convert("L")
out = Image.merge("RGBA", (l, l, l, a))
return arcade.Texture(out)
def get_texture(sprite_id, gray=False):
asset = assets.sprites[sprite_id]
tex = getattr(asset, "texture", asset) # works for Sprite or Texture
if not gray:
return tex
if sprite_id not in gray_cache:
gray_cache[sprite_id] = make_gray(tex, sprite_id)
return gray_cache[sprite_id]
def pick_sprite_id(c, ids):
if c.ko:
return ids[2]
if c.hp <= c.maxhp * 0.1:
return ids[1]
return ids[0]
def draw_tex(tex, cx, cy):
arcade.draw_texture_rect(tex, arcade.LRBT(
cx - tex.width / 2, cx + tex.width / 2,
cy - tex.height / 2, cy + tex.height / 2))
def draw_battlers(combatants, sprite_table, pos_func):
for i, c in enumerate(combatants):
sid = pick_sprite_id(c, sprite_table[i])
tex = get_texture(sid, gray=bool(c.stone and not c.ko))
draw_tex(tex, *pos_func(i))
def draw(game):
draw_battlers(enemies, enemy_sprites, enemy_pos)
draw_battlers(party_members, party_sprites, party_pos)
panel.render()
for m in menu:
m.render()
party_text.render()
ene_text.render()
menu_text.render()
action_text.render()