summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/snake_controller.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-12-30 11:34:01 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-12-30 12:18:59 +1100
commitaf5b3be2861518737482f474e3b5ff6c2c551720 (patch)
tree5933a1254d7ad1d76c99ec302ed316d9865b772a /pkg/gui/controllers/snake_controller.go
parent81281a49b21c5d708e2b5ed70dc5ca5a27ea6db7 (diff)
integrate snake game into lazygit
Diffstat (limited to 'pkg/gui/controllers/snake_controller.go')
-rw-r--r--pkg/gui/controllers/snake_controller.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/pkg/gui/controllers/snake_controller.go b/pkg/gui/controllers/snake_controller.go
new file mode 100644
index 000000000..4217878e3
--- /dev/null
+++ b/pkg/gui/controllers/snake_controller.go
@@ -0,0 +1,68 @@
+package controllers
+
+import (
+ "github.com/jesseduffield/lazygit/pkg/gui/types"
+ "github.com/jesseduffield/lazygit/pkg/snake"
+)
+
+type SnakeController struct {
+ baseController
+ *controllerCommon
+
+ getGame func() *snake.Game
+}
+
+var _ types.IController = &SnakeController{}
+
+func NewSnakeController(
+ common *controllerCommon,
+ getGame func() *snake.Game,
+) *SnakeController {
+ return &SnakeController{
+ baseController: baseController{},
+ controllerCommon: common,
+ getGame: getGame,
+ }
+}
+
+func (self *SnakeController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding {
+ bindings := []*types.Binding{
+ {
+ Key: opts.GetKey(opts.Config.Universal.NextItem),
+ Handler: self.SetDirection(snake.Down),
+ },
+ {
+ Key: opts.GetKey(opts.Config.Universal.PrevItem),
+ Handler: self.SetDirection(snake.Up),
+ },
+ {
+ Key: opts.GetKey(opts.Config.Universal.PrevBlock),
+ Handler: self.SetDirection(snake.Left),
+ },
+ {
+ Key: opts.GetKey(opts.Config.Universal.NextBlock),
+ Handler: self.SetDirection(snake.Right),
+ },
+ {
+ Key: opts.GetKey(opts.Config.Universal.Return),
+ Handler: self.Escape,
+ },
+ }
+
+ return bindings
+}
+
+func (self *SnakeController) Context() types.Context {
+ return self.contexts.Snake
+}
+
+func (self *SnakeController) SetDirection(direction snake.Direction) func() error {
+ return func() error {
+ self.getGame().SetDirection(direction)
+ return nil
+ }
+}
+
+func (self *SnakeController) Escape() error {
+ return self.c.PushContext(self.contexts.Submodules)
+}