Private
Public Access
1
0

Add leaderboard functionality with Redis integration for scores. This includes a global leaderboard system, server-side score submission handling, and real-time player ranking updates. Refactor and improve collision logic and game state management for better player experience.

This commit is contained in:
Sebastian Unterschütz
2026-01-01 19:23:09 +01:00
parent 5e6b8a2304
commit de64329ce4
12 changed files with 768 additions and 43 deletions

View File

@@ -91,3 +91,18 @@ type GameState struct {
ScrollX float64 `json:"scroll_x"`
CollectedCoins map[string]bool `json:"collected_coins"` // Welche Coins wurden eingesammelt (Key: ChunkID_ObjectIndex)
}
// Leaderboard-Eintrag
type LeaderboardEntry struct {
PlayerName string `json:"player_name"`
PlayerCode string `json:"player_code"` // Eindeutiger Code für Verifikation
Score int `json:"score"`
Timestamp int64 `json:"timestamp"` // Unix-Timestamp
}
// Score-Submission vom Client an Server
type ScoreSubmission struct {
PlayerName string `json:"player_name"`
PlayerCode string `json:"player_code"`
Score int `json:"score"`
}

View File

@@ -72,26 +72,31 @@ func (w *World) GenerateColliders(activeChunks []ActiveChunk) []Collider {
for _, ac := range activeChunks {
chunk, exists := w.ChunkLibrary[ac.ChunkID]
if !exists {
fmt.Printf("⚠️ Chunk '%s' nicht in Library!\n", ac.ChunkID)
continue
}
for _, obj := range chunk.Objects {
def, ok := w.Manifest.Assets[obj.AssetID]
if !ok {
fmt.Printf("⚠️ Asset '%s' nicht in Manifest!\n", obj.AssetID)
continue
}
if def.Type == "obstacle" || def.Type == "platform" {
c := Collider{
Rect: Rect{
OffsetX: ac.X + obj.X + def.Hitbox.OffsetX,
OffsetY: obj.Y + def.Hitbox.OffsetY,
OffsetX: ac.X + obj.X + def.DrawOffX + def.Hitbox.OffsetX,
OffsetY: obj.Y + def.DrawOffY + def.Hitbox.OffsetY,
W: def.Hitbox.W,
H: def.Hitbox.H,
},
Type: def.Type,
}
list = append(list, c)
fmt.Printf("✅ Collider generiert: Type=%s, Asset=%s, Pos=(%.0f,%.0f), DrawOff=(%.0f,%.0f), HitboxOff=(%.0f,%.0f)\n",
def.Type, obj.AssetID, c.Rect.OffsetX, c.Rect.OffsetY,
def.DrawOffX, def.DrawOffY, def.Hitbox.OffsetX, def.Hitbox.OffsetY)
}
}
}