last_light/game/state/dialog_state.go

50 lines
1.1 KiB
Go

package state
import (
"mvvasilev/last_light/engine"
"mvvasilev/last_light/game/input"
"mvvasilev/last_light/game/turns"
"mvvasilev/last_light/game/ui"
)
type DialogState struct {
inputSystem *input.InputSystem
turnSystem *turns.TurnSystem
prevState GameState
dialog *ui.UIDialog
returnToPreviousState bool
}
func CreateDialogState(inputSystem *input.InputSystem, turnSystem *turns.TurnSystem, dialog *ui.UIDialog, prevState GameState) *DialogState {
return &DialogState{
inputSystem: inputSystem,
turnSystem: turnSystem,
prevState: prevState,
dialog: dialog,
returnToPreviousState: false,
}
}
func (s *DialogState) InputContext() input.Context {
return input.InputContext_Menu
}
func (ds *DialogState) OnTick(dt int64) GameState {
if ds.inputSystem.NextAction() == input.InputAction_Menu_Select {
ds.returnToPreviousState = true
ds.dialog.Select()
}
if ds.returnToPreviousState {
return ds.prevState
}
return ds
}
func (ds *DialogState) CollectDrawables() []engine.Drawable {
return append(ds.prevState.CollectDrawables(), ds.dialog)
}