void OnUpdateUserStatus(string userId, FriendsController.UserStatus status) { if (!friendsController.isInitialized) { return; } FriendTracker friend; if (!friends.TryGetValue(userId, out friend)) { friend = new FriendTracker(userId, friendColors[Random.Range(0, friendColors.Length)]); friends.Add(userId, friend); } friend.SetStatus(status); if (!friend.IsOnline()) { friend.RemoveAllListeners(); } else { ProcessFriendLocation(friend, new Vector2Int((int)status.position.x, (int)status.position.y)); } }
void ProcessFriendLocation(FriendTracker friend, Vector2Int coords) { if (!friend.HasChangedLocation(coords)) { return; } friend.RemoveAllListeners(); using (var listenersIterator = listeners.GetEnumerator()) { while (listenersIterator.MoveNext()) { if (listenersIterator.Current.Value.ContainCoords(coords)) { friend.AddListener(listenersIterator.Current.Value); } } } }
void OnFriendsInitialized() { friendsController.OnInitialized -= OnFriendsInitialized; using (var friendsIterator = friendsController.GetFriends().GetEnumerator()) { while (friendsIterator.MoveNext()) { FriendTracker friend = new FriendTracker(friendsIterator.Current.Key, friendColors[Random.Range(0, friendColors.Length)]); friend.SetStatus(friendsIterator.Current.Value); friends.Add(friendsIterator.Current.Key, friend); } } using (var listenersIterator = listeners.GetEnumerator()) { while (listenersIterator.MoveNext()) { ProcessNewListener(listenersIterator.Current.Value); } } }