Draft: poop
This commit is contained in:
81
models/state.go
Normal file
81
models/state.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package models
|
||||
|
||||
import "fmt"
|
||||
|
||||
const (
|
||||
BlockNull byte = '0'
|
||||
BlockI byte = 'I'
|
||||
BlockJ byte = 'J'
|
||||
BlockL byte = 'L'
|
||||
BlockO byte = 'O'
|
||||
BlockS byte = 'S'
|
||||
BlockT byte = 'T'
|
||||
BlockZ byte = 'Z'
|
||||
)
|
||||
|
||||
const (
|
||||
RowCnt int = 20
|
||||
ColCnt int = 10
|
||||
)
|
||||
|
||||
type BlockState struct {
|
||||
Block byte `json:"b"`
|
||||
PosX int `json:"x"`
|
||||
PosY int `json:"y"`
|
||||
}
|
||||
|
||||
type ActiveBlockState struct {
|
||||
*BlockState `json:",inline"`
|
||||
|
||||
Direc int `json:"d"`
|
||||
}
|
||||
|
||||
type CompressedGameState struct {
|
||||
UserId int
|
||||
Tick int
|
||||
Score int
|
||||
Level int
|
||||
|
||||
RLE string
|
||||
Active ActiveBlockState
|
||||
}
|
||||
|
||||
type GameState struct {
|
||||
UserId int
|
||||
Tick int
|
||||
Score int
|
||||
Level int
|
||||
|
||||
Blocks [RowCnt][ColCnt]BlockState
|
||||
Active ActiveBlockState
|
||||
}
|
||||
|
||||
func (self CompressedGameState) Uncompress() (GameState, error) {
|
||||
var cnt int = 0
|
||||
var ch byte = '0'
|
||||
var blocks [RowCnt][ColCnt]BlockState
|
||||
for x := range blocks {
|
||||
for y := range blocks[x] {
|
||||
if cnt <= 0 {
|
||||
_, err := fmt.Sscanf(self.RLE, "%d%c", &cnt, &ch)
|
||||
if err != nil {
|
||||
return GameState{}, err
|
||||
}
|
||||
}
|
||||
blocks[x][y] = BlockState{
|
||||
Block: ch,
|
||||
PosX: x,
|
||||
PosY: y,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return GameState{
|
||||
UserId: self.UserId,
|
||||
Tick: self.Tick,
|
||||
Score: self.Score,
|
||||
Level: self.Level,
|
||||
Blocks: blocks,
|
||||
Active: self.Active,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user