162 lines
3.0 KiB
Go
162 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/gdamore/tcell"
|
|
)
|
|
|
|
// ProcessEventKey process the key input event
|
|
func (engine *Engine) ProcessEventKey(eventKey *tcell.EventKey) {
|
|
if eventKey.Key() == tcell.KeyCtrlL {
|
|
// Ctrl l (lower case L) to log stack trace
|
|
buffer := make([]byte, 1<<16)
|
|
length := runtime.Stack(buffer, true)
|
|
logger.Println("Stack trace")
|
|
logger.Println(string(buffer[:length]))
|
|
return
|
|
}
|
|
|
|
switch engine.mode {
|
|
|
|
// edit
|
|
case engineModeEdit:
|
|
|
|
if edit.boardSize {
|
|
switch eventKey.Key() {
|
|
case tcell.KeyUp:
|
|
edit.BoardHeightIncrement()
|
|
case tcell.KeyDown:
|
|
edit.BoardHeightDecrement()
|
|
case tcell.KeyLeft:
|
|
edit.BoardWidthDecrement()
|
|
case tcell.KeyRight:
|
|
edit.BoardWidthIncrement()
|
|
case tcell.KeyRune:
|
|
if eventKey.Rune() == 'q' {
|
|
edit.ChangeBoardSize()
|
|
}
|
|
}
|
|
} else {
|
|
switch eventKey.Key() {
|
|
case tcell.KeyUp:
|
|
edit.CursorUp()
|
|
case tcell.KeyDown:
|
|
edit.CursorDown()
|
|
case tcell.KeyLeft:
|
|
edit.CursorLeft()
|
|
case tcell.KeyRight:
|
|
edit.CursorRight()
|
|
case tcell.KeyCtrlB:
|
|
edit.BoardSizeMode()
|
|
case tcell.KeyCtrlS:
|
|
edit.SaveBoard()
|
|
case tcell.KeyCtrlN:
|
|
edit.SaveBoardNew()
|
|
case tcell.KeyCtrlK:
|
|
edit.DeleteBoard()
|
|
case tcell.KeyCtrlO:
|
|
edit.EmptyBoard()
|
|
case tcell.KeyCtrlQ, tcell.KeyCtrlC:
|
|
engine.DisableEditMode()
|
|
case tcell.KeyRune:
|
|
switch eventKey.Rune() {
|
|
case 'c':
|
|
edit.SetColor(colorCyan)
|
|
case 'b':
|
|
edit.SetColor(colorBlue)
|
|
case 'w':
|
|
edit.SetColor(colorWhite)
|
|
case 'e':
|
|
edit.SetColor(colorYellow)
|
|
case 'g':
|
|
edit.SetColor(colorGreen)
|
|
case 'a':
|
|
edit.SetColor(colorMagenta)
|
|
case 'r':
|
|
edit.SetColor(colorRed)
|
|
case 'f':
|
|
edit.SetColor(colorBlank)
|
|
case 'z':
|
|
edit.RotateLeft()
|
|
case 'x':
|
|
edit.RotateRight()
|
|
}
|
|
}
|
|
}
|
|
|
|
// game over
|
|
case engineModeGameOver, engineModePreview:
|
|
|
|
switch eventKey.Key() {
|
|
case tcell.KeyCtrlC:
|
|
engine.Stop()
|
|
case tcell.KeyLeft:
|
|
board.PreviousBoard()
|
|
case tcell.KeyRight:
|
|
board.NextBoard()
|
|
case tcell.KeyCtrlE:
|
|
engine.EnabledEditMode()
|
|
case tcell.KeyRune:
|
|
switch eventKey.Rune() {
|
|
case 'q':
|
|
engine.Stop()
|
|
case ' ':
|
|
engine.NewGame()
|
|
}
|
|
}
|
|
|
|
// paused
|
|
case engineModePaused:
|
|
|
|
switch eventKey.Rune() {
|
|
case 'q':
|
|
engine.Stop()
|
|
case 'p':
|
|
engine.UnPause()
|
|
}
|
|
|
|
// run with AI
|
|
case engineModeRunWithAI:
|
|
|
|
switch eventKey.Rune() {
|
|
case 'q':
|
|
engine.Stop()
|
|
case 'p':
|
|
engine.Pause()
|
|
case 'i':
|
|
engine.DisableAi()
|
|
}
|
|
|
|
// run
|
|
case engineModeRun:
|
|
|
|
switch eventKey.Key() {
|
|
case tcell.KeyUp:
|
|
board.MinoDrop()
|
|
case tcell.KeyDown:
|
|
board.MinoMoveDown()
|
|
case tcell.KeyLeft:
|
|
board.MinoMoveLeft()
|
|
case tcell.KeyRight:
|
|
board.MinoMoveRight()
|
|
case tcell.KeyRune:
|
|
switch eventKey.Rune() {
|
|
case 'q':
|
|
engine.Stop()
|
|
case ' ':
|
|
board.MinoDrop()
|
|
case 'z':
|
|
board.MinoRotateLeft()
|
|
case 'x':
|
|
board.MinoRotateRight()
|
|
case 'p':
|
|
engine.Pause()
|
|
case 'i':
|
|
engine.EnabledAi()
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|