From 62d4c7771a509514de69db3a1476498228c3bb43 Mon Sep 17 00:00:00 2001 From: Lennart Buhl Date: Sun, 7 Feb 2016 17:02:32 +0100 Subject: [PATCH] canvasX method for determining the width of the loaded level --- cmd/server.go | 29 ++++++++++++++++++++--------- data/level.go | 17 +++++++++++++++++ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/cmd/server.go b/cmd/server.go index 24224ba..0514aeb 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -18,7 +18,7 @@ var cmdServer = &cobra.Command{ Long: `Runs Gosl as a server [TODO:] -gosl.json for configuration (Port/Adress, Level) +gosl.json for configuration (Port/Address, Level) `, // Run: } @@ -30,14 +30,15 @@ type goslClient struct { h int } +/* GLOBAL SERVER STATE */ var ( LevelFile string - World *data.Level + level *data.Level ServerPort int + TotalWidth int = 0 + clients map[int]goslClient = make(map[int]goslClient) + clientKeys []int = make([]int, 100) ) -var TotalWidth int = 0 -var clients map[int]goslClient = make(map[int]goslClient) -var clientKeys []int = make([]int, 100) func handleConn(conn *net.TCPConn) { var hs data.Handshake @@ -53,14 +54,14 @@ func handleConn(conn *net.TCPConn) { } func serveClients() { - World = data.LoadLevel(LevelFile) + level = data.LoadLevel(LevelFile) + log.Println("canvas X:", canvasX()) fCounter := 0 for { // while true for _, k := range clientKeys { id, client := k, clients[k] if id > 0 { - oFrame := World.GetFrame(0, client.w, fCounter) - + oFrame := level.GetFrame(0, client.w, fCounter) enc := gob.NewEncoder(client.con) err := enc.Encode(oFrame) if err != nil { @@ -79,7 +80,7 @@ func serveClients() { } } fCounter++ - time.Sleep(time.Second / time.Duration(World.FPS)) + time.Sleep(time.Second / time.Duration(level.FPS)) } } @@ -109,3 +110,13 @@ func init() { cmdServer.Flags().StringVarP(&LevelFile, "level", "l", "default.lvl", "Use specific levelfile") 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 +} diff --git a/data/level.go b/data/level.go index 67b06d3..bc8b74e 100644 --- a/data/level.go +++ b/data/level.go @@ -72,6 +72,23 @@ func (lvl *Level) Height() int { return max } +func (lvl *Level) Width() (max int) { + max = 0 + for _, lay := range lvl.Layers { + // lay is of type map[int]([][]rune) + for _, fra := range lay.Frames { + // fra is of type [][]rune + for _, fra2 := range fra { + // fra2 is of type []rune + if len(fra2) > max { + max = len(fra2) + } + } + } + } + return +} + func (lvl *Level) GetFrame(off, w, frame int) (ret *Frame) { //log.Println(ret) h := lvl.Height()