push für lennart :p
This commit is contained in:
parent
4cdad776e1
commit
679aaeebaa
|
@ -23,6 +23,8 @@ gosl.json for configuration (Port/Address, Level)
|
||||||
// Run:
|
// Run:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ClientOffset = 10
|
||||||
|
|
||||||
type goslClient struct {
|
type goslClient struct {
|
||||||
con *net.TCPConn
|
con *net.TCPConn
|
||||||
id int
|
id int
|
||||||
|
@ -36,11 +38,11 @@ var (
|
||||||
LevelFile string
|
LevelFile string
|
||||||
level *data.Level
|
level *data.Level
|
||||||
ServerPort int
|
ServerPort int
|
||||||
TotalWidth int = 0
|
TotalWidth int = 0
|
||||||
clients map[int]goslClient = make(map[int]goslClient)
|
clients map[int]*goslClient = make(map[int]*goslClient)
|
||||||
clientKeys []int = make([]int, 0)
|
clientKeys []int = make([]int, 0)
|
||||||
// big server canvas
|
// big server canvas
|
||||||
canvas [][]rune
|
//canvas [][]rune
|
||||||
canvasX int
|
canvasX int
|
||||||
frameCounter int = 0
|
frameCounter int = 0
|
||||||
)
|
)
|
||||||
|
@ -54,7 +56,7 @@ func handleConn(conn *net.TCPConn) {
|
||||||
// memorize client in server state
|
// memorize client in server state
|
||||||
clientKeys = append(clientKeys, hs.ID)
|
clientKeys = append(clientKeys, hs.ID)
|
||||||
sort.Ints(clientKeys)
|
sort.Ints(clientKeys)
|
||||||
clients[hs.ID] = goslClient{con: conn, id: hs.ID, w: hs.W, h: hs.H}
|
clients[hs.ID] = &goslClient{con: conn, id: hs.ID, w: hs.W, h: hs.H}
|
||||||
TotalWidth += hs.W
|
TotalWidth += hs.W
|
||||||
// reset server
|
// reset server
|
||||||
resetServer()
|
resetServer()
|
||||||
|
@ -62,19 +64,18 @@ func handleConn(conn *net.TCPConn) {
|
||||||
|
|
||||||
func resetServer() {
|
func resetServer() {
|
||||||
// adjust canvas width
|
// adjust canvas width
|
||||||
canvasX = 0
|
canvasX = -1 * ClientOffset
|
||||||
for _, k := range clientKeys {
|
for _, k := range clientKeys {
|
||||||
_, client := k, clients[k]
|
_, client := k, clients[k]
|
||||||
canvasX += client.w
|
canvasX += client.w + ClientOffset
|
||||||
}
|
}
|
||||||
canvasX += level.Width()
|
canvasX += level.Width()
|
||||||
// adjust client offsets
|
// adjust client offsets
|
||||||
off := 0
|
off := 0
|
||||||
for _, k := range clientKeys {
|
for _, k := range clientKeys {
|
||||||
_, client := k, clients[k]
|
clients[k].off = off
|
||||||
client.off = off
|
off += clients[k].w
|
||||||
off += client.w
|
off += ClientOffset
|
||||||
off += 10
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ func serveClients() {
|
||||||
for _, k := range clientKeys {
|
for _, k := range clientKeys {
|
||||||
id, client := k, clients[k]
|
id, client := k, clients[k]
|
||||||
if id > 0 {
|
if id > 0 {
|
||||||
oFrame := level.GetFrame(client.off, client.w, frameCounter)
|
oFrame := level.GetFrame(client.off, client.w, canvasX, frameCounter)
|
||||||
enc := gob.NewEncoder(client.con)
|
enc := gob.NewEncoder(client.con)
|
||||||
err := enc.Encode(oFrame)
|
err := enc.Encode(oFrame)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -100,8 +101,10 @@ func serveClients() {
|
||||||
idInKeys := sort.SearchInts(clientKeys, client.id)
|
idInKeys := sort.SearchInts(clientKeys, client.id)
|
||||||
clientKeys = append(clientKeys[:idInKeys], clientKeys[idInKeys+1:]...)
|
clientKeys = append(clientKeys[:idInKeys], clientKeys[idInKeys+1:]...)
|
||||||
//log.Println("AFTER remove: clients:", clients, " clientKeys:", clientKeys)
|
//log.Println("AFTER remove: clients:", clients, " clientKeys:", clientKeys)
|
||||||
|
resetServer()
|
||||||
}
|
}
|
||||||
//log.Println("ID:", id, "Client:", client)
|
//log.Println("ID:", id, "Client:", client)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
frameCounter++
|
frameCounter++
|
||||||
|
|
|
@ -17,7 +17,7 @@ const (
|
||||||
DIR_W // W 4 5 6 E
|
DIR_W // W 4 5 6 E
|
||||||
DIR_NONE // 1 2 3
|
DIR_NONE // 1 2 3
|
||||||
DIR_E // SW S SE
|
DIR_E // SW S SE
|
||||||
DIR_NW
|
DIR_NW // only 4,5,6 supported
|
||||||
DIR_N
|
DIR_N
|
||||||
DIR_NE
|
DIR_NE
|
||||||
)
|
)
|
||||||
|
@ -74,7 +74,19 @@ func (lvl *Level) Height() int {
|
||||||
return max
|
return max
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is a func also ;)
|
func (l *Layer) Width() (max int) {
|
||||||
|
max = 0
|
||||||
|
for _, frame := range l.Frames {
|
||||||
|
for _, row := range frame {
|
||||||
|
if len(row) > max {
|
||||||
|
max = len(row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Funzt so nicht: Layer liegen nicht zwingend übereinander
|
||||||
func (lvl *Level) Width() (max int) {
|
func (lvl *Level) Width() (max int) {
|
||||||
for _, lay := range lvl.Layers {
|
for _, lay := range lvl.Layers {
|
||||||
for _, fra := range lay.Frames {
|
for _, fra := range lay.Frames {
|
||||||
|
@ -89,15 +101,18 @@ func (lvl *Level) Width() (max int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//testcomment
|
//testcomment
|
||||||
func (lvl *Level) GetFrame(off, w, frameNo int) (ret *Frame) {
|
func (lvl *Level) GetFrame(o, w, maxW, frameNo int) (ret *Frame) {
|
||||||
h := lvl.Height()
|
h := lvl.Height()
|
||||||
|
|
||||||
ret = &Frame{
|
ret = &Frame{
|
||||||
W: w,
|
W: w,
|
||||||
H: h,
|
H: h,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generate an array by initializing a slice and …
|
||||||
var mdata = make([]rune, w*h)
|
var mdata = make([]rune, w*h)
|
||||||
for y := 0; y < h; y++ {
|
for y := 0; y < h; y++ {
|
||||||
|
// … let the resulting Frame data point into it:
|
||||||
ret.Data = append(ret.Data, mdata[y*w:(y+1)*w])
|
ret.Data = append(ret.Data, mdata[y*w:(y+1)*w])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,8 +120,29 @@ func (lvl *Level) GetFrame(off, w, frameNo int) (ret *Frame) {
|
||||||
if layer.Z == 0 {
|
if layer.Z == 0 {
|
||||||
for row := 0; row < h; row++ {
|
for row := 0; row < h; row++ {
|
||||||
//ret.Data = append(ret.Data, []rune{})
|
//ret.Data = append(ret.Data, []rune{})
|
||||||
|
|
||||||
|
// which frame of the layer to use
|
||||||
f := (frameNo % len(layer.Frames)) + 1
|
f := (frameNo % len(layer.Frames)) + 1
|
||||||
|
off := 0
|
||||||
|
switch layer.D {
|
||||||
|
case 4:
|
||||||
|
off = -(frameNo * layer.S) + o
|
||||||
|
case 6:
|
||||||
|
off = (frameNo * layer.S) + o
|
||||||
|
}
|
||||||
|
for off < 0 {
|
||||||
|
off += layer.Width()
|
||||||
|
}
|
||||||
|
off %= layer.Width()
|
||||||
if row <= len(layer.Frames[f]) {
|
if row <= len(layer.Frames[f]) {
|
||||||
|
r := layer.Frames[f][row][:]
|
||||||
|
for col := 0; col < w; col++ {
|
||||||
|
ro := (off + col) % layer.Width()
|
||||||
|
|
||||||
|
if (ro) < len(r) && string(r[ro]) != layer.T {
|
||||||
|
ret.Data[row][col] = r[ro]
|
||||||
|
}
|
||||||
|
}
|
||||||
//for col := 0
|
//for col := 0
|
||||||
//log.Println(len(layer.Frames[f][row]))
|
//log.Println(len(layer.Frames[f][row]))
|
||||||
//ret.Data[row] = append(ret.Data[row], (layer.Frames[f][row][off%w:])...)
|
//ret.Data[row] = append(ret.Data[row], (layer.Frames[f][row][off%w:])...)
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
"locomotive": {
|
"locomotive": {
|
||||||
"Z-Index": 0,
|
"Z-Index": 0,
|
||||||
"Direction": 6,
|
"Direction": 6,
|
||||||
"Speed": 2,
|
"Speed": 1,
|
||||||
"Repeat": false,
|
"Repeat": false,
|
||||||
"Transparent": "•"
|
"Transparent": "•"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user