added recording for both players
This commit is contained in:
@ -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
|
||||
|
||||
@ -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"],
|
||||
|
||||
Reference in New Issue
Block a user