Send player state
This commit is contained in:
@ -20,6 +20,8 @@ const (
|
|||||||
OpCodeTileUpdate = 1
|
OpCodeTileUpdate = 1
|
||||||
// OpCodeUpdatePosition is used for player position updates
|
// OpCodeUpdatePosition is used for player position updates
|
||||||
OpCodeUpdatePosition = 2
|
OpCodeUpdatePosition = 2
|
||||||
|
// OpCodePlayerState is for player object updates
|
||||||
|
OpCodePlayerState = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
// Match is the object registered
|
// Match is the object registered
|
||||||
@ -102,18 +104,24 @@ func (m *Match) MatchJoin(ctx context.Context, logger runtime.Logger, db *sql.DB
|
|||||||
// Add presence to map
|
// Add presence to map
|
||||||
mState.presences[precense.GetUserId()] = precense
|
mState.presences[precense.GetUserId()] = precense
|
||||||
|
|
||||||
player := entities.PlayerEntity{
|
player, loadPlayerErr := entities.LoadPlayer(ctx, nk, precense)
|
||||||
X: 16,
|
if loadPlayerErr != nil {
|
||||||
Y: 16,
|
logger.Error(loadPlayerErr.Error())
|
||||||
Presence: precense,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
player.X = 16
|
||||||
|
player.Y = 16
|
||||||
|
|
||||||
if jsonObj, err := player.GetPosJSON(); err != nil {
|
if jsonObj, err := player.GetPosJSON(); err != nil {
|
||||||
logger.Error(err.Error())
|
logger.Error(err.Error())
|
||||||
} else {
|
} else {
|
||||||
if sendErr := dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObj, []runtime.Presence{precense}, player.Presence, true); sendErr != nil {
|
if sendErr := dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObj, []runtime.Presence{precense}, player.Presence, true); sendErr != nil {
|
||||||
logger.Error(sendErr.Error())
|
logger.Error(sendErr.Error())
|
||||||
}
|
}
|
||||||
|
stateJSON, _ := player.GetStateJSON()
|
||||||
|
if sendErr := dispatcher.BroadcastMessage(OpCodePlayerState, stateJSON, mState.GetPrecenseList(), player.Presence, true); sendErr != nil {
|
||||||
|
logger.Error(sendErr.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mState.players[precense.GetUserId()] = player
|
mState.players[precense.GetUserId()] = player
|
||||||
@ -175,7 +183,6 @@ func (m *Match) MatchLoop(ctx context.Context, logger runtime.Logger, db *sql.DB
|
|||||||
player.UpdateBasedOnResponse(response)
|
player.UpdateBasedOnResponse(response)
|
||||||
if jsonObject, err := player.GetPosJSON(); err == nil {
|
if jsonObject, err := player.GetPosJSON(); err == nil {
|
||||||
dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObject, mState.GetPrecenseList(), player.Presence, false)
|
dispatcher.BroadcastMessage(OpCodeUpdatePosition, jsonObject, mState.GetPrecenseList(), player.Presence, false)
|
||||||
logger.Info("Yes")
|
|
||||||
} else {
|
} else {
|
||||||
logger.Error(fmt.Sprintf("Failed to get player json: %s", err.Error))
|
logger.Error(fmt.Sprintf("Failed to get player json: %s", err.Error))
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,17 @@ func LoadPlayer(ctx context.Context, nk runtime.NakamaModule, presence runtime.P
|
|||||||
return player, nil
|
return player, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPosJSON returns the player's position as a JSON object
|
||||||
|
func (p *PlayerEntity) GetPosJSON() ([]byte, error) {
|
||||||
|
playerMap := map[string]string{
|
||||||
|
"player": p.Presence.GetUserId(),
|
||||||
|
"x": fmt.Sprintf("%f", p.X),
|
||||||
|
"y": fmt.Sprintf("%f", p.Y),
|
||||||
|
}
|
||||||
|
jsonData, err := json.Marshal(playerMap)
|
||||||
|
return jsonData, err
|
||||||
|
}
|
||||||
|
|
||||||
// Save passes the precensce id to SaveUserID
|
// Save passes the precensce id to SaveUserID
|
||||||
func (p *PlayerEntity) Save(ctx context.Context, nk runtime.NakamaModule) error {
|
func (p *PlayerEntity) Save(ctx context.Context, nk runtime.NakamaModule) error {
|
||||||
|
|
||||||
@ -141,12 +152,12 @@ func (p *PlayerEntity) UpdateBasedOnResponse(response PlayerPosResponse) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPosJSON returns the player's position as a JSON object
|
// GetStateJSON builds a json object for player state
|
||||||
func (p *PlayerEntity) GetPosJSON() ([]byte, error) {
|
func (p *PlayerEntity) GetStateJSON() ([]byte, error) {
|
||||||
playerMap := map[string]string{
|
playerMap := map[string]string{
|
||||||
"player": p.Presence.GetUserId(),
|
"player": p.Presence.GetUserId(),
|
||||||
"x": fmt.Sprintf("%f", p.X),
|
"name": p.Name,
|
||||||
"y": fmt.Sprintf("%f", p.Y),
|
"faction": strconv.Itoa(int(p.Faction)),
|
||||||
}
|
}
|
||||||
jsonData, err := json.Marshal(playerMap)
|
jsonData, err := json.Marshal(playerMap)
|
||||||
return jsonData, err
|
return jsonData, err
|
||||||
|
Reference in New Issue
Block a user