Backend: - Add weather system with 6 weather types and transition probabilities - Add day/night cycle (dawn, day, dusk, night) with phase modifiers - Add mood system for agents (happy, neutral, sad, anxious) - Add new commands: heal, talk, encourage, revive - Add agent social interaction system with relationships - Add casual mode with auto-revive and reduced decay rates Frontend (Web): - Add world state display (weather, time of day) - Add mood bar to agent cards - Add new action buttons for heal, encourage, talk, revive - Handle new event types from server Unity Client: - Add EnvironmentManager with dynamic sky gradient and island scene - Add WeatherEffects with rain, sun rays, fog, and heat particles - Add SceneBootstrap for automatic visual system initialization - Improve AgentVisual with better character sprites and animations - Add breathing and bobbing idle animations - Add character shadows - Improve UI panels with rounded corners and borders - Improve SpeechBubble with rounded corners and proper tail - Add support for all new server events and commands 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
"""
|
|
Pydantic models for the JSON protocol.
|
|
Defines standardized structures for game events and messages.
|
|
"""
|
|
|
|
from enum import Enum
|
|
from typing import Any
|
|
from pydantic import BaseModel, Field
|
|
import time
|
|
|
|
|
|
class EventType(str, Enum):
|
|
"""Enumeration of all possible game event types."""
|
|
COMMENT = "comment"
|
|
TICK = "tick"
|
|
SYSTEM = "system"
|
|
ERROR = "error"
|
|
|
|
# Island survival events
|
|
AGENTS_UPDATE = "agents_update" # All agents status broadcast
|
|
AGENT_DIED = "agent_died" # An agent has died
|
|
AGENT_SPEAK = "agent_speak" # Agent says something (LLM response)
|
|
FEED = "feed" # User fed an agent
|
|
USER_UPDATE = "user_update" # User gold/status update
|
|
WORLD_UPDATE = "world_update" # World state update
|
|
CHECK = "check" # Status check response
|
|
|
|
# Day/Night cycle (Phase 2)
|
|
TIME_UPDATE = "time_update" # Time tick update
|
|
PHASE_CHANGE = "phase_change" # Dawn/day/dusk/night transition
|
|
DAY_CHANGE = "day_change" # New day started
|
|
|
|
# Weather system (Phase 3)
|
|
WEATHER_CHANGE = "weather_change" # Weather changed
|
|
MOOD_UPDATE = "mood_update" # Agent mood changed
|
|
|
|
# New commands (Phase 4)
|
|
HEAL = "heal" # User healed an agent
|
|
TALK = "talk" # User talked to an agent
|
|
ENCOURAGE = "encourage" # User encouraged an agent
|
|
REVIVE = "revive" # User revived a dead agent
|
|
|
|
# Social system (Phase 5)
|
|
SOCIAL_INTERACTION = "social_interaction" # Agents interacted
|
|
RELATIONSHIP_CHANGE = "relationship_change" # Relationship status changed
|
|
AUTO_REVIVE = "auto_revive" # Agent auto-revived (casual mode)
|
|
|
|
|
|
class GameEvent(BaseModel):
|
|
"""
|
|
Standardized game event structure for WebSocket communication.
|
|
|
|
Attributes:
|
|
event_type: The type of event (comment, agent_response, tick, etc.)
|
|
timestamp: Unix timestamp when the event was created
|
|
data: Arbitrary payload data for the event
|
|
"""
|
|
event_type: str = Field(..., description="Type of the game event")
|
|
timestamp: float = Field(default_factory=time.time, description="Unix timestamp")
|
|
data: dict[str, Any] = Field(default_factory=dict, description="Event payload")
|
|
|
|
class Config:
|
|
json_schema_extra = {
|
|
"example": {
|
|
"event_type": "comment",
|
|
"timestamp": 1704067200.0,
|
|
"data": {"user": "User123", "message": "Attack!"}
|
|
}
|
|
}
|
|
|
|
|
|
class ClientMessage(BaseModel):
|
|
"""
|
|
Message structure for client-to-server communication.
|
|
|
|
Attributes:
|
|
action: The action the client wants to perform
|
|
payload: Data associated with the action
|
|
"""
|
|
action: str = Field(..., description="Action to perform")
|
|
payload: dict[str, Any] = Field(default_factory=dict, description="Action payload")
|