Add asset for js
This commit is contained in:
parent
3ea6b47140
commit
a0ea8ceabe
6 changed files with 95 additions and 29 deletions
|
@ -16,7 +16,6 @@ const char* internal_storage_path;
|
|||
import "C"
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"unsafe"
|
||||
|
@ -100,7 +99,7 @@ func OpenAsset(name string) (Asset, error) {
|
|||
a := &asset{C.AAssetManager_open(C.asset_manager, cname, C.AASSET_MODE_UNKNOWN)}
|
||||
|
||||
if a.ptr == nil {
|
||||
return nil, errors.New("asset file could not be opened")
|
||||
return nil, fmt.Errorf("asset file could not be opened")
|
||||
}
|
||||
|
||||
return a, nil
|
||||
|
@ -121,7 +120,7 @@ func (a *asset) Read(p []byte) (n int, err error) {
|
|||
func (a *asset) Seek(offset int64, whence int) (int64, error) {
|
||||
off := C.AAsset_seek(a.ptr, C.off_t(offset), C.int(whence))
|
||||
if off == -1 {
|
||||
return 0, errors.New(fmt.Sprintf("bad result for offset=%d, whence=%d", offset, whence))
|
||||
return 0, fmt.Errorf("bad result for offset=%d, whence=%d", offset, whence)
|
||||
}
|
||||
return int64(off), nil
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
package raylib
|
||||
|
||||
import (
|
||||
"os"
|
||||
"unsafe"
|
||||
|
||||
"github.com/gopherjs/gopherjs/js"
|
||||
|
@ -59,10 +58,87 @@ func ClearDroppedFiles() {
|
|||
}
|
||||
|
||||
// OpenAsset - Open asset
|
||||
func OpenAsset(name string) (Asset, error) {
|
||||
f, err := os.Open(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
func OpenAsset(name string) (a Asset, err error) {
|
||||
defer func() {
|
||||
e := recover()
|
||||
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
return f, nil
|
||||
|
||||
if e, ok := e.(*js.Error); ok {
|
||||
err = e
|
||||
} else {
|
||||
panic(e)
|
||||
}
|
||||
}()
|
||||
|
||||
ptr := js.Global.Get("FS").Call("open", name, "r")
|
||||
a = &asset{ptr, 0}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type asset struct {
|
||||
ptr *js.Object
|
||||
offset int64
|
||||
}
|
||||
|
||||
func (a *asset) Read(p []byte) (n int, err error) {
|
||||
defer func() {
|
||||
e := recover()
|
||||
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if e, ok := e.(*js.Error); ok {
|
||||
err = e
|
||||
} else {
|
||||
panic(e)
|
||||
}
|
||||
}()
|
||||
|
||||
js.Global.Get("FS").Call("read", a.ptr, p, 0, cap(p), a.offset)
|
||||
n = len(p)
|
||||
return
|
||||
}
|
||||
|
||||
func (a *asset) Seek(offset int64, whence int) (off int64, err error) {
|
||||
defer func() {
|
||||
e := recover()
|
||||
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if e, ok := e.(*js.Error); ok {
|
||||
err = e
|
||||
} else {
|
||||
panic(e)
|
||||
}
|
||||
}()
|
||||
|
||||
off = js.Global.Get("FS").Call("llseek", a.ptr, int(offset), int(whence)).Int64()
|
||||
a.offset = off
|
||||
return
|
||||
}
|
||||
|
||||
func (a *asset) Close() (err error) {
|
||||
defer func() {
|
||||
e := recover()
|
||||
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if e, ok := e.(*js.Error); ok {
|
||||
err = e
|
||||
} else {
|
||||
panic(e)
|
||||
}
|
||||
}()
|
||||
|
||||
js.Global.Get("FS").Call("close", a.ptr)
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -1053,3 +1053,10 @@ const (
|
|||
LogError
|
||||
LogDebug
|
||||
)
|
||||
|
||||
var traceDebugMsgs = false
|
||||
|
||||
// SetDebug - Set debug messages
|
||||
func SetDebug(enabled bool) {
|
||||
traceDebugMsgs = enabled
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package raylib
|
|||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"unsafe"
|
||||
|
@ -27,8 +26,7 @@ func LoadResource(reader io.ReadSeeker, rresID int, key []byte) (data rres.Data)
|
|||
}
|
||||
|
||||
// Verify "rRES" identifier
|
||||
id := fmt.Sprintf("%c", fileHeader.ID)
|
||||
if id != "[r R E S]" {
|
||||
if string(fileHeader.ID[:]) != "rRES" {
|
||||
TraceLog(LogWarning, "not a valid raylib resource file")
|
||||
return
|
||||
}
|
||||
|
@ -78,7 +76,7 @@ func LoadResource(reader io.ReadSeeker, rresID int, key []byte) (data rres.Data)
|
|||
}
|
||||
|
||||
if data.Data == nil {
|
||||
TraceLog(LogInfo, "[ID %d] Requested resource could not be found", rresID)
|
||||
TraceLog(LogWarning, "[ID %d] Requested resource could not be found", rresID)
|
||||
}
|
||||
|
||||
return
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// +build !android,!windows
|
||||
// +build !android,!windows,!js
|
||||
|
||||
package raylib
|
||||
|
||||
|
@ -7,13 +7,6 @@ import (
|
|||
"os"
|
||||
)
|
||||
|
||||
var traceDebugMsgs = false
|
||||
|
||||
// SetDebug - Set debug messages
|
||||
func SetDebug(enabled bool) {
|
||||
traceDebugMsgs = enabled
|
||||
}
|
||||
|
||||
// TraceLog - Show trace log messages (INFO, WARNING, ERROR, DEBUG)
|
||||
func TraceLog(msgType int, text string, v ...interface{}) {
|
||||
switch msgType {
|
||||
|
|
|
@ -20,13 +20,6 @@ import (
|
|||
"unsafe"
|
||||
)
|
||||
|
||||
var traceDebugMsgs = false
|
||||
|
||||
// SetDebug - Set debug messages
|
||||
func SetDebug(enabled bool) {
|
||||
traceDebugMsgs = enabled
|
||||
}
|
||||
|
||||
// TraceLog - Trace log messages showing (INFO, WARNING, ERROR, DEBUG)
|
||||
func TraceLog(msgType int, text string, v ...interface{}) {
|
||||
switch msgType {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue