func (i *Input) Update() {
	switch i.mouseState {
	case mouseStateNone:
		if ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) {
			x, y := ebiten.CursorPosition()
			i.mouseInitPosX = x
			i.mouseInitPosY = y
			i.mouseState = mouseStatePressing
		}
	case mouseStatePressing:
		if !ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) {
			x, y := ebiten.CursorPosition()
			dx := x - i.mouseInitPosX
			dy := y - i.mouseInitPosY
			d, ok := vecToDir(dx, dy)
			if !ok {
				i.mouseState = mouseStateNone
				break
			}
			i.mouseDir = d
			i.mouseState = mouseStateSettled
		}
	case mouseStateSettled:
		i.mouseState = mouseStateNone
	}
	switch i.touchState {
	case touchStateNone:
		ts := ebiten.TouchIDs()
		if len(ts) == 1 {
			i.touchID = ts[0]
			x, y := ebiten.TouchPosition(ts[0])
			i.touchInitPosX = x
			i.touchInitPosY = y
			i.touchLastPosX = x
			i.touchLastPosX = y
			i.touchState = touchStatePressing
		}
	case touchStatePressing:
		ts := ebiten.TouchIDs()
		if len(ts) >= 2 {
			break
		}
		if len(ts) == 1 {
			if ts[0] != i.touchID {
				i.touchState = touchStateInvalid
			} else {
				x, y := ebiten.TouchPosition(ts[0])
				i.touchLastPosX = x
				i.touchLastPosY = y
			}
			break
		}
		if len(ts) == 0 {
			dx := i.touchLastPosX - i.touchInitPosX
			dy := i.touchLastPosY - i.touchInitPosY
			d, ok := vecToDir(dx, dy)
			if !ok {
				i.touchState = touchStateNone
				break
			}
			i.touchDir = d
			i.touchState = touchStateSettled
		}
	case touchStateSettled:
		i.touchState = touchStateNone
	case touchStateInvalid:
		if len(ebiten.TouchIDs()) == 0 {
			i.touchState = touchStateNone
		}
	}
}
func (i *Input) Update() {
	switch i.mouseState {
	case mouseStateNone:
		if ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) {
			x, y := ebiten.CursorPosition()
			i.mouseInitPosX = x
			i.mouseInitPosY = y
			i.mouseState = mouseStatePressing
		}
	case mouseStatePressing:
		if !ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) {
			x, y := ebiten.CursorPosition()
			dx := x - i.mouseInitPosX
			dy := y - i.mouseInitPosY
			d, ok := vecToDir(dx, dy)
			if !ok {
				i.mouseState = mouseStateNone
				break
			}
			i.mouseDir = d
			i.mouseState = mouseStateSettled
		}
	case mouseStateSettled:
		i.mouseState = mouseStateNone
	}
	switch i.touchState {
	case touchStateNone:
		ts := ebiten.TouchIDs()
		if len(ts) == 1 {
			i.touchID = ts[0]
			x, y := ebiten.TouchPosition(ts[0])
			i.touchInitPosX = x
			i.touchInitPosY = y
			i.touchLastPosX = x
			i.touchLastPosX = y
			i.touchState = touchStatePressing
		}
	case touchStatePressing:
		ts := ebiten.TouchIDs()
		if len(ts) >= 2 {
			break
		}
		if len(ts) == 1 {
			if ts[0] != i.touchID {
				i.touchState = touchStateInvalid
			} else {
				x, y := ebiten.TouchPosition(ts[0])
				i.touchLastPosX = x
				i.touchLastPosY = y
			}
			break
		}
		if len(ts) == 0 {
			dx := i.touchLastPosX - i.touchInitPosX
			dy := i.touchLastPosY - i.touchInitPosY
			d, ok := vecToDir(dx, dy)
			if !ok {
				i.touchState = touchStateNone
				break
			}
			i.touchDir = d
			i.touchState = touchStateSettled
		}
	case touchStateSettled:
		i.touchState = touchStateNone
	case touchStateInvalid:
		if len(ebiten.TouchIDs()) == 0 {
			i.touchState = touchStateNone
		}
	}
}
func ( i * Input ) Update ( ) { switch i . mouseState { case mouseStateNone : if ebiten . IsMouseButtonPressed ( ebiten . MouseButtonLeft ) { x , y := ebiten . CursorPosition ( ) i . mouseInitPosX = x i . mouseInitPosY = y i . mouseState = mouseStatePressing } case mouseStatePressing : if ! ebiten . IsMouseButtonPressed ( ebiten . MouseButtonLeft ) { x , y := ebiten . CursorPosition ( ) dx := x - i . mouseInitPosX dy := y - i . mouseInitPosY d , ok := vecToDir ( dx , dy ) if ! ok { i . mouseState = mouseStateNone break } i . mouseDir = d i . mouseState = mouseStateSettled } case mouseStateSettled : i . mouseState = mouseStateNone } switch i . touchState { case touchStateNone : ts := ebiten . TouchIDs ( ) if len ( ts ) == 1 { i . touchID = ts [ 0 ] x , y := ebiten . TouchPosition ( ts [ 0 ] ) i . touchInitPosX = x i . touchInitPosY = y i . touchLastPosX = x i . touchLastPosX = y i . touchState = touchStatePressing } case touchStatePressing : ts := ebiten . TouchIDs ( ) if len ( ts ) >= 2 { break } if len ( ts ) == 1 { if ts [ 0 ] != i . touchID { i . touchState = touchStateInvalid } else { x , y := ebiten . TouchPosition ( ts [ 0 ] ) i . touchLastPosX = x i . touchLastPosY = y } break } if len ( ts ) == 0 { dx := i . touchLastPosX - i . touchInitPosX dy := i . touchLastPosY - i . touchInitPosY d , ok := vecToDir ( dx , dy ) if ! ok { i . touchState = touchStateNone break } i . touchDir = d i . touchState = touchStateSettled } case touchStateSettled : i . touchState = touchStateNone case touchStateInvalid : if len ( ebiten . TouchIDs ( ) ) == 0 { i . touchState = touchStateNone } } }
// Update updates the current input states.
Update updates the current input states .