fix view port rendering to include
Some checks failed
Dynamic Branch Deploy / build-and-deploy (push) Has been cancelled
Some checks failed
Dynamic Branch Deploy / build-and-deploy (push) Has been cancelled
This commit is contained in:
@@ -401,7 +401,7 @@ func (g *Game) DrawGame(screen *ebiten.Image) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
g.drawBackground(target, snap)
|
g.drawBackground(target, snap)
|
||||||
g.RenderGround(target, g.camX/snap.viewScale)
|
g.RenderGround(target, g.camX, snap.viewScale)
|
||||||
g.drawTeacher(target, snap)
|
g.drawTeacher(target, snap)
|
||||||
g.drawWorldObjects(target, snap)
|
g.drawWorldObjects(target, snap)
|
||||||
g.drawPlayers(target, snap)
|
g.drawPlayers(target, snap)
|
||||||
@@ -510,7 +510,7 @@ func (g *Game) drawWorldObjects(screen *ebiten.Image, snap renderSnapshot) {
|
|||||||
// Debug: Boden-Collider visualisieren (GRÜN)
|
// Debug: Boden-Collider visualisieren (GRÜN)
|
||||||
if g.showDebug {
|
if g.showDebug {
|
||||||
vector.StrokeRect(screen,
|
vector.StrokeRect(screen,
|
||||||
float32(-g.camX), float32(WorldToScreenYWithHeight(540, snap.canvasH)),
|
float32(-g.camX*snap.viewScale), float32(WorldToScreenYWithHeight(540, snap.canvasH)),
|
||||||
10000, 5000, 2, color.RGBA{0, 255, 0, 255}, false)
|
10000, 5000, 2, color.RGBA{0, 255, 0, 255}, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -538,7 +538,7 @@ func (g *Game) drawPlayers(screen *ebiten.Image, snap renderSnapshot) {
|
|||||||
ratio := float32(i+1) / float32(len(g.trail))
|
ratio := float32(i+1) / float32(len(g.trail))
|
||||||
alpha := uint8(ratio * 80)
|
alpha := uint8(ratio * 80)
|
||||||
r := float32(8 * ratio)
|
r := float32(8 * ratio)
|
||||||
tx := float32(tp.X - g.camX)
|
tx := float32((tp.X - g.camX) * snap.viewScale)
|
||||||
ty := float32(WorldToScreenYWithHeight(tp.Y, snap.canvasH))
|
ty := float32(WorldToScreenYWithHeight(tp.Y, snap.canvasH))
|
||||||
vector.DrawFilledCircle(screen, tx, ty, r, color.RGBA{200, 220, 255, alpha}, false)
|
vector.DrawFilledCircle(screen, tx, ty, r, color.RGBA{200, 220, 255, alpha}, false)
|
||||||
}
|
}
|
||||||
@@ -550,10 +550,10 @@ func (g *Game) drawPlayers(screen *ebiten.Image, snap renderSnapshot) {
|
|||||||
if name == "" {
|
if name == "" {
|
||||||
name = id
|
name = id
|
||||||
}
|
}
|
||||||
text.Draw(screen, name, basicfont.Face7x13, int(posX-g.camX), int(screenY-25), ColText)
|
text.Draw(screen, name, basicfont.Face7x13, int((posX-g.camX)*snap.viewScale), int(screenY-25), ColText)
|
||||||
|
|
||||||
if g.showDebug {
|
if g.showDebug {
|
||||||
g.drawPlayerHitbox(screen, posX, screenY)
|
g.drawPlayerHitbox(screen, posX, screenY, snap.viewScale)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -570,15 +570,15 @@ func (g *Game) selectPlayerSprite(onGround bool, vy float64) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// drawPlayerHitbox visualisiert die Spieler-Hitbox im Debug-Modus.
|
// drawPlayerHitbox visualisiert die Spieler-Hitbox im Debug-Modus.
|
||||||
func (g *Game) drawPlayerHitbox(screen *ebiten.Image, posX, screenY float64) {
|
func (g *Game) drawPlayerHitbox(screen *ebiten.Image, posX, screenY, viewScale float64) {
|
||||||
def, ok := g.world.Manifest.Assets["player"]
|
def, ok := g.world.Manifest.Assets["player"]
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
hx := float32(posX + def.DrawOffX + def.Hitbox.OffsetX - g.camX)
|
hx := float32((posX + def.DrawOffX + def.Hitbox.OffsetX - g.camX) * viewScale)
|
||||||
hy := float32(screenY + def.DrawOffY + def.Hitbox.OffsetY)
|
hy := float32(screenY + def.DrawOffY + def.Hitbox.OffsetY)
|
||||||
vector.StrokeRect(screen, hx, hy, float32(def.Hitbox.W), float32(def.Hitbox.H), 3, color.RGBA{255, 0, 0, 255}, false)
|
vector.StrokeRect(screen, hx, hy, float32(def.Hitbox.W), float32(def.Hitbox.H), 3, color.RGBA{255, 0, 0, 255}, false)
|
||||||
vector.DrawFilledCircle(screen, float32(posX-g.camX), float32(screenY), 5, color.RGBA{255, 255, 0, 255}, false)
|
vector.DrawFilledCircle(screen, float32((posX-g.camX)*viewScale), float32(screenY), 5, color.RGBA{255, 255, 0, 255}, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// drawStatusUI zeichnet das spielzustandsabhängige UI (Countdown, Score, Spectator).
|
// drawStatusUI zeichnet das spielzustandsabhängige UI (Countdown, Score, Spectator).
|
||||||
@@ -841,7 +841,7 @@ func (g *Game) DrawAsset(screen *ebiten.Image, assetID string, worldX, worldY fl
|
|||||||
|
|
||||||
canvasW, canvasH := screen.Size()
|
canvasW, canvasH := screen.Size()
|
||||||
viewScale := GetScaleFromHeight(canvasH)
|
viewScale := GetScaleFromHeight(canvasH)
|
||||||
screenX := (worldX - g.camX/viewScale) * viewScale
|
screenX := (worldX - g.camX) * viewScale
|
||||||
|
|
||||||
if screenX < -cullingBuffer || screenX > float64(canvasW)+cullingBuffer {
|
if screenX < -cullingBuffer || screenX > float64(canvasW)+cullingBuffer {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ func GenerateGroundTile(tileIdx int) GroundTile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RenderGround rendert den Boden mit Bewegung
|
// RenderGround rendert den Boden mit Bewegung
|
||||||
func (g *Game) RenderGround(screen *ebiten.Image, cameraX float64) {
|
func (g *Game) RenderGround(screen *ebiten.Image, cameraX float64, viewScale float64) {
|
||||||
// Tatsächliche Canvas-Größe verwenden
|
// Tatsächliche Canvas-Größe verwenden
|
||||||
canvasW, canvasH := screen.Size()
|
canvasW, canvasH := screen.Size()
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ func (g *Game) RenderGround(screen *ebiten.Image, cameraX float64) {
|
|||||||
// Berechne welche Tiles sichtbar sind (basierend auf Canvas-Breite)
|
// Berechne welche Tiles sichtbar sind (basierend auf Canvas-Breite)
|
||||||
tileWidth := 128.0
|
tileWidth := 128.0
|
||||||
startTile := int(math.Floor(cameraX / tileWidth))
|
startTile := int(math.Floor(cameraX / tileWidth))
|
||||||
endTile := int(math.Ceil((cameraX + float64(canvasW)) / tileWidth))
|
endTile := int(math.Ceil((cameraX + float64(canvasW)/viewScale) / tileWidth))
|
||||||
|
|
||||||
// Tiles rendern
|
// Tiles rendern
|
||||||
for tileIdx := startTile; tileIdx <= endTile; tileIdx++ {
|
for tileIdx := startTile; tileIdx <= endTile; tileIdx++ {
|
||||||
@@ -128,7 +128,7 @@ func (g *Game) RenderGround(screen *ebiten.Image, cameraX float64) {
|
|||||||
// Dirt-Patches rendern
|
// Dirt-Patches rendern
|
||||||
for _, dirt := range tile.DirtVariants {
|
for _, dirt := range tile.DirtVariants {
|
||||||
worldX := tile.X + dirt.OffsetX
|
worldX := tile.X + dirt.OffsetX
|
||||||
screenX := float32(worldX - cameraX)
|
screenX := float32((worldX - cameraX) * viewScale)
|
||||||
screenY := gameFloorY + float32(dirt.OffsetY)
|
screenY := gameFloorY + float32(dirt.OffsetY)
|
||||||
|
|
||||||
// Nur rendern wenn im sichtbaren Bereich (Canvas-Breite verwenden)
|
// Nur rendern wenn im sichtbaren Bereich (Canvas-Breite verwenden)
|
||||||
@@ -140,7 +140,7 @@ func (g *Game) RenderGround(screen *ebiten.Image, cameraX float64) {
|
|||||||
// Steine rendern (in der Erde)
|
// Steine rendern (in der Erde)
|
||||||
for _, stone := range tile.Stones {
|
for _, stone := range tile.Stones {
|
||||||
worldX := tile.X + stone.X
|
worldX := tile.X + stone.X
|
||||||
screenX := float32(worldX - cameraX)
|
screenX := float32((worldX - cameraX) * viewScale)
|
||||||
screenY := gameFloorY + float32(stone.Y)
|
screenY := gameFloorY + float32(stone.Y)
|
||||||
|
|
||||||
// Nur rendern wenn im sichtbaren Bereich (Canvas-Breite verwenden)
|
// Nur rendern wenn im sichtbaren Bereich (Canvas-Breite verwenden)
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ const SPRUECHE = [
|
|||||||
{ text: "Die anderen listen carefully, bitte.", author: "Eine Lehrerin" },
|
{ text: "Die anderen listen carefully, bitte.", author: "Eine Lehrerin" },
|
||||||
{ text: "Was mit Beschiss? Mit Beschiss kann ich. […] Ich hab den König gekrönt vom Bescheissen.", author: "Ein Lehrer" },
|
{ text: "Was mit Beschiss? Mit Beschiss kann ich. […] Ich hab den König gekrönt vom Bescheissen.", author: "Ein Lehrer" },
|
||||||
{ text: "Ein Lehrer erzählt die Geschichte von dem Huhn, das aggro wurde, als es einen Waschbären traf – das jetzt so viel wert ist wie seine neue Brille.", author: "Schulflur-Legende" },
|
{ text: "Ein Lehrer erzählt die Geschichte von dem Huhn, das aggro wurde, als es einen Waschbären traf – das jetzt so viel wert ist wie seine neue Brille.", author: "Schulflur-Legende" },
|
||||||
{ text: "EPK ist BPMN auf Steroiden.", author: "Ein Lehrer" },
|
{ text: "BPMN ist EPK auf Steroiden.", author: "Ein Lehrer" },
|
||||||
{ text: "Richard ist heute nicht da. – Was!? Dann wird das ja heute richtig still im Raum. Geil. Das hab ich jetzt nicht gesagt.", author: "Schüler & Lehrerin" },
|
{ text: "Richard ist heute nicht da. – Was!? Dann wird das ja heute richtig still im Raum. Geil. Das hab ich jetzt nicht gesagt.", author: "Schüler & Lehrerin" },
|
||||||
{ text: "Zu Hausmeistern habe ich immer noch das beste Verhältnis – im Gegensatz zu manchen anderen.", author: "Ein Lehrer" },
|
{ text: "Zu Hausmeistern habe ich immer noch das beste Verhältnis – im Gegensatz zu manchen anderen.", author: "Ein Lehrer" },
|
||||||
{ text: "Ein Kollege hat das bestimmt entspannter gemacht. Ich mag Menschen quälen.", author: "Ein Lehrer", ctx: "Zu LF 3" },
|
{ text: "Ein Kollege hat das bestimmt entspannter gemacht. Ich mag Menschen quälen.", author: "Ein Lehrer", ctx: "Zu LF 3" },
|
||||||
@@ -370,7 +370,7 @@ const SPRUECHE = [
|
|||||||
{ text: "Es gibt eine große Zeitspanne, in der quasi keine Lehrer ausgebildet wurden. – Und dann gibt es noch solche von der Resterampe wie mich.", author: "Ein Lehrer" },
|
{ text: "Es gibt eine große Zeitspanne, in der quasi keine Lehrer ausgebildet wurden. – Und dann gibt es noch solche von der Resterampe wie mich.", author: "Ein Lehrer" },
|
||||||
{ text: "Ja. So viel Pech im Denken kann man gar nicht haben.", author: "Ein Lehrer", ctx: "Als ihn ein Schüler fragte, mit wem er Spaß bei Sinusfunktionen hatte" },
|
{ text: "Ja. So viel Pech im Denken kann man gar nicht haben.", author: "Ein Lehrer", ctx: "Als ihn ein Schüler fragte, mit wem er Spaß bei Sinusfunktionen hatte" },
|
||||||
{ text: "Richard; bei dir, das hab ich gleich gelassen und gar keine Note drunter geschrieben.", author: "Eine Lehrerin", ctx: "Beim Zurückgeben freiwilliger Aufgaben" },
|
{ text: "Richard; bei dir, das hab ich gleich gelassen und gar keine Note drunter geschrieben.", author: "Eine Lehrerin", ctx: "Beim Zurückgeben freiwilliger Aufgaben" },
|
||||||
{ text: "Die Noten der letzten LK konnten nicht eingetragen werden, weil die Notebücher verschwunden sind. Reaktion: „Die tauchen irgendwann schon wieder auf.“", author: "Eine Lehrerin" },
|
{ text: "Die Noten der letzten LK konnten nicht eingetragen werden, weil die Notenbücher verschwunden sind. Reaktion: „Die tauchen irgendwann schon wieder auf.“", author: "Eine Lehrerin" },
|
||||||
{ text: "Ein Lehrer kommt random in der Mittagspause ins Zimmer und erzählt von seinen kulinarischen Abenteuern – u.a. Gammelfisch am Wochenende.", author: "Zeugen" },
|
{ text: "Ein Lehrer kommt random in der Mittagspause ins Zimmer und erzählt von seinen kulinarischen Abenteuern – u.a. Gammelfisch am Wochenende.", author: "Zeugen" },
|
||||||
{ text: "Samuel: Ich hab für den Weg zum Netto länger gebraucht als die WiKu-LK gerade.", author: "Samuel" },
|
{ text: "Samuel: Ich hab für den Weg zum Netto länger gebraucht als die WiKu-LK gerade.", author: "Samuel" },
|
||||||
{ text: "[Schüler], waren Sie gestern da? – Nein, ich war krank. Warum? – Weil ein Kollege drauf gewettet hat, dass Sie nicht da sind. Ich hab die Wette verloren.", author: "Ein Lehrer" },
|
{ text: "[Schüler], waren Sie gestern da? – Nein, ich war krank. Warum? – Weil ein Kollege drauf gewettet hat, dass Sie nicht da sind. Ich hab die Wette verloren.", author: "Ein Lehrer" },
|
||||||
|
|||||||
Reference in New Issue
Block a user