added recording for both players

This commit is contained in:
2025-10-06 16:53:55 +02:00
parent 296a8f5d51
commit daf06564ba
2 changed files with 31 additions and 8 deletions

View File

@ -193,7 +193,6 @@ The system automatically records tracking data from the **active player** (the o
**Data recording**:
- Starts automatically when experiment starts
- Stops automatically when experiment stops
- Only records from the active player (not the guesser)
- Exports as CSV with group ID and timestamp in filename
## Unity Project Details

View File

@ -80,8 +80,8 @@ async def tracking_listener():
source_ip = addr[0]
actual_data = message
# Only record data from the active player
if source_ip == tracking_state["active_player_ip"]:
# Record data from both players
if source_ip in [tracking_state["player1_ip"], tracking_state["player2_ip"]]:
parsed = parse_tracking_data(actual_data)
if parsed:
@ -89,10 +89,24 @@ async def tracking_listener():
# Calculate time elapsed since experiment start
elapsed_time = time.time() - tracking_state["experiment_start_time"]
# Determine player_ID and role
if source_ip == tracking_state["player1_ip"]:
player_id = "player1"
else:
player_id = "player2"
# Determine role: active_player_ip is the mimicker
if source_ip == tracking_state["active_player_ip"]:
role = "mimicker"
else:
role = "guesser"
# Add sample with metadata
sample = {
"timestamp": time.time(),
"elapsed_time": elapsed_time,
"player_id": player_id,
"role": role,
"current_word": current_word_state["word"],
"word_time_remaining": 0.0,
"data": parsed
@ -188,7 +202,9 @@ class VRConfig(BaseModel):
class TrackingStart(BaseModel):
group_id: str
condition: str
active_player_ip: str
player1_ip: str
player2_ip: str
active_player_ip: str # The player who mimics (mimicker)
# Global state for current word display
current_word_state = {
@ -203,7 +219,9 @@ tracking_state = {
"is_recording": False,
"group_id": "",
"condition": "",
"active_player_ip": "",
"player1_ip": "",
"player2_ip": "",
"active_player_ip": "", # The mimicker
"experiment_start_time": None,
"samples": [] # List of tracking data samples
}
@ -369,18 +387,22 @@ def send_vr_config(config: VRConfig):
@app.post("/tracking/start")
def start_tracking(config: TrackingStart):
"""
Start recording tracking data from the active player.
Start recording tracking data from both players.
"""
import time
tracking_state["is_recording"] = True
tracking_state["group_id"] = config.group_id
tracking_state["condition"] = config.condition
tracking_state["player1_ip"] = config.player1_ip
tracking_state["player2_ip"] = config.player2_ip
tracking_state["active_player_ip"] = config.active_player_ip
tracking_state["experiment_start_time"] = time.time()
tracking_state["samples"] = []
print(f"Started tracking: group={config.group_id}, condition={config.condition}, player={config.active_player_ip}")
print(f"Started tracking: group={config.group_id}, condition={config.condition}")
print(f" Player1: {config.player1_ip}, Player2: {config.player2_ip}")
print(f" Mimicker: {config.active_player_ip}")
return { "status": "ok", "message": "Tracking started" }
@app.post("/tracking/stop")
@ -421,7 +443,7 @@ def download_tracking_csv():
# Write header
header = [
"timestamp", "elapsed_time", "group_id", "condition", "current_word", "word_time_remaining",
"timestamp", "elapsed_time", "player_id", "role", "group_id", "condition", "current_word", "word_time_remaining",
"center_eye_pos_x", "center_eye_pos_y", "center_eye_pos_z",
"center_eye_rot_w", "center_eye_rot_x", "center_eye_rot_y", "center_eye_rot_z",
"left_hand_pos_x", "left_hand_pos_y", "left_hand_pos_z",
@ -437,6 +459,8 @@ def download_tracking_csv():
row = [
str(sample["timestamp"]),
f"{sample['elapsed_time']:.4f}",
sample["player_id"],
sample["role"],
tracking_state["group_id"],
tracking_state["condition"],
sample["current_word"],