import gradio as gr
from typing import Callable, Any, Optional
import numpy as np
def create_voice_interface(pipeline: Any, game_mechanics: Any) -> gr.Column:
"""Create voice-controlled interface for monster generation"""
with gr.Column() as voice_interface:
gr.Markdown("""
### đī¸ Voice Control Interface
Speak your monster description or use the microphone to create your digital companion!
""")
with gr.Row():
with gr.Column(scale=1):
# Voice input
voice_input = gr.Audio(
label="đ¤ Voice Description",
sources=["microphone", "upload"],
type="filepath",
elem_classes=["cyber-input"],
info="Describe your monster using voice"
)
# Voice control buttons
with gr.Row():
start_recording = gr.Button(
"đ´ Start Recording",
elem_classes=["cyber-button"],
size="sm"
)
stop_recording = gr.Button(
"âšī¸ Stop Recording",
elem_classes=["cyber-button"],
size="sm"
)
# Real-time transcription display
transcription_display = gr.Textbox(
label="đ Transcription",
placeholder="Your voice will be transcribed here...",
interactive=False,
lines=3,
elem_classes=["cyber-output"]
)
# Voice commands
gr.Markdown("""
**Voice Commands:**
- "Create a [type] monster" - Generate specific type
- "Make it [color/trait]" - Add characteristics
- "Give it [ability]" - Add special abilities
""")
with gr.Column(scale=1):
# Preview and generation status
generation_status = gr.Markdown(
value="đĸ Ready for voice input",
elem_classes=["cyber-message"]
)
# Audio visualization
audio_viz = gr.HTML(
value="""
""",
elem_classes=["cyber-container"]
)
# Quick voice templates
gr.Markdown("**Quick Templates:**")
template_buttons = []
templates = [
("đĨ Fire Type", "Create a fierce fire-breathing dragon monster"),
("đ§ Water Type", "Create a graceful aquatic monster"),
("⥠Electric Type", "Create a sparking electric monster"),
("đŋ Nature Type", "Create a peaceful nature guardian monster")
]
for label, prompt in templates:
btn = gr.Button(label, size="sm", elem_classes=["cyber-button"])
template_buttons.append((btn, prompt))
# Voice interface specific styling
gr.HTML("""
""")
return voice_interface
def create_visual_interface(pipeline: Any, game_mechanics: Any) -> gr.Column:
"""Create visual/camera-based interface for monster generation"""
with gr.Column() as visual_interface:
gr.Markdown("""
### đī¸ Visual Control Interface
Use images, drawings, or camera input to inspire your monster creation!
""")
with gr.Row():
with gr.Column(scale=1):
# Image input options
with gr.Tabs():
with gr.TabItem("đˇ Camera"):
camera_input = gr.Image(
label="Camera Capture",
sources=["webcam"],
type="pil",
elem_classes=["cyber-input", "camera-feed"]
)
with gr.TabItem("đŧī¸ Upload"):
image_upload = gr.File(
label="Upload Reference Images",
file_count="multiple",
file_types=["image"],
elem_classes=["cyber-input"]
)
uploaded_gallery = gr.Gallery(
label="Uploaded References",
columns=3,
rows=1,
height="150px",
elem_classes=["cyber-container"]
)
with gr.TabItem("âī¸ Draw"):
sketch_pad = gr.Sketchpad(
label="Draw Your Monster",
type="pil",
elem_classes=["cyber-input", "sketch-pad"]
)
# Visual style options
gr.Markdown("**Visual Style Options:**")
style_modifier = gr.CheckboxGroup(
choices=[
"đ¨ Artistic",
"đ¤ Mechanical",
"⨠Magical",
"đ Organic",
"đ Crystalline"
],
label="Style Modifiers",
elem_classes=["cyber-checkbox"]
)
color_palette = gr.Radio(
choices=[
"đ Vibrant",
"đ Dark",
"âī¸ Cool",
"đĨ Warm",
"đ¨ Custom"
],
label="Color Palette",
value="đ Vibrant",
elem_classes=["cyber-radio"]
)
with gr.Column(scale=1):
# Image analysis display
image_analysis = gr.Markdown(
value="đ Image Analysis Results",
elem_classes=["cyber-message"]
)
# Detected features
detected_features = gr.JSON(
label="đ Detected Features",
elem_classes=["cyber-stats"]
)
# Generation preview
preview_placeholder = gr.HTML(
value="""
Preview will appear here...
""",
elem_classes=["cyber-container"]
)
# Confidence meter
confidence_display = gr.HTML(
value="""
0%
""",
elem_classes=["cyber-container"]
)
# Visual interface specific styling
gr.HTML("""
""")
return visual_interface
def create_monster_status_display() -> gr.Column:
"""Create monster status display component"""
with gr.Column() as status_display:
# 3D Model viewer
model_viewer = gr.Model3D(
label="Your Digital Monster",
height=400,
elem_classes=["monster-display"]
)
# Status indicators
with gr.Row():
hp_bar = gr.HTML(
value=create_status_bar("HP", 100, 100, "#ff4444"),
elem_classes=["status-bar"]
)
hunger_bar = gr.HTML(
value=create_status_bar("Hunger", 80, 100, "#ffaa44"),
elem_classes=["status-bar"]
)
happiness_bar = gr.HTML(
value=create_status_bar("Happiness", 90, 100, "#44ff44"),
elem_classes=["status-bar"]
)
# Communication display
communication = gr.Textbox(
label="Monster Says",
value="đ¤đ9ī¸âŖ0ī¸âŖ",
interactive=False,
elem_classes=["cyber-dialogue"]
)
# Evolution progress
evolution_display = gr.HTML(
value="""
""",
elem_classes=["evolution-display"]
)
return status_display
def create_status_bar(label: str, current: int, max_val: int, color: str) -> str:
"""Create HTML status bar"""
percentage = (current / max_val) * 100
return f"""
{current}/{max_val}
"""
def create_training_interface() -> gr.Column:
"""Create training interface component"""
with gr.Column() as training_interface:
gr.Markdown("""
### đĒ Training Center
Train your monster to improve its stats and prepare for evolution!
""")
# Training schedule
with gr.Row():
with gr.Column():
training_schedule = gr.DataFrame(
headers=["Time", "Activity", "Stat Focus", "Intensity"],
datatype=["str", "str", "str", "number"],
value=[
["Morning", "Strength Training", "Attack", 7],
["Afternoon", "Agility Course", "Speed", 5],
["Evening", "Meditation", "Special", 3]
],
elem_classes=["cyber-table"]
)
with gr.Column():
# Training mini-game
training_game = gr.HTML(
value="""
Quick Training
Click the targets to train!
""",
elem_classes=["cyber-container"]
)
# Training rewards
rewards_display = gr.Markdown(
"""
**Today's Rewards:**
- đ +15 Attack
- đĄī¸ +10 Defense
- ⥠+5 Speed
""",
elem_classes=["cyber-message"]
)
return training_interface