Пример #1
0
 void IFiltersList.FireOnPropertiesChanged(IFilter sender, bool changeAffectsFilterResult, bool changeAffectsPreprocessingResult)
 {
     OnPropertiesChanged?.Invoke(sender, new FilterChangeEventArgs(changeAffectsFilterResult, changeAffectsPreprocessingResult));
     if (changeAffectsFilterResult)
     {
         ++filtersVersion;
         changeNotification?.Post();
     }
 }
Пример #2
0
    private void OnPropertyValueChanged()
    {
        HaveChanged = false;
        foreach (var property in properties)
        {
            HaveChanged |= property.HasChanged;
        }

        OnPropertiesChanged?.Invoke();
    }
Пример #3
0
        private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
            case "Shuffle":
                OnPropertiesChanged?.Invoke(PropertyChanges.ForProperty("Shuffle", viewModel.Player.Queue.Shuffle));
                break;

            case "Volume":
                OnPropertiesChanged?.Invoke(PropertyChanges.ForProperty("Volume", (double)viewModel.Player.Volume));
                break;

            case "Paused":
                OnPropertiesChanged?.Invoke(PropertyChanges.ForProperty("PlaybackStatus", viewModel.Paused switch
                {
                    true => "Paused",
                    false => "Playing"
                }));
                break;
            }
Пример #4
0
 public Task SetAsync(string prop, object val)
 {
     _properties[prop] = val;
     OnPropertiesChanged?.Invoke(PropertyChanges.ForProperty(prop, val));
     return(Task.CompletedTask);
 }
Пример #5
0
 private void Player_SongStopped(object sender, EventArgs e)
 {
     OnPropertiesChanged?.Invoke(PropertyChanges.ForProperty("PlaybackStatus", "Stopped"));
 }
Пример #6
0
        /// <summary>
        /// Updates the local copy of the global state via server delta
        /// </summary>
        /// <param name="serverUpdate">changes to the global state since last server tick</param>
        private void UpdateLocalState(StateUpdate serverUpdate)
        {
            RoomStateGen newRoomState = new RoomStateGen(globalState);

            #region properties update

            bool propsChanged  = false;
            bool isSceneUpdate = false;
            if (!string.IsNullOrEmpty(serverUpdate.SiteDrive))
            {
                propsChanged  = true;
                isSceneUpdate = true;
            }
            else
            {
                if (serverUpdate.AnnotationsLength > 0)
                {
                    propsChanged = true;
                }
                if (serverUpdate.Poi.HasValue)
                {
                    propsChanged = true;
                }
            }
            if (propsChanged)
            {
                if (isSceneUpdate)
                {
                    if (OnPropertiesChanged != null)
                    {
                        OnPropertiesChanged.Invoke(this, serverUpdate);
                    }
                }
                else
                {
                    serverUpdate.Debounce(this, props =>
                    {
                        if (OnPropertiesChanged != null)
                        {
                            OnPropertiesChanged.Invoke(this, props);
                        }
                    }, isSceneUpdate);
                }
            }

            #endregion

            if (serverUpdate.DeleteLength > 0) //delete these object ids from the global state
            {
                print("Deleting " + serverUpdate.DeleteLength + " objects");
                for (int i = 0; i < serverUpdate.DeleteLength; i++)
                {
                    if (newRoomState.objects.All(tr => tr.id != serverUpdate.Delete(i)))
                    {
                        print("object to delete not found in global state " + serverUpdate.Delete(i));
                        continue;
                    }
                    newRoomState.objects.Remove(globalState.objects.Single(o => o.id == serverUpdate.Delete(i)));
                    if (trackers.ContainsKey(serverUpdate.Delete(i)) && trackers[serverUpdate.Delete(i)] != null)
                    {
                        Destroy(((MonoBehaviour)trackers[serverUpdate.Delete(i)]).gameObject);
                    }
                    else
                    {
                        print("Could not find game object to destroy" + serverUpdate.Delete(i));
                    }
                }
            }
            if (serverUpdate.CreateLength > 0) //create these objects and add them to the global state
            {
                for (int i = 0; i < serverUpdate.CreateLength; i++)
                {
                    if (!serverUpdate.Create(i).HasValue)
                    {
                        print("Malformed create message");
                        continue;
                    }
                    if (!trackers.ContainsKey(serverUpdate.Create(i).Value.Id))
                    {
                        CreateObject(serverUpdate.Create(i).Value, newRoomState);

                        //if (newRoomState.objects.Contains(serverUpdate.Create(i).Value))
                        //continue;
                    }
                    else
                    {
                        print("Object " + serverUpdate.Create(i).Value.Id + " already exists");
                    }
                    //else
                    //{
                    //  if (newRoomState.objects.Any(tr => tr.id == serverUpdate.Create(i).Value.Id))
                    //    newRoomState.objects.Remove(newRoomState.objects.Single(o => o.id == serverUpdate.Create(i).Value.Id));
                    //  var oldObj = (MonoBehaviour) trackers[serverUpdate.Create(i).Value.Id];
                    //  if (oldObj) Destroy(oldObj.gameObject);
                    //  trackers.Remove(serverUpdate.Create(i).Value.Id);
                    //}
                    //CreateObject(serverUpdate.Create(i).Value, newRoomState);
                }
            }
            if (serverUpdate.UpdateLength > 0)
            {
                for (int i = 0; i < serverUpdate.UpdateLength; i++)
                {
                    if (!serverUpdate.Update(i).HasValue)
                    {
                        continue;
                    }
                    if (!trackers.ContainsKey(serverUpdate.Update(i).Value.Id))
                    {
                        Debug.Log("Object created from update. please use the create function instead");
                        //CreateObject(serverUpdate.Update(i).Value, newRoomState);
                        continue;
                    }
                    trackers[serverUpdate.Update(i).Value.Id].UpdateFromRoomObject(serverUpdate.Update(i).Value);
                }
            }
            oldStateGen = new RoomStateGen(globalState);
            globalState = newRoomState;
        }
Пример #7
0
 protected void InvokeOnPropertiesChanged() => OnPropertiesChanged?.Invoke();