Private
Public Access
1
0

fix game
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 6m49s

This commit is contained in:
Sebastian Unterschütz
2026-03-22 18:18:45 +01:00
parent ced5011718
commit 656f279a89
7 changed files with 226 additions and 87 deletions

View File

@@ -32,10 +32,13 @@ type ServerPlayer struct {
IsSpectator bool
// Powerups
HasDoubleJump bool // Doppelsprung aktiv?
DoubleJumpUsed bool // Wurde zweiter Sprung schon benutzt?
HasGodMode bool // Godmode aktiv?
GodModeEndTime time.Time // Wann endet Godmode?
HasDoubleJump bool // Doppelsprung aktiv?
DoubleJumpUsed bool // Wurde zweiter Sprung schon benutzt?
DoubleJumpEndTime time.Time // Wann endet Double Jump?
HasGodMode bool // Godmode aktiv?
GodModeEndTime time.Time // Wann endet Godmode?
HasMagnet bool // Magnet aktiv?
MagnetEndTime time.Time // Wann endet Magnet?
}
type MovingPlatform struct {
@@ -525,11 +528,29 @@ func (r *Room) Update() {
// Powerup Kollision prüfen
r.CheckPowerupCollision(p)
// Double Jump Timeout prüfen
if p.HasDoubleJump && time.Now().After(p.DoubleJumpEndTime) {
p.HasDoubleJump = false
p.DoubleJumpUsed = false
log.Printf("⚡ Double Jump von %s ist abgelaufen", p.Name)
}
// Godmode Timeout prüfen
if p.HasGodMode && time.Now().After(p.GodModeEndTime) {
p.HasGodMode = false
log.Printf("🛡️ Godmode von %s ist abgelaufen", p.Name)
}
// Magnet Timeout prüfen
if p.HasMagnet && time.Now().After(p.MagnetEndTime) {
p.HasMagnet = false
log.Printf("🧲 Magnet von %s ist abgelaufen", p.Name)
}
// Magnet: Coins im Umkreis automatisch einsammeln
if p.HasMagnet {
r.ApplyMagnetEffect(p)
}
}
// 2b. Distanz-Score updaten
@@ -838,22 +859,49 @@ func (r *Room) Broadcast() {
DifficultyFactor: r.DifficultyFactor,
}
now := time.Now()
for id, p := range r.Players {
djRemaining := 0.0
if p.HasDoubleJump {
djRemaining = p.DoubleJumpEndTime.Sub(now).Seconds()
if djRemaining < 0 {
djRemaining = 0
}
}
godRemaining := 0.0
if p.HasGodMode {
godRemaining = p.GodModeEndTime.Sub(now).Seconds()
if godRemaining < 0 {
godRemaining = 0
}
}
magnetRemaining := 0.0
if p.HasMagnet {
magnetRemaining = p.MagnetEndTime.Sub(now).Seconds()
if magnetRemaining < 0 {
magnetRemaining = 0
}
}
state.Players[id] = game.PlayerState{
ID: id,
Name: p.Name,
X: p.X,
Y: p.Y,
VX: p.VX,
VY: p.VY,
OnGround: p.OnGround,
OnWall: p.OnWall,
LastInputSeq: p.LastInputSeq,
Score: p.Score,
IsAlive: p.IsAlive,
IsSpectator: p.IsSpectator,
HasDoubleJump: p.HasDoubleJump,
HasGodMode: p.HasGodMode,
ID: id,
Name: p.Name,
X: p.X,
Y: p.Y,
VX: p.VX,
VY: p.VY,
OnGround: p.OnGround,
OnWall: p.OnWall,
LastInputSeq: p.LastInputSeq,
Score: p.Score,
IsAlive: p.IsAlive,
IsSpectator: p.IsSpectator,
HasDoubleJump: p.HasDoubleJump,
DoubleJumpUsed: p.DoubleJumpUsed,
DoubleJumpRemainingSeconds: djRemaining,
HasGodMode: p.HasGodMode,
GodModeRemainingSeconds: godRemaining,
HasMagnet: p.HasMagnet,
MagnetRemainingSeconds: magnetRemaining,
}
}