clone

fifteen puzzle games for the terminal, with daily puzzles, weekly ladders and xp, built on bubble tea

bug/architecture-test-trim-path
puzzletea / games / nonogram / mouse.go
mouse.go 1.7K
1package nonogram23import "github.com/FelineStateMachine/puzzletea/game"45func (m *Model) screenToGrid(screenX, screenY int, includeSeparators bool) (col, row int, ok bool) {6 ox, oy := m.cachedGridOrigin()7 board := buildBoardBlock(*m)8 return game.DynamicGridScreenToCell(9 board.Metrics,10 ox,11 oy,12 screenX,13 screenY,14 includeSeparators,15 )16}1718func (m *Model) cachedGridOrigin() (x, y int) {19 if m.originValid {20 return m.originX, m.originY21 }2223 x, y = m.gridOrigin()24 m.originX, m.originY = x, y25 m.originValid = true26 return x, y27}2829func (m *Model) gridOrigin() (x, y int) {30 title := game.TitleBarView("Nonogram", m.modeTitle, m.solved)31 board := buildBoardBlock(*m)32 x, y = game.DynamicGridOrigin(m.termWidth, m.termHeight, m.View(), title, board.Block)33 return x + board.HintWidth, y + board.HintHeight34}3536func (m *Model) lockedDragTarget(rawCol, rawRow int) (col, row int, ok bool) {37 if m.dragging == 0 {38 return 0, 0, false39 }4041 if m.dragAxis == dragAxisHorizontal {42 return rawCol, m.dragStartRow, true43 }44 if m.dragAxis == dragAxisVertical {45 return m.dragStartCol, rawRow, true46 }4748 colDelta := abs(rawCol - m.dragStartCol)49 rowDelta := abs(rawRow - m.dragStartRow)5051 switch {52 case colDelta == 0 && rowDelta == 0:53 return m.dragStartCol, m.dragStartRow, false54 case rowDelta == 0:55 m.dragAxis = dragAxisHorizontal56 return rawCol, m.dragStartRow, true57 case colDelta == 0:58 m.dragAxis = dragAxisVertical59 return m.dragStartCol, rawRow, true60 case colDelta > rowDelta:61 m.dragAxis = dragAxisHorizontal62 return rawCol, m.dragStartRow, true63 case rowDelta > colDelta:64 m.dragAxis = dragAxisVertical65 return m.dragStartCol, rawRow, true66 default:67 return m.dragStartCol, m.dragStartRow, false68 }69}7071func abs(v int) int {72 if v < 0 {73 return -v74 }75 return v76}