Introduce indirect file access (simple shim currently, .pak support etc soon)

This commit is contained in:
stevenhowes
2022-03-27 18:16:50 +01:00
parent 5806398bba
commit 094a2e3f64
5 changed files with 31 additions and 16 deletions
+2 -13
View File
@@ -9,7 +9,6 @@ package GoRetro
import ( import (
"encoding/json" "encoding/json"
"os"
"time" "time"
"github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/sdl"
@@ -32,8 +31,6 @@ func NewAnimator(
renderer *sdl.Renderer) (*animator, error) { renderer *sdl.Renderer) (*animator, error) {
var an animator var an animator
imagepath = Config.DataDir + imagepath
tex, err := loadTextureFromBMP(imagepath, renderer) tex, err := loadTextureFromBMP(imagepath, renderer)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -122,17 +119,9 @@ func NewSequence(
var seq Sequence var seq Sequence
indexpath = Config.DataDir + indexpath jsonFile := GetFile(indexpath)
jsonFile, err := os.Open(indexpath) json.Unmarshal(jsonFile.Data, &seq.frames)
if err != nil {
return nil, err
}
jsonParser := json.NewDecoder(jsonFile)
if err = jsonParser.Decode(&seq.frames); err != nil {
return nil, err
}
defer jsonFile.Close()
seq.frame = 0 seq.frame = 0
seq.sampleRate = sampleRate seq.sampleRate = sampleRate
-1
View File
@@ -23,7 +23,6 @@ func NewSpriteRenderer(container *Element, renderer *sdl.Renderer, filename stri
sr := &spriteRenderer{} sr := &spriteRenderer{}
var err error var err error
filename = Config.DataDir + filename
sr.tex, err = loadTextureFromBMP(filename, renderer) sr.tex, err = loadTextureFromBMP(filename, renderer)
if err != nil { if err != nil {
panic(err) panic(err)
-1
View File
@@ -21,7 +21,6 @@ func NewSpriteSheetRenderer(container *Element, renderer *sdl.Renderer, filename
sr := &spriteSheetRenderer{} sr := &spriteSheetRenderer{}
var err error var err error
filename = Config.DataDir + filename
sr.tex, err = loadTextureFromBMP(filename, renderer) sr.tex, err = loadTextureFromBMP(filename, renderer)
if err != nil { if err != nil {
panic(err) panic(err)
+25
View File
@@ -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
}
+4 -1
View File
@@ -47,7 +47,10 @@ func loadTextureFromBMP(filename string, renderer *sdl.Renderer) (*sdl.Texture,
return val, nil 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 { if err != nil {
return nil, fmt.Errorf("loading %v: %v", filename, err) return nil, fmt.Errorf("loading %v: %v", filename, err)
} }