Grafikusítás
This commit is contained in:
@@ -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"),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -265,16 +276,6 @@ def update(game, dt):
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user