kwabs22 commited on
Commit
756ea61
·
1 Parent(s): a4229ac

Load game supports media now?

Browse files
Files changed (1) hide show
  1. app.py +52 -22
app.py CHANGED
@@ -2,6 +2,7 @@ import gradio as gr
2
  import random
3
  import json
4
  import re
 
5
 
6
  # Default configuration template
7
  default_config = {
@@ -169,7 +170,7 @@ def show_elements(text):
169
  # if location == 'end':
170
  # continue
171
 
172
- # with gr.Accordion(f"Location: {location}"):
173
  # description = gr.Textbox(label="Description", value=details['description'], interactive=True)
174
  # outputs.append(description)
175
 
@@ -182,16 +183,15 @@ def show_elements(text):
182
  # transitions = gr.Textbox(label="Transitions", value=json.dumps(details['transitions']), interactive=True)
183
  # outputs.append(transitions)
184
 
185
- # def update_json():
186
  # updated_data = {"masterlocation1": {}}
187
- # for i, location in enumerate(masterlocation1.keys()):
188
- # if location == 'end':
189
- # continue
190
  # updated_data["masterlocation1"][location] = {
191
- # "description": outputs[i*4].value,
192
- # "events": json.loads(outputs[i*4 + 1].value),
193
- # "choices": json.loads(outputs[i*4 + 2].value),
194
- # "transitions": json.loads(outputs[i*4 + 3].value)
195
  # }
196
  # updated_data["masterlocation1"]["end"] = masterlocation1["end"]
197
  # return json.dumps(updated_data, indent=2)
@@ -199,7 +199,7 @@ def show_elements(text):
199
  # update_button = gr.Button("Update JSON")
200
  # json_output = gr.Textbox(label="Updated JSON", lines=10)
201
 
202
- # update_button.click(update_json, outputs=json_output)
203
 
204
  # return outputs + [update_button, json_output]
205
 
@@ -213,7 +213,7 @@ def show_elements_json_input(json_input):
213
  if location == 'end':
214
  continue
215
 
216
- with gr.Accordion(f"Location: {location}"):
217
  description = gr.Textbox(label="Description", value=details['description'], interactive=True)
218
  outputs.append(description)
219
 
@@ -225,16 +225,21 @@ def show_elements_json_input(json_input):
225
 
226
  transitions = gr.Textbox(label="Transitions", value=json.dumps(details['transitions']), interactive=True)
227
  outputs.append(transitions)
 
 
 
 
228
 
229
  def update_json(*current_values):
230
  updated_data = {"masterlocation1": {}}
231
  locations = [loc for loc in masterlocation1.keys() if loc != 'end']
232
  for i, location in enumerate(locations):
233
  updated_data["masterlocation1"][location] = {
234
- "description": current_values[i*4],
235
- "events": json.loads(current_values[i*4 + 1]),
236
- "choices": json.loads(current_values[i*4 + 2]),
237
- "transitions": json.loads(current_values[i*4 + 3])
 
238
  }
239
  updated_data["masterlocation1"]["end"] = masterlocation1["end"]
240
  return json.dumps(updated_data, indent=2)
@@ -246,6 +251,19 @@ def show_elements_json_input(json_input):
246
 
247
  return outputs + [update_button, json_output]
248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  def convert_timeline_to_game_structure(timeline):
250
  lines = timeline.split('\n')
251
  game_structure = {}
@@ -490,7 +508,7 @@ def start_game(starting_location='village', starting_state='start'):
490
  description, choices, game_log = game_session.get_current_state_info()
491
  return description, choices, game_log, game_session
492
 
493
- def make_choice(choice, game_session):
494
  if not choice:
495
  description, choices, game_log = game_session.get_current_state_info()
496
  return description, choices, "Please select a choice before proceeding.", game_session
@@ -500,7 +518,7 @@ def make_choice(choice, game_session):
500
 
501
  return result[0], gr.update(choices=result[1]), result[2], game_session
502
 
503
- def load_game(custom_config=None):
504
  global all_states
505
  if custom_config:
506
  try:
@@ -515,7 +533,17 @@ def load_game(custom_config=None):
515
  game_session = GameSession(starting_location, starting_state)
516
  description, choices, game_log = game_session.get_current_state_info()
517
  new_path_errors = validate_transitions(all_states)
518
-
 
 
 
 
 
 
 
 
 
 
519
  return gr.update(value=f"Custom configuration loaded successfully! \n{new_path_errors}"), game_log, description, gr.update(choices=choices), game_session, gr.update(value=custom_config)
520
  except json.JSONDecodeError as e:
521
  # Get the line number and column of the error
@@ -581,7 +609,6 @@ with gr.Blocks() as demo:
581
  generate_no_media_timeline_points = gr.Slider(minimum=1, value=5, step=1, maximum=30, label="Choose the amount of media timeline points")
582
  generate_with_media_check = gr.Checkbox(label="Generate with media", value=True)
583
  generate_button = gr.Button("Generate Story and Timeline")
584
- gr.HTML("Still under construction - The update json below doesnt work for so dont edit here yet")
585
 
586
  @gr.render(inputs=game_structure_output_text_with_media)
587
  def update(game_structure_output_text_with_media):
@@ -635,7 +662,10 @@ with gr.Blocks() as demo:
635
  gr.Markdown("# Text-based Adventure Game")
636
 
637
  wadescription = gr.Textbox(label="Current Situation", lines=4, value=initgameinfo[0])
638
- wamedia = gr.HTML("Placeholder to load all media tests")
 
 
 
639
  wachoices = gr.Radio(label="Your Choices", choices=initgameinfo[1])
640
  wasubmit_btn = gr.Button("Make Choice")
641
  wagame_log = gr.Textbox(label="Game Log", lines=20, value=initgameinfo[2])
@@ -654,8 +684,8 @@ with gr.Blocks() as demo:
654
 
655
  wacustom_configbtn.click(
656
  load_game,
657
- inputs=[wacustom_config],
658
- outputs=[waerror_box, wagame_log, wadescription, wachoices, wagame_session, wacustom_config]
659
  )
660
  with gr.Tab("Custom JS Config Creator"):
661
  gr.HTML("Companion Space for zerogpu / client api workflow planning for a way to send a zip to the Basic Game Engine at the bottom of https://huggingface.co/spaces/KwabsHug/TestSvelteStatic (Also to test how much can be done majority on cpu)")
 
2
  import random
3
  import json
4
  import re
5
+ import os
6
 
7
  # Default configuration template
8
  default_config = {
 
170
  # if location == 'end':
171
  # continue
172
 
173
+ # with gr.Accordion(f"Location: {location} - Previous desciption {details['description']}", open=False):
174
  # description = gr.Textbox(label="Description", value=details['description'], interactive=True)
175
  # outputs.append(description)
176
 
 
183
  # transitions = gr.Textbox(label="Transitions", value=json.dumps(details['transitions']), interactive=True)
184
  # outputs.append(transitions)
185
 
186
+ # def update_json(*current_values):
187
  # updated_data = {"masterlocation1": {}}
188
+ # locations = [loc for loc in masterlocation1.keys() if loc != 'end']
189
+ # for i, location in enumerate(locations):
 
190
  # updated_data["masterlocation1"][location] = {
191
+ # "description": current_values[i*4],
192
+ # "events": json.loads(current_values[i*4 + 1]),
193
+ # "choices": json.loads(current_values[i*4 + 2]),
194
+ # "transitions": json.loads(current_values[i*4 + 3])
195
  # }
196
  # updated_data["masterlocation1"]["end"] = masterlocation1["end"]
197
  # return json.dumps(updated_data, indent=2)
 
199
  # update_button = gr.Button("Update JSON")
200
  # json_output = gr.Textbox(label="Updated JSON", lines=10)
201
 
202
+ # update_button.click(update_json, inputs=outputs, outputs=json_output)
203
 
204
  # return outputs + [update_button, json_output]
205
 
 
213
  if location == 'end':
214
  continue
215
 
216
+ with gr.Accordion(f"Location: {location} - Previous description {details['description']}", open=False):
217
  description = gr.Textbox(label="Description", value=details['description'], interactive=True)
218
  outputs.append(description)
219
 
 
225
 
226
  transitions = gr.Textbox(label="Transitions", value=json.dumps(details['transitions']), interactive=True)
227
  outputs.append(transitions)
228
+
229
+ # New media field
230
+ media = gr.Textbox(label="Media", value=json.dumps(details.get('media', [])), interactive=True)
231
+ outputs.append(media)
232
 
233
  def update_json(*current_values):
234
  updated_data = {"masterlocation1": {}}
235
  locations = [loc for loc in masterlocation1.keys() if loc != 'end']
236
  for i, location in enumerate(locations):
237
  updated_data["masterlocation1"][location] = {
238
+ "description": current_values[i*5],
239
+ "events": json.loads(current_values[i*5 + 1]),
240
+ "choices": json.loads(current_values[i*5 + 2]),
241
+ "transitions": json.loads(current_values[i*5 + 3]),
242
+ "media": json.loads(current_values[i*5 + 4]) # New media field
243
  }
244
  updated_data["masterlocation1"]["end"] = masterlocation1["end"]
245
  return json.dumps(updated_data, indent=2)
 
251
 
252
  return outputs + [update_button, json_output]
253
 
254
+ def create_media_component(file_path):
255
+ _, extension = os.path.splitext(file_path)
256
+ extension = extension.lower()[1:] # Remove the dot and convert to lowercase
257
+
258
+ if extension in ['jpg', 'jpeg', 'png', 'gif']:
259
+ return gr.Image(value=file_path, label="Image Input")
260
+ elif extension in ['mp4', 'avi', 'mov']:
261
+ return gr.Video(value=file_path, label="Video Input")
262
+ elif extension in ['mp3', 'wav', 'ogg']:
263
+ return gr.Audio(value=file_path, label="Audio Input")
264
+ else:
265
+ return gr.Textbox(value=file_path, label=f"File: {os.path.basename(file_path)}")
266
+
267
  def convert_timeline_to_game_structure(timeline):
268
  lines = timeline.split('\n')
269
  game_structure = {}
 
508
  description, choices, game_log = game_session.get_current_state_info()
509
  return description, choices, game_log, game_session
510
 
511
+ def make_choice(choice, game_session): #Calls the nested make choice function in the game session class
512
  if not choice:
513
  description, choices, game_log = game_session.get_current_state_info()
514
  return description, choices, "Please select a choice before proceeding.", game_session
 
518
 
519
  return result[0], gr.update(choices=result[1]), result[2], game_session
520
 
521
+ def load_game(custom_config=None, with_media=False):
522
  global all_states
523
  if custom_config:
524
  try:
 
533
  game_session = GameSession(starting_location, starting_state)
534
  description, choices, game_log = game_session.get_current_state_info()
535
  new_path_errors = validate_transitions(all_states)
536
+ media = None
537
+ output_media = None
538
+
539
+ if with_media:
540
+ if all_states[starting_location][starting_state][media]:
541
+ media = all_states[starting_location][starting_state][media]
542
+ for media_path in media:
543
+ media_component = create_media_component(media_path)
544
+ output_media.append(media_component)
545
+ return gr.update(value=f"Custom configuration loaded successfully! \n{new_path_errors}"), game_log, description, gr.update(choices=choices), game_session, gr.update(value=custom_config), output_media
546
+
547
  return gr.update(value=f"Custom configuration loaded successfully! \n{new_path_errors}"), game_log, description, gr.update(choices=choices), game_session, gr.update(value=custom_config)
548
  except json.JSONDecodeError as e:
549
  # Get the line number and column of the error
 
609
  generate_no_media_timeline_points = gr.Slider(minimum=1, value=5, step=1, maximum=30, label="Choose the amount of media timeline points")
610
  generate_with_media_check = gr.Checkbox(label="Generate with media", value=True)
611
  generate_button = gr.Button("Generate Story and Timeline")
 
612
 
613
  @gr.render(inputs=game_structure_output_text_with_media)
614
  def update(game_structure_output_text_with_media):
 
662
  gr.Markdown("# Text-based Adventure Game")
663
 
664
  wadescription = gr.Textbox(label="Current Situation", lines=4, value=initgameinfo[0])
665
+ wamediabool = gr.State(value=True)
666
+ with gr.Group() as wamedia:
667
+ gr.HTML("Placeholder to load all media tests")
668
+
669
  wachoices = gr.Radio(label="Your Choices", choices=initgameinfo[1])
670
  wasubmit_btn = gr.Button("Make Choice")
671
  wagame_log = gr.Textbox(label="Game Log", lines=20, value=initgameinfo[2])
 
684
 
685
  wacustom_configbtn.click(
686
  load_game,
687
+ inputs=[wacustom_config, wamediabool],
688
+ outputs=[waerror_box, wagame_log, wadescription, wachoices, wagame_session, wacustom_config, wamedia]
689
  )
690
  with gr.Tab("Custom JS Config Creator"):
691
  gr.HTML("Companion Space for zerogpu / client api workflow planning for a way to send a zip to the Basic Game Engine at the bottom of https://huggingface.co/spaces/KwabsHug/TestSvelteStatic (Also to test how much can be done majority on cpu)")