File size: 3,899 Bytes
62b3eea
 
273f76c
 
 
5784cf3
 
 
 
9dae054
 
 
83e7365
5784cf3
273f76c
 
62b3eea
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
 
 
83e7365
d79f5f2
5784cf3
4f341ae
00cd8e1
 
 
 
 
 
 
 
 
 
 
 
 
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
121
import json

import gradio as gr

from theme import Seafoam
from utils.utils import (
    get_content,
    get_player_partners,
    get_player_badges,
    get_player_adventure_logs_html,
    get_player_achievements,
    get_current_story,
    save_latest_player_data,
)

seafoam = Seafoam()


def get_player_info(player_backend_user_id):
    with open("data.json", "r", encoding="utf-8") as file:
        player_info = json.load(file)
    return player_info[player_backend_user_id]


# 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_info_btn = gr.Button("", visible=False)

    # actions when player login
    player_info_query_btn.click(get_player_info, player_backend_id, player_info).then(
        player_info_query_btn.click(get_player_partners, player_info, pet_gallery)
    ).then(
        player_info_query_btn.click(get_player_badges, player_info, badge_gallery)
    ).then(
        player_info_query_btn.click(
            get_player_adventure_logs_html, player_info, adventure_log
        )
    ).then(
        player_info_query_btn.click(get_player_achievements, player_info, achievements)
    ).then(
        player_info_query_btn.click(get_current_story, None, adventure)
    )

    pull_newest_player_info_btn.click(save_latest_player_data, None, None)

if __name__ == "__main__":
    demo.launch()