Enable movement ; Fix locomotive frames
This commit is contained in:
parent
62d4c7771a
commit
0b1e623357
|
@ -28,6 +28,7 @@ type goslClient struct {
|
||||||
id int
|
id int
|
||||||
w int
|
w int
|
||||||
h int
|
h int
|
||||||
|
off int
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GLOBAL SERVER STATE */
|
/* GLOBAL SERVER STATE */
|
||||||
|
@ -37,7 +38,11 @@ var (
|
||||||
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, 100)
|
clientKeys []int = make([]int, 0)
|
||||||
|
// big server canvas
|
||||||
|
canvas [][]rune
|
||||||
|
canvasX int
|
||||||
|
frameCounter int = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
func handleConn(conn *net.TCPConn) {
|
func handleConn(conn *net.TCPConn) {
|
||||||
|
@ -46,22 +51,40 @@ func handleConn(conn *net.TCPConn) {
|
||||||
dec := gob.NewDecoder(conn)
|
dec := gob.NewDecoder(conn)
|
||||||
dec.Decode(&hs) // decode handshake
|
dec.Decode(&hs) // decode handshake
|
||||||
log.Println("Got client! ID:", hs.ID, "dimensions:", hs.W, hs.H)
|
log.Println("Got client! ID:", hs.ID, "dimensions:", hs.W, hs.H)
|
||||||
|
// 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
|
||||||
// conn.Close()
|
// reset server
|
||||||
|
resetServer()
|
||||||
|
}
|
||||||
|
|
||||||
|
func resetServer() {
|
||||||
|
// adjust canvas width
|
||||||
|
canvasX = 0
|
||||||
|
for _, k := range clientKeys {
|
||||||
|
_, client := k, clients[k]
|
||||||
|
canvasX += client.w
|
||||||
|
}
|
||||||
|
canvasX += level.Width()
|
||||||
|
// adjust client offsets
|
||||||
|
off := 0
|
||||||
|
for _, k := range clientKeys {
|
||||||
|
_, client := k, clients[k]
|
||||||
|
client.off = off
|
||||||
|
off += client.w
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func serveClients() {
|
func serveClients() {
|
||||||
level = data.LoadLevel(LevelFile)
|
level = data.LoadLevel(LevelFile)
|
||||||
log.Println("canvas X:", canvasX())
|
frameCounter = 0
|
||||||
fCounter := 0
|
|
||||||
for { // while true
|
for { // while true
|
||||||
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(0, client.w, fCounter)
|
oFrame := level.GetFrame(0+frameCounter, client.w, 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 {
|
||||||
|
@ -79,13 +102,13 @@ func serveClients() {
|
||||||
//log.Println("ID:", id, "Client:", client)
|
//log.Println("ID:", id, "Client:", client)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fCounter++
|
frameCounter++
|
||||||
time.Sleep(time.Second / time.Duration(level.FPS))
|
time.Sleep(time.Second / time.Duration(level.FPS))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func runServer(cmd *cobra.Command, args []string) {
|
func runServer(cmd *cobra.Command, args []string) {
|
||||||
log.Println("running server on port", ServerPort)
|
log.Println("Running server on port", ServerPort)
|
||||||
listener, err := net.ListenTCP("tcp", &net.TCPAddr{Port: ServerPort})
|
listener, err := net.ListenTCP("tcp", &net.TCPAddr{Port: ServerPort})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
@ -110,13 +133,3 @@ func init() {
|
||||||
cmdServer.Flags().StringVarP(&LevelFile, "level", "l", "default.lvl", "Use specific levelfile")
|
cmdServer.Flags().StringVarP(&LevelFile, "level", "l", "default.lvl", "Use specific levelfile")
|
||||||
cmdServer.Flags().IntVarP(&ServerPort, "port", "p", 8090, "Run server on this port")
|
cmdServer.Flags().IntVarP(&ServerPort, "port", "p", 8090, "Run server on this port")
|
||||||
}
|
}
|
||||||
|
|
||||||
func canvasX() (x int) {
|
|
||||||
x = 0
|
|
||||||
for _, k := range clientKeys {
|
|
||||||
_, client := k, clients[k]
|
|
||||||
x += client.w
|
|
||||||
}
|
|
||||||
x += level.Width()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
|
@ -73,13 +73,9 @@ func (lvl *Level) Height() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lvl *Level) Width() (max int) {
|
func (lvl *Level) Width() (max int) {
|
||||||
max = 0
|
|
||||||
for _, lay := range lvl.Layers {
|
for _, lay := range lvl.Layers {
|
||||||
// lay is of type map[int]([][]rune)
|
|
||||||
for _, fra := range lay.Frames {
|
for _, fra := range lay.Frames {
|
||||||
// fra is of type [][]rune
|
|
||||||
for _, fra2 := range fra {
|
for _, fra2 := range fra {
|
||||||
// fra2 is of type []rune
|
|
||||||
if len(fra2) > max {
|
if len(fra2) > max {
|
||||||
max = len(fra2)
|
max = len(fra2)
|
||||||
}
|
}
|
||||||
|
@ -89,8 +85,7 @@ func (lvl *Level) Width() (max int) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lvl *Level) GetFrame(off, w, frame int) (ret *Frame) {
|
func (lvl *Level) GetFrame(off, w, frameNo int) (ret *Frame) {
|
||||||
//log.Println(ret)
|
|
||||||
h := lvl.Height()
|
h := lvl.Height()
|
||||||
|
|
||||||
ret = &Frame{
|
ret = &Frame{
|
||||||
|
@ -98,13 +93,14 @@ func (lvl *Level) GetFrame(off, w, frame int) (ret *Frame) {
|
||||||
H: h,
|
H: h,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, l := range lvl.Layers {
|
for _, layer := range lvl.Layers {
|
||||||
if l.Z == 0 {
|
if layer.Z == 0 {
|
||||||
for i := 0; i < h; i++ {
|
for row := 0; row < h; row++ {
|
||||||
ret.Data = append(ret.Data, []rune{})
|
ret.Data = append(ret.Data, []rune{})
|
||||||
f := (frame % len(l.Frames)) + 1
|
f := (frameNo % len(layer.Frames)) + 1
|
||||||
if i <= len(l.Frames[f]) {
|
if row <= len(layer.Frames[f]) {
|
||||||
ret.Data[i] = append(ret.Data[i], l.Frames[f][i]...)
|
//log.Println(len(layer.Frames[f][row]))
|
||||||
|
ret.Data[row] = append(ret.Data[row], (layer.Frames[f][row][off:])...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user