Skip to content

Commit

Permalink
Merge branch 'master' into rob/go-hotreload
Browse files Browse the repository at this point in the history
  • Loading branch information
brian-nguyen committed Jun 4, 2018
2 parents 30fe3b8 + 9070d8a commit 9b87ea4
Show file tree
Hide file tree
Showing 7 changed files with 218 additions and 164 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ before_install:
- cd $TRAVIS_BUILD_DIR/client
- npm install eslint --silent
- go get -u github.com/mattn/goveralls
- go get -u github.com/golang/dep/cmd/dep
- curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
- cd $TRAVIS_BUILD_DIR/server
- dep ensure
- dep ensure -vendor-only
- if [ ! -f "bin/gometalinter" ]; then curl -sfL https://install.goreleaser.com/github.com/alecthomas/gometalinter.sh | bash; fi

install: true
Expand Down
309 changes: 168 additions & 141 deletions client/App.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion server/Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion server/Gopkg.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Gopkg.toml example
#
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
Expand Down
19 changes: 16 additions & 3 deletions server/arena/arena.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,10 @@ func (a *Arena) UpdatePositions() {
junk.UpdatePosition(a.Height, a.Width)
}
for _, player := range a.Players {
player.UpdatePosition(a.Height, a.Width)
// check whether player has been spawned
if player.Name != "" {
player.UpdatePosition(a.Height, a.Width)
}
}
}

Expand All @@ -90,13 +93,23 @@ func (a *Arena) GetState() *models.UpdateMessage {
}

// AddPlayer adds a new player to the arena
func (a *Arena) AddPlayer(id string, n string, ws *websocket.Conn) error {
// player has no position or name until spawned
// TODO player has no color until spawned
func (a *Arena) AddPlayer(id string, ws *websocket.Conn) error {
color, err := a.generateRandomColor()
if err != nil {
return err
}
a.Players[id] = models.CreatePlayer(id, "", models.Position{}, color, ws)
return nil
}

// SpawnPlayer spawns the player with a position on the map
// TODO choose color here as well
func (a *Arena) SpawnPlayer(id string, name string) error {
position := a.generateCoordinate(models.PlayerRadius)
a.Players[id] = models.CreatePlayer(id, n, position, color, ws)
a.Players[id].Position = position
a.Players[id].Name = name
return nil
}

Expand Down
6 changes: 3 additions & 3 deletions server/arena/arena_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ var (

func CreateArenaWithPlayer(p models.Position) *Arena {
a := CreateArena(testHeight, testWidth, 0, 0)
a.AddPlayer("test", "", nil)
a.AddPlayer("test", nil)
testPlayer := a.Players["test"]
testPlayer.Position = p
testPlayer.Velocity = testVelocity
Expand Down Expand Up @@ -51,7 +51,7 @@ func TestAddPlayer(t *testing.T) {
t.Run("TestAddPlayer", func(t *testing.T) {

name := fmt.Sprintf("player%d", i)
err := a.AddPlayer(name, name, nil)
err := a.AddPlayer(name, nil)
if err != nil {
t.Errorf("Failed to add player: %v", err)
}
Expand Down Expand Up @@ -110,7 +110,7 @@ func TestPlayerToPlayerCollisions(t *testing.T) {
t.Run("Player to Player collision", func(t *testing.T) {
a := CreateArenaWithPlayer(quarterPosition)

a.AddPlayer(tc.otherPlayer, "", nil)
a.AddPlayer(tc.otherPlayer, nil)
a.Players[tc.otherPlayer].Position = tc.testPosition

a.playerCollisions()
Expand Down
40 changes: 27 additions & 13 deletions server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,19 @@ func (g *Game) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
defer ws.Close()

name := r.URL.Query().Get("name")
var initialMsg models.Message
id := models.GenUniqueID()

err = g.Arena.AddPlayer(id, ws)
if err != nil {
log.Printf("Error adding player:\n%v", err)
} else {
initialMsg = models.Message{
Type: "connect",
Data: id,
}
MessageChannel <- initialMsg
}
for {
var msg models.Message
err := ws.ReadJSON(&msg)
Expand All @@ -50,28 +60,32 @@ func (g *Game) ServeHTTP(w http.ResponseWriter, r *http.Request) {
delete(g.Arena.Players, id)
break
}

switch msg.Type {
case "spawn":

var spawn models.SpawnHandlerMessage
err = json.Unmarshal([]byte(msg.Data.(string)), &spawn)
if err != nil {
log.Printf("%v\n", err)
continue
}

err := g.Arena.AddPlayer(id, name, ws)
err := g.Arena.SpawnPlayer(id, spawn.Name)
if err != nil {
log.Printf("Error adding player:\n%v", err)
log.Printf("Error spawning player:\n%v", err)
continue
}

initialMsg := models.Message{
Type: "initial",
Data: id,
case "reconnect":
err = g.Arena.AddPlayer(id, ws)
if err != nil {
log.Printf("Error adding player:\n%v", err)
} else {
connectMsg := models.Message{
Type: "connect",
Data: id,
}
MessageChannel <- connectMsg
}
MessageChannel <- initialMsg

case "keyHandler":
var kh models.KeyHandlerMessage
err = json.Unmarshal([]byte(msg.Data.(string)), &kh)
Expand Down Expand Up @@ -129,7 +143,7 @@ func messageEmitter(g *Game) {
msg := <-MessageChannel

switch msg.Type {
case "initial":
case "connect":
id := msg.Data.(string)
p := g.Arena.Players[id]

Expand All @@ -138,7 +152,7 @@ func messageEmitter(g *Game) {
Data: models.ConnectionMessage{
ArenaWidth: g.Arena.Width,
ArenaHeight: g.Arena.Height,
PlayerID: p.Color,
PlayerID: id,
},
}

Expand Down

0 comments on commit 9b87ea4

Please sign in to comment.