private RealtimeViewComponentsModel CreateChildViewsModel(Dictionary <int, RealtimeView> childViewMap) { // Create models for all views Dictionary <int, IModel> childViewModelMap = new Dictionary <int, IModel>(); foreach (KeyValuePair <int, RealtimeView> pair in childViewMap) { int viewID = pair.Key; RealtimeView view = pair.Value; if (view == null) { // Note: Deprecated view IDs will have a null view property. This is normal and they can be safely ignored. continue; } // Create model RealtimeViewModel viewModel = view._CreateChildViewModel(); if (viewModel == null) { Debug.LogError("Model supplied by child RealtimeView is null. Skipping view: (" + viewID + ":" + view + ")", view); continue; } // Set model childViewModelMap[viewID] = viewModel; } // Create RealtimeViewComponentsModel RealtimeViewComponentsModel childViewsModel = new RealtimeViewComponentsModel(childViewModelMap); return(childViewsModel); }
public RealtimeViewModel _CreateRootSceneViewModel() { if (!isRootSceneView) { Debug.LogError("RealtimeView: Asked to create root scene view model for view that's not a root scene view. This is a bug!"); } // Create components model Dictionary <int, Tuple <Component, MethodInfo, PropertyInfo, PropertyInfo> > componentMap = CreateComponentMap(); RealtimeViewComponentsModel componentsModel = CreateComponentsModel(componentMap); // Create child views model Dictionary <int, RealtimeView> childViewsMap = CreateChildViewMap(); RealtimeViewComponentsModel childViewsModel = CreateChildViewsModel(childViewsMap); // Ownership / lifetime flags int ownerID = _sceneViewOwnedByCreatingClient ? _realtime.clientID : -1; uint lifetimeFlags = 0; if (_sceneViewPreventOwnershipTakeover) { lifetimeFlags |= (uint)MetaModel.LifetimeFlags.PreventOwnershipTakeover; } if (_sceneViewDestroyWhenOwnerOrLastClientLeaves) { lifetimeFlags |= (uint)MetaModel.LifetimeFlags.DestroyWhenOwnerOrLastClientLeaves; } // Create RealtimeViewModel RealtimeViewModel viewModel = new RealtimeViewModel(_sceneViewUUID, ownerID, lifetimeFlags, componentsModel, childViewsModel); return(viewModel); }
private void PrefabViewModelAddedToSet(RealtimeSet <RealtimeViewModel> set, RealtimeViewModel model, bool remote) { if (prefabRealtimeViewModelAdded != null) { prefabRealtimeViewModelAdded(this, model, remote); } }
public void AddPrefabRealtimeViewModel(RealtimeViewModel prefabViewModel) { if (!_prefabViewModels.Add(prefabViewModel)) { UnityEngine.Debug.LogError("RealtimeViewModel already exists in Datastore! This is a bug!"); return; } }
public bool AddSceneRealtimeViewModel(RealtimeViewModel viewModel) { if (viewModel.sceneViewUUID.Length == 0) { UnityEngine.Debug.LogError("Scene RealtimeView is missing a UUID. This is a bug!"); return(false); } if (!_sceneViewModels.Add(viewModel)) { UnityEngine.Debug.LogError("RealtimeViewModel already exists in Datastore! This is a bug!"); return(false); } return(true); }
public RealtimeViewModel _CreateChildViewModel() { if (!isChildView) { Debug.LogError("RealtimeView: Asked to create child view model for view that's not a child view. This is a bug!"); } // Create components model Dictionary <int, Tuple <Component, MethodInfo, PropertyInfo, PropertyInfo> > componentMap = CreateComponentMap(); RealtimeViewComponentsModel componentsModel = CreateComponentsModel(componentMap); // Create child views model Dictionary <int, RealtimeView> childViewsMap = CreateChildViewMap(); RealtimeViewComponentsModel childViewsModel = CreateChildViewsModel(childViewsMap); // Create RealtimeViewModel RealtimeViewModel viewModel = new RealtimeViewModel(componentsModel, childViewsModel); return(viewModel); }
public RealtimeViewModel _CreateRootPrefabViewModel(string prefabName, int ownerID, uint lifetimeFlags) { if (!isRootPrefabView) { Debug.LogError("RealtimeView: Asked to create root prefab view model for view that's not on the root of a prefab. This is a bug!"); } // Create components model Dictionary <int, Tuple <Component, MethodInfo, PropertyInfo, PropertyInfo> > componentMap = CreateComponentMap(); RealtimeViewComponentsModel componentsModel = CreateComponentsModel(componentMap); // Create child views model Dictionary <int, RealtimeView> childViewsMap = CreateChildViewMap(); RealtimeViewComponentsModel childViewsModel = CreateChildViewsModel(childViewsMap); // Create RealtimeViewModel RealtimeViewModel viewModel = new RealtimeViewModel(prefabName, ownerID, lifetimeFlags, componentsModel, childViewsModel); return(viewModel); }
private void SetModel(RealtimeViewModel model) { if (model == _model) { return; } if (_model != null) { _model._SetRealtimeView(null); } _model = model; if (_model != null) { _model._SetRealtimeView(this); Dictionary <int, Tuple <Component, MethodInfo, PropertyInfo, PropertyInfo> > componentMap = CreateComponentMap(); // Create components model if needed (can happen if RealtimeViewModel existed in the datastore but hasn't been linked to a RealtimeView yet) RealtimeViewComponentsModel componentsModel = _model.componentsModel; if (_model.componentsModel == null) { componentsModel = CreateComponentsModel(componentMap); _model.SetComponentsModelAndDeserializeCachedModelsIfNeeded(componentsModel); } // Loop through components and assign models foreach (KeyValuePair <int, Tuple <Component, MethodInfo, PropertyInfo, PropertyInfo> > pair in componentMap) { int componentID = pair.Key; Component component = pair.Value.First; MethodInfo createModelMethod = pair.Value.Second; PropertyInfo modelProperty = pair.Value.Third; PropertyInfo realtimeViewProperty = pair.Value.Fourth; IModel componentModel = componentsModel[componentID]; if (componentModel == null) { Debug.LogError("RealtimeView is attempting to connect a component to its model, but cannot find model for component: (" + componentID + ":" + component + "). This is a bug!", component); continue; } // Set realtime view reference on object if it supports it if (realtimeViewProperty != null) { realtimeViewProperty.SetValue(component, this, null); } // Set model on component modelProperty.SetValue(component, componentModel, null); } Dictionary <int, RealtimeView> childViewMap = CreateChildViewMap(); // Create child views model if needed (can happen if RealtimeViewModel existed in the datastore but hasn't been linked to a RealtimeView yet) RealtimeViewComponentsModel childViewsModel = _model.childViewsModel; if (childViewsModel == null) { childViewsModel = CreateChildViewsModel(childViewMap); _model.SetChildViewsModelAndDeserializeCachedModelsIfNeeded(childViewsModel); } // Loop through child views and assign models foreach (KeyValuePair <int, RealtimeView> pair in childViewMap) { int viewID = pair.Key; RealtimeView view = pair.Value; RealtimeViewModel viewModel = childViewsModel[viewID] as RealtimeViewModel; if (viewModel == null) { Debug.LogError("RealtimeView attempting to connect child view to its models, but cannot find model for view: (" + viewID + ":" + view + "). This is a bug!", view); continue; } // Set realtime instance and model view._SetRealtime(_realtime); view.model = viewModel; } } }
public bool RemovePrefabRealtimeViewModel(RealtimeViewModel model) { return(_prefabViewModels.Remove(model)); }