mirror of
https://github.com/yeslayla/golang-game-framework.git
synced 2025-04-28 12:15:36 +02:00
71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package sdl
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/manleydev/golang-game-framework/core"
|
|
"github.com/manleydev/golang-game-framework/rendering"
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
)
|
|
|
|
type SdlTexture2D struct {
|
|
texture *sdl.Texture
|
|
}
|
|
|
|
func NewSdlTexture2D(renderer rendering.Renderer2D, bmpPath string) *SdlTexture2D {
|
|
sdlRenderer, ok := renderer.(*SdlRenderer2D)
|
|
if !ok {
|
|
log.Print("Renderer is not an SDL renderer")
|
|
return nil
|
|
}
|
|
|
|
tex := SdlTexture2D{}
|
|
surface, err := sdl.LoadBMP(bmpPath)
|
|
if err != nil {
|
|
log.Print("Failed to load bmp: ", err)
|
|
return nil
|
|
}
|
|
defer surface.Free()
|
|
|
|
tex.texture, err = sdlRenderer.renderer.CreateTextureFromSurface(surface)
|
|
if err != nil {
|
|
log.Print("Failed to create SDL texture: ", err)
|
|
return nil
|
|
}
|
|
|
|
return &tex
|
|
}
|
|
|
|
func (tex SdlTexture2D) GetCenter() core.Vector2 {
|
|
_, _, width, height, err := tex.texture.Query()
|
|
if err != nil {
|
|
log.Print("Could not get texture center: ", err)
|
|
return core.Vector2{}
|
|
}
|
|
|
|
return core.Vector2{
|
|
X: float64(width / 2),
|
|
Y: float64(height / 2),
|
|
}
|
|
}
|
|
|
|
func (tex SdlTexture2D) GetRect() core.Rect2D {
|
|
_, _, width, height, err := tex.texture.Query()
|
|
if err != nil {
|
|
log.Print("Could not get texture data: ", err)
|
|
return core.Rect2D{}
|
|
}
|
|
return core.Rect2D{
|
|
X: 0,
|
|
Y: 0,
|
|
W: float64(width),
|
|
H: float64(height),
|
|
}
|
|
}
|
|
|
|
func (tex SdlTexture2D) Destroy() {
|
|
if err := tex.texture.Destroy(); err != nil {
|
|
log.Print("Failed to destroy SDL texture: ", err)
|
|
}
|
|
}
|