diff --git a/component_animator.go b/component_animator.go index 133bf79..f277f59 100644 --- a/component_animator.go +++ b/component_animator.go @@ -9,7 +9,6 @@ package GoRetro import ( "encoding/json" - "os" "time" "github.com/veandco/go-sdl2/sdl" @@ -32,8 +31,6 @@ func NewAnimator( renderer *sdl.Renderer) (*animator, error) { var an animator - imagepath = Config.DataDir + imagepath - tex, err := loadTextureFromBMP(imagepath, renderer) if err != nil { return nil, err @@ -122,17 +119,9 @@ func NewSequence( var seq Sequence - indexpath = Config.DataDir + indexpath + jsonFile := GetFile(indexpath) - jsonFile, err := os.Open(indexpath) - if err != nil { - return nil, err - } - jsonParser := json.NewDecoder(jsonFile) - if err = jsonParser.Decode(&seq.frames); err != nil { - return nil, err - } - defer jsonFile.Close() + json.Unmarshal(jsonFile.Data, &seq.frames) seq.frame = 0 seq.sampleRate = sampleRate diff --git a/component_sprite_renderer.go b/component_sprite_renderer.go index 6ae20fa..1cf4c57 100644 --- a/component_sprite_renderer.go +++ b/component_sprite_renderer.go @@ -23,7 +23,6 @@ func NewSpriteRenderer(container *Element, renderer *sdl.Renderer, filename stri sr := &spriteRenderer{} var err error - filename = Config.DataDir + filename sr.tex, err = loadTextureFromBMP(filename, renderer) if err != nil { panic(err) diff --git a/component_spritesheet_renderer.go b/component_spritesheet_renderer.go index ddc0998..c598209 100644 --- a/component_spritesheet_renderer.go +++ b/component_spritesheet_renderer.go @@ -21,7 +21,6 @@ func NewSpriteSheetRenderer(container *Element, renderer *sdl.Renderer, filename sr := &spriteSheetRenderer{} var err error - filename = Config.DataDir + filename sr.tex, err = loadTextureFromBMP(filename, renderer) if err != nil { panic(err) diff --git a/utils_file.go b/utils_file.go new file mode 100644 index 0000000..23ac8c1 --- /dev/null +++ b/utils_file.go @@ -0,0 +1,25 @@ +package GoRetro + +/* + * -------------------- + * File Handler + * -------------------- + * All IO should pass through this rather than direct file access to allow + * the use of archive files etc in future. + */ + +import "os" + +type vFile struct { + Data []byte + Size int +} + +func GetFile(filename string) *vFile { + Data, _ := os.ReadFile(Config.DataDir + filename) + vf := vFile{ + Size: len(Data), + Data: Data, + } + return &vf +} diff --git a/utils_texture.go b/utils_texture.go index 643ebdd..2f7e85c 100644 --- a/utils_texture.go +++ b/utils_texture.go @@ -47,7 +47,10 @@ func loadTextureFromBMP(filename string, renderer *sdl.Renderer) (*sdl.Texture, return val, nil } - img, err := sdl.LoadBMP(filename) + vFile := GetFile(filename) + file, _ := sdl.RWFromMem(vFile.Data) + + img, err := sdl.LoadBMPRW(file, true) if err != nil { return nil, fmt.Errorf("loading %v: %v", filename, err) }