mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-24 18:02:02 +01:00
Close the observing channel
This commit is contained in:
parent
e2a8b07a94
commit
3e5d58ef85
@ -11,12 +11,12 @@ import (
|
||||
)
|
||||
|
||||
type Rects struct {
|
||||
rectTextureId graphics.RenderTargetId
|
||||
rectTextureInited bool
|
||||
offscreenId graphics.RenderTargetId
|
||||
offscreenInited bool
|
||||
rectBounds *graphics.Rect
|
||||
rectColor *color.RGBA
|
||||
rectTextureId graphics.RenderTargetId
|
||||
rectTextureInited bool
|
||||
offscreenId graphics.RenderTargetId
|
||||
offscreenInited bool
|
||||
rectBounds *graphics.Rect
|
||||
rectColor *color.RGBA
|
||||
screenSizeUpdatedCh chan ebiten.ScreenSizeUpdatedEvent
|
||||
screenWidth int
|
||||
screenHeight int
|
||||
@ -31,10 +31,10 @@ const (
|
||||
|
||||
func New() *Rects {
|
||||
return &Rects{
|
||||
rectTextureInited: false,
|
||||
offscreenInited: false,
|
||||
rectBounds: &graphics.Rect{},
|
||||
rectColor: &color.RGBA{},
|
||||
rectTextureInited: false,
|
||||
offscreenInited: false,
|
||||
rectBounds: &graphics.Rect{},
|
||||
rectColor: &color.RGBA{},
|
||||
screenSizeUpdatedCh: make(chan ebiten.ScreenSizeUpdatedEvent),
|
||||
}
|
||||
}
|
||||
|
@ -16,9 +16,9 @@ const (
|
||||
)
|
||||
|
||||
type Rotating struct {
|
||||
ebitenTextureId graphics.TextureId
|
||||
x int
|
||||
geometryMatrix matrix.Geometry
|
||||
ebitenTextureId graphics.TextureId
|
||||
x int
|
||||
geometryMatrix matrix.Geometry
|
||||
screenSizeUpdatedCh chan ebiten.ScreenSizeUpdatedEvent
|
||||
screenWidth int
|
||||
screenHeight int
|
||||
|
@ -64,8 +64,8 @@ func (sprite *Sprite) Update() {
|
||||
}
|
||||
|
||||
type Sprites struct {
|
||||
ebitenTextureId graphics.TextureId
|
||||
sprites []*Sprite
|
||||
ebitenTextureId graphics.TextureId
|
||||
sprites []*Sprite
|
||||
screenSizeUpdatedCh chan ebiten.ScreenSizeUpdatedEvent
|
||||
screenWidth int
|
||||
screenHeight int
|
||||
|
@ -81,20 +81,26 @@ func main() {
|
||||
events:
|
||||
for {
|
||||
select {
|
||||
case e := <-screenSizeUpdated:
|
||||
type Handler interface {
|
||||
OnScreenSizeUpdated(e ebiten.ScreenSizeUpdatedEvent)
|
||||
case e, ok := <-inputStateUpdated:
|
||||
if ok {
|
||||
type Handler interface {
|
||||
OnInputStateUpdated(ebiten.InputStateUpdatedEvent)
|
||||
}
|
||||
if game2, ok := game.(Handler); ok {
|
||||
game2.OnInputStateUpdated(e)
|
||||
}
|
||||
}
|
||||
if game2, ok := game.(Handler); ok {
|
||||
game2.OnScreenSizeUpdated(e)
|
||||
}
|
||||
case e := <-inputStateUpdated:
|
||||
type Handler interface {
|
||||
OnInputStateUpdated(ebiten.InputStateUpdatedEvent)
|
||||
}
|
||||
if game2, ok := game.(Handler); ok {
|
||||
game2.OnInputStateUpdated(e)
|
||||
inputStateUpdated = ui.ObserveInputStateUpdated()
|
||||
case e, ok := <-screenSizeUpdated:
|
||||
if ok {
|
||||
type Handler interface {
|
||||
OnScreenSizeUpdated(e ebiten.ScreenSizeUpdatedEvent)
|
||||
}
|
||||
if game2, ok := game.(Handler); ok {
|
||||
game2.OnScreenSizeUpdated(e)
|
||||
}
|
||||
}
|
||||
screenSizeUpdated = ui.ObserveScreenSizeUpdated()
|
||||
default:
|
||||
break events
|
||||
}
|
||||
|
@ -47,9 +47,9 @@ func New(screenWidth, screenHeight, screenScale int, title string) *UI {
|
||||
panic("UI can't be duplicated.")
|
||||
}
|
||||
ui := &UI{
|
||||
screenWidth: screenWidth,
|
||||
screenHeight: screenHeight,
|
||||
screenScale: screenScale,
|
||||
screenWidth: screenWidth,
|
||||
screenHeight: screenHeight,
|
||||
screenScale: screenScale,
|
||||
initialEventSent: false,
|
||||
inputStateUpdatedChs: make(chan chan ebiten.InputStateUpdatedEvent),
|
||||
inputStateUpdatedNotified: make(chan ebiten.InputStateUpdatedEvent),
|
||||
@ -90,13 +90,17 @@ func (ui *UI) chLoop() {
|
||||
case e := <-ui.inputStateUpdatedNotified:
|
||||
for _, ch := range inputStateUpdated {
|
||||
ch <- e
|
||||
close(ch)
|
||||
}
|
||||
inputStateUpdated = []chan ebiten.InputStateUpdatedEvent{}
|
||||
case ch := <-ui.screenSizeUpdatedChs:
|
||||
screenSizeUpdated = append(screenSizeUpdated, ch)
|
||||
case e := <-ui.screenSizeUpdatedNotified:
|
||||
for _, ch := range screenSizeUpdated {
|
||||
ch <- e
|
||||
close(ch)
|
||||
}
|
||||
screenSizeUpdated = []chan ebiten.ScreenSizeUpdatedEvent{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user