You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
901 B
37 lines
901 B
3 years ago
|
package action
|
||
|
|
||
|
import (
|
||
|
"go.uber.org/zap/zapcore"
|
||
|
"hexmap-server/state"
|
||
|
)
|
||
|
|
||
|
// CellColor is the action sent when a cell of the map has been colored a different color.
|
||
|
type CellColor struct {
|
||
|
// At is the location of the cell in storage coordinates.
|
||
|
At state.StorageCoordinates `json:"at"`
|
||
|
// Color is the color the cell has been changed to.
|
||
|
Color state.HexColor `json:"color"`
|
||
|
}
|
||
|
|
||
|
func (c CellColor) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
|
||
|
err := encoder.AddObject("at", c.At)
|
||
|
encoder.AddString("color", c.Color.String())
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Apply sets the target cell's color, or returns ErrNoOp if it can't.
|
||
|
func (c CellColor) Apply(s *state.Synced) error {
|
||
|
if c.Color.A < 0xF {
|
||
|
return ErrNoTransparentColors
|
||
|
}
|
||
|
cell, err := s.Map.LineCells.GetCellAt(c.At)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if cell.Color == c.Color {
|
||
|
return ErrNoOp
|
||
|
}
|
||
|
cell.Color = c.Color
|
||
|
return nil
|
||
|
}
|