Spaces:
Running
Running
File size: 3,846 Bytes
62b3eea cfdf3bc 62b3eea 273f76c 4e6be8d 5784cf3 bd68530 83e7365 5784cf3 273f76c 62b3eea de7f21d 1638084 de7f21d cfdf3bc de7f21d 273f76c de7f21d 8e9bd24 d79f5f2 273f76c 11254d8 9acbebf 11254d8 57e2032 11254d8 57e2032 11254d8 57e2032 11254d8 57e2032 11254d8 273f76c b002f06 39977eb e3d42b8 b002f06 11254d8 b002f06 11254d8 273f76c 013e105 00cd8e1 9dae054 013e105 de7f21d 013e105 11254d8 273f76c 2bbbf6e 9dae054 273f76c d79f5f2 26e6bb5 2bbbf6e 26ab58a d79f5f2 5784cf3 4f341ae bd68530 00cd8e1 26ab58a 07dc7e1 26ab58a 07dc7e1 83e7365 273f76c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import json
import logging
import gradio as gr
from theme import Seafoam
from utils.mes_player_model import Player
from utils.utils import (
get_content,
render_player_data,
save_latest_player_data,
)
seafoam = Seafoam()
def get_player_info(player_backend_user_id):
with open("latest_player_data.json", "r", encoding="utf-8") as file:
player_info = json.load(file)
if player_backend_user_id in player_info:
return player_info[player_backend_user_id]
else:
logging.info(f"No data found for player ID {player_backend_user_id}. Initializing new player data.")
new_player = Player(player_backend_user_id=player_backend_user_id, init=True)
return new_player.to_dict()
# start of gradio interface
with gr.Blocks(theme=seafoam, css=get_content("css/style.css")) as demo:
player_info = gr.State()
with gr.Row():
with gr.Column(
scale=1,
elem_classes="gallery_container",
):
pet_description = gr.Markdown("# 夥伴", elem_id="pet_avatar_description")
pet_gallery = gr.Gallery(
[],
label="夥伴",
preview=False,
elem_id="pet_gallery",
columns=30,
height=200,
)
badge_description = gr.Markdown("# 徽章", elem_id="badge_avatar_description")
badge_gallery = gr.Gallery(
[],
label="徽章",
preview=False,
elem_id="badge_gallery",
columns=30,
height=200,
)
with gr.Column(scale=1, elem_id="player_avatar_container"):
avatar = gr.Image(
"avatar/blank_avatar.png",
elem_id="player_avatar",
)
avatar_description = gr.Markdown(
"# 光束守護者", elem_id="player_avatar_description"
)
with gr.Column(scale=1):
with gr.Column(elem_id="adventure_container"):
adventure_description = gr.Markdown(
"# 冒險階段", elem_id="adventure_description"
)
adventure = gr.Slider(
value=0,
show_label=False,
interactive=False,
elem_id="adventure_slider",
info="",
)
achievements_description = gr.Markdown(
"# 達成成就", elem_id="achievements_description"
)
achievements = gr.HighlightedText(
value=[],
elem_classes="achievements",
color_map={
"完成": "green",
"未完成": "red",
},
)
with gr.Row():
html = (
"<div style='max-width:100%; max-height:360px; overflow:auto'>"
+ get_content("htmls/adventure_blank.html")
)
adventure_log = gr.HTML(html, label="Adventure Log", elem_id="adventure_log")
# handling player info
with gr.Row():
player_backend_id = gr.Textbox("", elem_id="player_backend_id", visible=False)
player_info_query_btn = gr.Button(
"Query", elem_id="trigger_button", visible=False
)
pull_newest_player_data = gr.Textbox("", visible=False)
# actions when player login
player_info_query_btn.click(get_player_info, player_backend_id, player_info).then(
render_player_data, player_info, [avatar, pet_gallery, badge_gallery, adventure_log, achievements, adventure]
)
pull_newest_player_data.submit(
save_latest_player_data,
None,
None,
api_name="pull_newest_player_data",
)
if __name__ == "__main__":
demo.launch()
|