canvasX method for determining the width of the loaded level

This commit is contained in:
Lennart Buhl 2016-02-07 17:02:32 +01:00
parent 1fabcfb3f4
commit 62d4c7771a
2 changed files with 37 additions and 9 deletions

View File

@ -18,7 +18,7 @@ var cmdServer = &cobra.Command{
Long: `Runs Gosl as a server Long: `Runs Gosl as a server
[TODO:] [TODO:]
gosl.json for configuration (Port/Adress, Level) gosl.json for configuration (Port/Address, Level)
`, `,
// Run: // Run:
} }
@ -30,14 +30,15 @@ type goslClient struct {
h int h int
} }
/* GLOBAL SERVER STATE */
var ( var (
LevelFile string LevelFile string
World *data.Level level *data.Level
ServerPort int 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) { func handleConn(conn *net.TCPConn) {
var hs data.Handshake var hs data.Handshake
@ -53,14 +54,14 @@ func handleConn(conn *net.TCPConn) {
} }
func serveClients() { func serveClients() {
World = data.LoadLevel(LevelFile) level = data.LoadLevel(LevelFile)
log.Println("canvas X:", canvasX())
fCounter := 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 := World.GetFrame(0, client.w, fCounter) oFrame := level.GetFrame(0, client.w, fCounter)
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,7 +80,7 @@ func serveClients() {
} }
} }
fCounter++ 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().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
}

View File

@ -72,6 +72,23 @@ func (lvl *Level) Height() int {
return max 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) { func (lvl *Level) GetFrame(off, w, frame int) (ret *Frame) {
//log.Println(ret) //log.Println(ret)
h := lvl.Height() h := lvl.Height()