Implement server-side movement
This commit is contained in:
		@ -1,7 +1,55 @@
 | 
			
		||||
package entities
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/heroiclabs/nakama-common/runtime"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// PlayerEntity is the go struct representing the player's location
 | 
			
		||||
type PlayerEntity struct {
 | 
			
		||||
	X int
 | 
			
		||||
	Y int
 | 
			
		||||
	Presence runtime.Presence
 | 
			
		||||
	X        float64
 | 
			
		||||
	Y        float64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PlayerPosResponse struct that represents client data
 | 
			
		||||
type PlayerPosResponse struct {
 | 
			
		||||
	X string
 | 
			
		||||
	Y string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ParsePositionRequest parses data from client
 | 
			
		||||
func (p *PlayerEntity) ParsePositionRequest(data []byte) (PlayerPosResponse, error) {
 | 
			
		||||
	var response PlayerPosResponse
 | 
			
		||||
	err := json.Unmarshal(data, &response)
 | 
			
		||||
	return response, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//UpdateBasedOnResponse updates the player object based on a response object
 | 
			
		||||
func (p *PlayerEntity) UpdateBasedOnResponse(response PlayerPosResponse) error {
 | 
			
		||||
	if fx, err := strconv.ParseFloat(response.X, 64); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	} else {
 | 
			
		||||
		p.X = fx
 | 
			
		||||
		if fy, err := strconv.ParseFloat(response.Y, 64); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		} else {
 | 
			
		||||
			p.Y = fy
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user