92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package sprite
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
)
|
|
|
|
const (
|
|
PENGUIN = "assets/images/penguin.png"
|
|
PERCYWALKING = "assets/images/percywalking.png"
|
|
PLATFORMER_FOREST_CHARACTERS = "assets/images/a-platformer-in-the-forest/characters.png"
|
|
DELILAHWALKING = "assets/images/Delilah_walking.png"
|
|
KINGWALKING = "assets/images/King_walking.png"
|
|
)
|
|
|
|
var fileList []string = []string{
|
|
PENGUIN,
|
|
PERCYWALKING,
|
|
PLATFORMER_FOREST_CHARACTERS,
|
|
DELILAHWALKING,
|
|
KINGWALKING,
|
|
}
|
|
|
|
var (
|
|
spriteCache map[string]*spritesheet
|
|
defaultSprite *spritesheet
|
|
)
|
|
|
|
func InitSpriteCache(renderer *sdl.Renderer) error {
|
|
spriteCache = make(map[string]*spritesheet)
|
|
|
|
for _, filename := range fileList {
|
|
s, err := NewSprite(renderer, filename)
|
|
if err != nil {
|
|
log.Printf("error creating sprite %v, using DefaultSprite: %v", filename, err)
|
|
|
|
defaultSprite, err = createDefaultSprite(renderer)
|
|
if err != nil {
|
|
log.Printf("failed to create DefaultSprite: %v", err)
|
|
return err
|
|
}
|
|
|
|
spriteCache[filename] = defaultSprite
|
|
} else {
|
|
spriteCache[filename] = s
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetSpritesheet(filename string) *spritesheet {
|
|
s, exists := spriteCache[filename]
|
|
if !exists {
|
|
log.Printf("no sprite found for %v, using DefaultSprite", filename)
|
|
return defaultSprite
|
|
}
|
|
|
|
return s
|
|
}
|
|
|
|
func CleanupSpriteCache() {
|
|
for _, v := range spriteCache {
|
|
defer v.Cleanup()
|
|
}
|
|
}
|
|
|
|
// The DefaultSprite is just a 100x100 black square
|
|
func createDefaultSprite(renderer *sdl.Renderer) (*spritesheet, error) {
|
|
var err error
|
|
|
|
surface, err := sdl.CreateRGBSurface(0, 100, 100, 32, 0, 0, 0, 0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
texture, err := renderer.CreateTextureFromSurface(surface)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s := spritesheet{
|
|
filename: "DEFAULT_SPRITE",
|
|
renderer: renderer,
|
|
texture: texture,
|
|
surface: surface,
|
|
}
|
|
|
|
return &s, nil
|
|
}
|