package main // shared/types.go (oder types.go im Hauptverzeichnis) type ObstacleDef struct { ID string `json:"id"` Type string `json:"type"` Width float64 `json:"width"` Height float64 `json:"height"` Color string `json:"color"` Image string `json:"image"` // Visuelle Anpassungen ImgScale float64 `json:"imgScale"` ImgOffsetX float64 `json:"imgOffsetX"` ImgOffsetY float64 `json:"imgOffsetY"` // Logik CanTalk bool `json:"canTalk"` SpeechLines []string `json:"speechLines"` YOffset float64 `json:"yOffset"` // NEU: Verhindert, dass dieses Objekt vom Zufallsgenerator ausgewählt wird NoRandomSpawn bool `json:"noRandomSpawn"` } type ChunkObstacle struct { ID string `json:"id"` Type string `json:"type"` X float64 `json:"x"` Y float64 `json:"y"` Width float64 `json:"w"` Height float64 `json:"h"` Color string `json:"color"` ImgScale float64 `json:"imgScale"` ImgOffsetX float64 `json:"imgOffsetX"` ImgOffsetY float64 `json:"imgOffsetY"` } type PlatformDef struct { X float64 `json:"x"` Y float64 `json:"y"` Width float64 `json:"w"` Height float64 `json:"h"` Type string `json:"type"` } type ChunkDef struct { ID string `json:"id"` Platforms []PlatformDef `json:"platforms"` Obstacles []ChunkObstacle `json:"obstacles"` TotalWidth int `json:"totalWidth"` } type GameConfig struct { Obstacles []ObstacleDef `json:"obstacles"` Backgrounds []string `json:"backgrounds"` Chunks []ChunkDef `json:"chunks"` } // Dynamischer State (Simulation) type ActiveObstacle struct { ID string `json:"id"` Type string `json:"type"` X float64 `json:"x"` Y float64 `json:"y"` Width float64 `json:"w"` Height float64 `json:"h"` Speech string `json:"speech,omitempty"` } type ActivePlatform struct { X float64 `json:"x"` Y float64 `json:"y"` Width float64 `json:"w"` Height float64 `json:"h"` } // API Requests/Responses type Input struct { Tick int `json:"t"` Act string `json:"act"` } type ValidateRequest struct { SessionID string `json:"sessionId"` Inputs []Input `json:"inputs"` TotalTicks int `json:"totalTicks"` } type PowerUpState struct { GodLives int `json:"godLives"` HasBat bool `json:"hasBat"` BootTicks int `json:"bootTicks"` } type ValidateResponse struct { Status string `json:"status"` VerifiedScore int `json:"verifiedScore"` ServerObs []ActiveObstacle `json:"serverObs"` ServerPlats []ActivePlatform `json:"serverPlats"` PowerUps PowerUpState `json:"powerups"` ServerTick int `json:"serverTick"` NextSpawnTick int `json:"nextSpawnTick"` RngState uint32 `json:"rngState"` } type StartResponse struct { SessionID string `json:"sessionId"` Seed uint32 `json:"seed"` } type SubmitNameRequest struct { SessionID string `json:"sessionId"` Name string `json:"name"` } type SubmitResponse struct { ClaimCode string `json:"claimCode"` } type LeaderboardEntry struct { Rank int64 `json:"rank"` Name string `json:"name"` Score int `json:"score"` IsMe bool `json:"isMe"` } type AdminActionRequest struct { SessionID string `json:"sessionId"` Action string `json:"action"` } type AdminEntry struct { SessionID string `json:"sessionId"` Name string `json:"name"` Score int `json:"score"` Code string `json:"code"` Time string `json:"time"` } type ClaimDeleteRequest struct { SessionID string `json:"sessionId"` ClaimCode string `json:"claimCode"` }