mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 03:08:54 +01:00
loop: Remove IsRunning
This commit is contained in:
parent
cd885ce7c5
commit
071b65f173
@ -27,14 +27,6 @@ func CurrentFPS() float64 {
|
|||||||
return currentRunContext.getCurrentFPS()
|
return currentRunContext.getCurrentFPS()
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsRunning() bool {
|
|
||||||
// TODO: Need lock?
|
|
||||||
if currentRunContext == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return currentRunContext.isRunning()
|
|
||||||
}
|
|
||||||
|
|
||||||
type runContext struct {
|
type runContext struct {
|
||||||
running bool
|
running bool
|
||||||
fps int
|
fps int
|
||||||
|
@ -22,6 +22,7 @@ package ui
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gl/glfw/v3.2/glfw"
|
"github.com/go-gl/glfw/v3.2/glfw"
|
||||||
@ -34,7 +35,9 @@ type userInterface struct {
|
|||||||
height int
|
height int
|
||||||
scale float64
|
scale float64
|
||||||
funcs chan func()
|
funcs chan func()
|
||||||
|
running bool
|
||||||
sizeChanged bool
|
sizeChanged bool
|
||||||
|
m sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentUI *userInterface
|
var currentUI *userInterface
|
||||||
@ -74,6 +77,10 @@ func initialize() error {
|
|||||||
|
|
||||||
func RunMainThreadLoop(ch <-chan error) error {
|
func RunMainThreadLoop(ch <-chan error) error {
|
||||||
// TODO: Check this is done on the main thread.
|
// TODO: Check this is done on the main thread.
|
||||||
|
currentUI.setRunning(true)
|
||||||
|
defer func() {
|
||||||
|
currentUI.setRunning(false)
|
||||||
|
}()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case f := <-currentUI.funcs:
|
case f := <-currentUI.funcs:
|
||||||
@ -85,6 +92,18 @@ func RunMainThreadLoop(ch <-chan error) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *userInterface) isRunning() bool {
|
||||||
|
u.m.Lock()
|
||||||
|
defer u.m.Unlock()
|
||||||
|
return u.running
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *userInterface) setRunning(running bool) {
|
||||||
|
u.m.Lock()
|
||||||
|
defer u.m.Unlock()
|
||||||
|
u.running = running
|
||||||
|
}
|
||||||
|
|
||||||
func (u *userInterface) runOnMainThread(f func() error) error {
|
func (u *userInterface) runOnMainThread(f func() error) error {
|
||||||
if u.funcs == nil {
|
if u.funcs == nil {
|
||||||
// already closed
|
// already closed
|
||||||
@ -102,6 +121,9 @@ func (u *userInterface) runOnMainThread(f func() error) error {
|
|||||||
|
|
||||||
func SetScreenSize(width, height int) (bool, error) {
|
func SetScreenSize(width, height int) (bool, error) {
|
||||||
u := currentUI
|
u := currentUI
|
||||||
|
if !u.isRunning() {
|
||||||
|
return false, errors.New("ui: Run is not called yet")
|
||||||
|
}
|
||||||
r := false
|
r := false
|
||||||
if err := u.runOnMainThread(func() error {
|
if err := u.runOnMainThread(func() error {
|
||||||
var err error
|
var err error
|
||||||
@ -118,6 +140,9 @@ func SetScreenSize(width, height int) (bool, error) {
|
|||||||
|
|
||||||
func SetScreenScale(scale float64) (bool, error) {
|
func SetScreenScale(scale float64) (bool, error) {
|
||||||
u := currentUI
|
u := currentUI
|
||||||
|
if !u.isRunning() {
|
||||||
|
return false, errors.New("ui: Run is not called yet")
|
||||||
|
}
|
||||||
r := false
|
r := false
|
||||||
if err := u.runOnMainThread(func() error {
|
if err := u.runOnMainThread(func() error {
|
||||||
var err error
|
var err error
|
||||||
@ -134,6 +159,9 @@ func SetScreenScale(scale float64) (bool, error) {
|
|||||||
|
|
||||||
func ScreenScale() float64 {
|
func ScreenScale() float64 {
|
||||||
u := currentUI
|
u := currentUI
|
||||||
|
if !u.isRunning() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
s := 0.0
|
s := 0.0
|
||||||
_ = u.runOnMainThread(func() error {
|
_ = u.runOnMainThread(func() error {
|
||||||
s = u.scale
|
s = u.scale
|
||||||
|
12
run.go
12
run.go
@ -15,7 +15,6 @@
|
|||||||
package ebiten
|
package ebiten
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/internal/loop"
|
"github.com/hajimehoshi/ebiten/internal/loop"
|
||||||
@ -116,9 +115,6 @@ func RunWithoutMainLoop(f func(*Image) error, width, height int, scale float64,
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func SetScreenSize(width, height int) {
|
func SetScreenSize(width, height int) {
|
||||||
if !loop.IsRunning() {
|
|
||||||
panic("ebiten: Run is not called yet")
|
|
||||||
}
|
|
||||||
if width <= 0 || height <= 0 {
|
if width <= 0 || height <= 0 {
|
||||||
panic("ebiten: width and height must be positive")
|
panic("ebiten: width and height must be positive")
|
||||||
}
|
}
|
||||||
@ -131,9 +127,6 @@ func SetScreenSize(width, height int) {
|
|||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func SetScreenScale(scale float64) {
|
func SetScreenScale(scale float64) {
|
||||||
if !loop.IsRunning() {
|
|
||||||
panic("ebiten: Run is not called yet")
|
|
||||||
}
|
|
||||||
if scale <= 0 {
|
if scale <= 0 {
|
||||||
panic("ebiten: scale must be positive")
|
panic("ebiten: scale must be positive")
|
||||||
}
|
}
|
||||||
@ -144,13 +137,10 @@ func SetScreenScale(scale float64) {
|
|||||||
|
|
||||||
// ScreenScale returns the current screen scale.
|
// ScreenScale returns the current screen scale.
|
||||||
//
|
//
|
||||||
// If Run is not called, this returns NaN.
|
// If Run is not called, this returns 0.
|
||||||
//
|
//
|
||||||
// This function is concurrent-safe.
|
// This function is concurrent-safe.
|
||||||
func ScreenScale() float64 {
|
func ScreenScale() float64 {
|
||||||
if !loop.IsRunning() {
|
|
||||||
return math.NaN()
|
|
||||||
}
|
|
||||||
return ui.ScreenScale()
|
return ui.ScreenScale()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user