101 lines
2.8 KiB
Go
101 lines
2.8 KiB
Go
package board
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// NOTES STRUCTURE //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
type Notes struct {
|
|
numbers []int
|
|
}
|
|
|
|
func (n *Notes) Add(field *Field, cell *Cell, note int, trigger string, marks []Mark) {
|
|
for _, existing := range n.numbers {
|
|
if existing == note {
|
|
return // Note already exists
|
|
}
|
|
}
|
|
field.changes = append(field.changes, Change{
|
|
Cell: cell,
|
|
marks: marks,
|
|
action: ActionSetNote,
|
|
value: note,
|
|
from: 0,
|
|
triggerdBy: trigger,
|
|
})
|
|
n.numbers = append(n.numbers, note)
|
|
}
|
|
|
|
func (n *Notes) Remove(field *Field, cell *Cell, note int, trigger string, marks []Mark) {
|
|
for i, existing := range n.numbers {
|
|
if existing == note {
|
|
field.changes = append(field.changes, Change{
|
|
Cell: cell,
|
|
marks: marks,
|
|
action: ActionRemoveNote,
|
|
value: 0,
|
|
from: note,
|
|
triggerdBy: trigger,
|
|
})
|
|
|
|
n.numbers = append(n.numbers[:i], n.numbers[i+1:]...)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
// CELL STRUCTURE //
|
|
// ────────────────────────────────────────────────────────────────────────────── //
|
|
|
|
type Cell struct {
|
|
number int
|
|
Notes *Notes
|
|
Pos *Position
|
|
}
|
|
|
|
func (c *Cell) SetNumber(field *Field, n int, trigger string, marks []Mark) {
|
|
if c.number == n {
|
|
return
|
|
}
|
|
|
|
if field == nil {
|
|
return
|
|
}
|
|
|
|
if n <= 0 || n > field.rows || n > field.columns {
|
|
return
|
|
}
|
|
|
|
field.changes = append(field.changes, Change{
|
|
Cell: c,
|
|
marks: marks,
|
|
action: ActionSetNumber,
|
|
value: n,
|
|
from: c.number,
|
|
triggerdBy: trigger,
|
|
})
|
|
|
|
c.number = n
|
|
}
|
|
|
|
func (c *Cell) RemoveNumber(field *Field, trigger string, marks []Mark) {
|
|
if c.number == 0 {
|
|
return
|
|
}
|
|
|
|
if field == nil {
|
|
return
|
|
}
|
|
|
|
field.changes = append(field.changes, Change{
|
|
action: ActionSetNumber,
|
|
Cell: c,
|
|
value: 0,
|
|
from: c.number,
|
|
marks: marks,
|
|
triggerdBy: trigger,
|
|
})
|
|
|
|
c.number = 0
|
|
}
|