blooblib/main.go

157 lines
4.5 KiB
Go
Raw Normal View History

2024-03-23 05:15:23 +01:00
package main
import (
_ "embed"
"fmt"
"git.danitheskunk.com/squishy/blooblib/color"
. "git.danitheskunk.com/squishy/blooblib/src"
"github.com/veandco/go-sdl2/sdl"
"time"
)
const Width = 640
const Height = 360
//test
func main() {
_ = sdl.Init(sdl.INIT_EVERYTHING)
defer sdl.Quit()
scale := 3
window, _ := sdl.CreateWindow(
"test",
sdl.WINDOWPOS_CENTERED,
sdl.WINDOWPOS_CENTERED,
int32(Width*scale),
int32(Height*scale),
sdl.WINDOW_SHOWN,
)
surface, _ := window.GetSurface()
//data := unsafe.Slice((*uint32)(surface.Data()), Width*Height)
windowImage := NewImageFromPointer(surface.Data(), Vec2i{X: Width * scale, Y: Height * scale})
screen := NewImage(Vec2i{X: Width, Y: Height})
screen.Alpha = false
//sprite := NewImage(Vec2i{X: 32, Y: 32})
//sprite.Clear(0xabcdef)
fmt.Printf("%d\n", surface.Format.BitsPerPixel)
println("\n"[0])
tiles := LoadImage("go.png").MakeTileset(Vec2i{X: 16, Y: 16})
tilemap := NewTilemap(Vec2i{X: 40, Y: 23}, tiles)
tilemap.Clear(16)
for y := 0; y < 19; y += 1 {
for x := 0; x < 19; x += 1 {
tilemap.Set(Vec2i{X: 10 + x, Y: 1 + y}, 3)
}
//tilemap.Set(Vec2i{X: 9, Y: 1 + y}, 17)
tilemap.Set(Vec2i{X: 10, Y: 1 + y}, 11)
tilemap.Set(Vec2i{X: 28, Y: 1 + y}, 12)
}
for x := 0; x < 19; x += 1 {
//tilemap.Set(Vec2i{X: 10 + x, Y: 0}, 18)
tilemap.Set(Vec2i{X: 10 + x, Y: 1}, 9)
tilemap.Set(Vec2i{X: 10 + x, Y: 19}, 10)
tilemap.Set(Vec2i{X: 10 + x, Y: 20}, 17)
tilemap.Set(Vec2i{X: 10 + x, Y: 21}, 18)
}
for y := 0; y < 21; y += 1 {
tilemap.Set(Vec2i{X: 29, Y: 1 + y}, 19)
}
tilemap.Set(Vec2i{X: 10, Y: 21}, 20)
tilemap.Set(Vec2i{X: 29, Y: 1}, 21)
tilemap.Set(Vec2i{X: 10, Y: 1}, 5)
tilemap.Set(Vec2i{X: 28, Y: 1}, 6)
tilemap.Set(Vec2i{X: 10, Y: 19}, 7)
tilemap.Set(Vec2i{X: 28, Y: 19}, 8)
tilemap.Set(Vec2i{X: 13, Y: 4}, 4)
tilemap.Set(Vec2i{X: 25, Y: 4}, 4)
tilemap.Set(Vec2i{X: 13, Y: 16}, 4)
tilemap.Set(Vec2i{X: 25, Y: 16}, 4)
tilemap.Set(Vec2i{X: 13, Y: 10}, 4)
tilemap.Set(Vec2i{X: 13, Y: 16}, 4)
tilemap.Set(Vec2i{X: 25, Y: 10}, 4)
tilemap.Set(Vec2i{X: 25, Y: 16}, 4)
tilemap.Set(Vec2i{X: 19, Y: 4}, 4)
tilemap.Set(Vec2i{X: 19, Y: 10}, 4)
tilemap.Set(Vec2i{X: 19, Y: 16}, 4)
_ = window.UpdateSurface()
lastSecond := time.Now()
framesSinceLastSecond := 0
targetFPS := 60
frameDuration := time.Second / time.Duration(targetFPS)
lastFrame := lastSecond
running := true
tick := 0
for running {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch event.(type) {
case *sdl.QuitEvent:
running = false
break
}
}
now := time.Now()
delta := now.Sub(lastSecond)
//println(delta.Seconds())
//println(now.Second())
if delta.Seconds() >= 1.0 {
fmt.Printf("FPS: %5d | mspf: %f\n", framesSinceLastSecond, 1000.0/float32(framesSinceLastSecond))
framesSinceLastSecond = 0
lastSecond = lastSecond.Add(time.Second)
}
delta2 := now.Sub(lastFrame)
if delta2 >= frameDuration {
//t := (float64(tick)) / 1000
screen.Clear(0x123456)
screen.DrawTextOutline(
// "Hello World, this is a test,\nand now for another line :)",
// "Hello World, this is a test",
// "Vigilance, deathtouch, haste\n\nQuesting Beast can't be blocked by creatures\nwith power 2 or less.\n\nCombat damage that would be dealt by\ncreatures you control can't be prevented.\n\nWhenever Questing Beast deals combat damage\nto an opponent, it deals that much damage to\ntarget planeswalker that player controls.",
"Lorem ipsum dolor sit amet,\n"+
"consectetur adipiscing elit,\n"+
"sed do eiusmod tempor incididunt\n"+
"ut labore et dolore magna aliqua.\n"+
"Ut enim ad minim veniam, quis\n"+
"nostrud exercitation ullamco\n"+
"laboris nisi ut aliquip ex ea\n"+
"commodo consequat. Duis aute\n"+
"irure dolor in reprehenderit in\n"+
"voluptate velit esse cillum dolore\n"+
"eu fugiat nulla pariatur.\n"+
"Excepteur sint occaecat cupidatat\n"+
"non proident, sunt in culpa qui\n"+
"officia deserunt mollit anim id\n"+
"est laborum.",
DefaultFont,
Vec2i{X: 10, Y: 10},
0xffdddd,
color.Black,
// 50,
// 3.0,
// float64(tick) / 60.0,
)
screen.DrawTilemap(tilemap, Vec2i{})
screen.Draw(tilemap.Tileset[2], Vec2i{X: 16 * 25, Y: 16 * 4})
screen.Draw(tilemap.Tileset[1], Vec2i{X: 16 * 13, Y: 16 * 16})
windowImage.DrawUpscale(screen)
//windowImage.Draw(screen, Vec2i{})
tick += 1
framesSinceLastSecond += 1
lastFrame = lastFrame.Add(frameDuration)
}
_ = window.UpdateSurface()
}
}