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