var deserialisedJson = JsonSerializer.Deserialize<UDPValue>(packet.GetStringFromUtf8());
if (deserialisedJson != null && deserialisedJson.landmarks != null && deserialisedJson.landmarks.Count > 0)
{
for (int i = 0; i < Math.Min(deserialisedJson.landmarks.Count, _balls.Count); i++)
{
var landmark = deserialisedJson.landmarks[i];
if (landmark.TryGetValue("x", out var xObj) &&
landmark.TryGetValue("y", out var yObj) &&
landmark.TryGetValue("z", out var zObj))
{
float x = Convert.ToSingle(xObj);
float y = Convert.ToSingle(yObj);
float z = Convert.ToSingle(zObj);
GD.Print($"Landmark {i}: x={x}, y={y}, z={z}");
float scaledX = x * deserialisedJson.width;
float scaledY = y * deserialisedJson.height;
GD.Print($"Scaled Coordinates for Ball {i}: x={scaledX}, y={scaledY}");
Godot.Vector3 newPosition = _camera.ProjectPosition(new Godot.Vector2(scaledX, scaledY), z);
GD.Print($"New Position for Ball {i}: {newPosition}");
_balls[i].Position = newPosition;
}
}
}```