private void updateSavedIglooMetaData(long layoutId, SceneLayout savedSceneLayout)
        {
            SavedIgloosMetaData       savedIgloosMetaData = getSavedIgloosMetaData();
            List <SavedIglooMetaData> list = new List <SavedIglooMetaData>(savedIgloosMetaData.SavedIgloos);
            bool flag = false;

            foreach (SavedIglooMetaData item in list)
            {
                if (layoutId == item.LayoutId)
                {
                    SceneLayoutToSavedIglooMetaData(layoutId, savedSceneLayout, item);
                    item.SceneLayout = savedSceneLayout;
                    flag             = true;
                    break;
                }
            }
            if (!flag)
            {
                SavedIglooMetaData current = CreateSavedIglooMetaDataFromSceneLayout(layoutId, savedSceneLayout);
                current.SceneLayout = savedSceneLayout;
                list.Add(current);
                if (!savedIgloosMetaData.ActiveIglooId.HasValue)
                {
                    savedIgloosMetaData.ActiveIglooId = layoutId;
                }
            }
            savedIgloosMetaData.SavedIgloos = list;
            savedIgloosMetaData.IsDirty     = false;
        }
        private void SelectLayout(SceneLayout layout)
        {
            if (_selectedLayout == layout)
            {
                return;
            }

            if (_selectedLayout != null)
            {
                _selectedLayout.Dispose();
            }

            layout.ActivateLayout(SceneViewsGrid);
            _selectedLayout = layout;

            foreach (var toggleButton in LayoutsPanel.Children.OfType <ToggleButton>())
            {
                if (toggleButton.Tag != _selectedLayout)
                {
                    toggleButton.IsChecked = false;
                }
            }

            ShowModel(_loadedModel3D);
        }
        public void LoadIglooLayout(long layoutId, Action <bool, SceneLayoutData, SceneLayoutData> callback)
        {
            loadLayoutCallback = callback;
            SceneLayout sceneLayout = null;

            if (layoutId != savedIgloosMetaData.ActiveIglooId)
            {
                for (int i = 0; i < savedIgloosMetaData.SavedIgloos.Count; i++)
                {
                    if (savedIgloosMetaData.SavedIgloos[i].LayoutId == layoutId)
                    {
                        sceneLayout = savedIgloosMetaData.SavedIgloos[i].SceneLayout;
                        break;
                    }
                }
            }
            if (sceneLayout != null)
            {
                SceneLayoutData sceneLayoutData = new SceneLayoutData();
                layoutManager.UpdateSceneLayoutData(layoutId, sceneLayout, sceneLayoutData);
                if (loadLayoutCallback != null)
                {
                    loadLayoutCallback.InvokeSafe(arg1: true, sceneLayoutData, null);
                    loadLayoutCallback = null;
                }
            }
            else
            {
                eventChannel.AddListener <IglooServiceEvents.IglooLayoutLoaded>(onIglooLayoutLoaded);
                iglooService.GetIglooLayout(layoutId);
            }
        }
Exemple #4
0
    protected override void PerformOfflineAction(OfflineDatabase offlineDatabase, IOfflineDefinitionLoader offlineDefinitions)
    {
        SceneLayoutEntity value       = offlineDatabase.Read <SceneLayoutEntity>();
        SceneLayout       sceneLayout = value[SceneLayoutId];

        sceneLayout.lastModifiedDate = DateTime.UtcNow.GetTimeInMilliseconds();
        if (RequestBody.zoneId != null)
        {
            sceneLayout.zoneId = RequestBody.zoneId;
        }
        if (RequestBody.name != null)
        {
            sceneLayout.name = RequestBody.name;
        }
        sceneLayout.lightingId = RequestBody.lightingId;
        sceneLayout.musicId    = RequestBody.musicId;
        if (RequestBody.decorationsLayout != null)
        {
            sceneLayout.decorationsLayout = RequestBody.decorationsLayout;
        }
        if (RequestBody.extraInfo != null)
        {
            sceneLayout.extraInfo = RequestBody.extraInfo;
        }
        offlineDatabase.Write(value);
        ResponseBody = SavedSceneLayout.FromSceneLayout(sceneLayout, SceneLayoutId);
    }
 public static void SceneLayoutToSavedIglooMetaData(long layoutId, SceneLayout sceneLayout, SavedIglooMetaData savedIglooMetaData)
 {
     savedIglooMetaData.LayoutId         = layoutId;
     savedIglooMetaData.CreatedDate      = (sceneLayout.createdDate.HasValue ? sceneLayout.createdDate.Value : 0);
     savedIglooMetaData.LastModifiedDate = (sceneLayout.lastModifiedDate.HasValue ? sceneLayout.lastModifiedDate.Value : 0);
     savedIglooMetaData.MemberOnly       = sceneLayout.memberOnly;
     savedIglooMetaData.LotZoneName      = sceneLayout.zoneId;
 }
 private bool onIglooUpdated(IglooServiceEvents.IglooUpdated evt)
 {
     newLayout = null;
     eventChannel.AddListenerOneShot <IglooServiceEvents.IglooActiveLayoutLoaded>(onActiveLayoutLoaded);
     Service.Get <INetworkServicesManager>().IglooService.GetActiveIglooLayout(evt.IglooId);
     sendNotification(UpdateNotice, UpdateCountDown);
     CoroutineRunner.Start(reloadScene(), this, "Reload igloo scene");
     return(false);
 }
Exemple #7
0
 public SelfRoomJoinedEvent(long sessionId, string name, RoomIdentifier room, SceneLayout extraLayoutData, string roomOwnerName, bool isRoomOwner)
 {
     SessionId       = sessionId;
     Name            = name;
     Room            = room;
     ExtraLayoutData = extraLayoutData;
     RoomOwnerName   = roomOwnerName;
     IsRoomOwner     = isRoomOwner;
 }
        public void UpdateSceneLayoutData(long layoutId, SceneLayout sceneLayout, SceneLayoutData sceneLayoutData)
        {
            long createdDate      = (sceneLayout.createdDate.HasValue ? sceneLayout.createdDate.Value : 0);
            long lastModifiedDate = (sceneLayout.lastModifiedDate.HasValue ? sceneLayout.lastModifiedDate.Value : 0);
            List <DecorationLayoutData> layout = ToDecorationLayoutData(sceneLayout.decorationsLayout);

            sceneLayoutData.UpdateData(layoutId, sceneLayout.zoneId, createdDate, lastModifiedDate, sceneLayout.memberOnly, sceneLayout.lightingId, sceneLayout.musicId, sceneLayout.extraInfo, layout);
            sceneLayoutData.IsDirty = false;
        }
 public bool UpdateActiveLayoutFromData(long layoutId, SceneLayout sceneLayout)
 {
     try
     {
         SceneLayoutData activeSceneLayoutData = GetActiveSceneLayoutData();
         UpdateSceneLayoutData(layoutId, sceneLayout, activeSceneLayoutData);
     }
     catch (Exception)
     {
         return(false);
     }
     return(true);
 }
        private SceneLayoutData checkForUnpublishedLayout(long layoutId, SceneLayout sceneLayout)
        {
            SceneLayoutData sceneLayoutData = null;

            for (int i = 0; i < savedIgloosMetaData.SavedIgloos.Count; i++)
            {
                if (savedIgloosMetaData.SavedIgloos[i].LayoutId == layoutId && sceneLayout.lastModifiedDate > savedIgloosMetaData.SavedIgloos[i].LastModifiedDate)
                {
                    sceneLayoutData = new SceneLayoutData();
                    layoutManager.UpdateSceneLayoutData(layoutId, sceneLayout, sceneLayoutData);
                    break;
                }
            }
            return(sceneLayoutData);
        }
 private bool onActiveLayoutLoaded(IglooServiceEvents.IglooActiveLayoutLoaded evt)
 {
     newLayout = evt.Layout;
     return(false);
 }
        public static SavedIglooMetaData CreateSavedIglooMetaDataFromSceneLayout(long layoutId, SceneLayout sceneLayout)
        {
            SavedIglooMetaData savedIglooMetaData = new SavedIglooMetaData();

            SceneLayoutToSavedIglooMetaData(layoutId, sceneLayout, savedIglooMetaData);
            return(savedIglooMetaData);
        }
        private void onGetActiveIglooLayout(GetActiveIglooLayoutOperation operation, HttpResponse httpResponse)
        {
            SceneLayout responseBody = operation.ResponseBody;

            Service.Get <EventDispatcher>().DispatchEvent(new IglooServiceEvents.IglooActiveLayoutLoaded(responseBody));
        }
 public IglooActiveLayoutLoaded(SceneLayout layout)
 {
     Layout = layout;
 }
        private SceneLayoutData addLayoutToEntity(DataEntityHandle handle, long layoutId, SceneLayout sceneLayout)
        {
            if (dataEntityCollection.HasComponent <SceneLayoutData>(handle))
            {
                Log.LogErrorFormatted(this, "Cannot add SceneLayoutData to {0} as one already exists. Remove the exiting one first.", handle);
                return(null);
            }
            SceneLayoutData sceneLayoutData = new SceneLayoutData();

            try
            {
                UpdateSceneLayoutData(layoutId, sceneLayout, sceneLayoutData);
                dataEntityCollection.AddComponent(handle, sceneLayoutData);
            }
            catch (Exception ex)
            {
                Log.LogErrorFormatted(this, "Problem creating scene layout from cached data. Message: {0}", ex.Message);
            }
            return(sceneLayoutData);
        }
 public SceneLayoutData CacheLayoutFromSceneLayout(long layoutId, SceneLayout sceneLayout)
 {
     return(addLayoutToEntity(GetCacheHandle(), layoutId, sceneLayout));
 }
Exemple #17
0
 public ReloadLayout(SceneLayout newLayout)
 {
     NewLayout = newLayout;
 }
Exemple #18
0
        /// <summary>
        /// Excel -> 二进制文件
        /// </summary>
        /// <param name="inPath"></param>
        /// <param name="inFolderName"></param>
        /// <returns></returns>
        public bool Bin(string inPath, string inFolderName)
        {
            Assist.CheckFolderExist(inFolderName);

            PBData data = new PBData();

            Assist.GetObjPaths(".xls", inPath).ForEach(delegate(string path)
            {
                DataSet ds = Assist.ExcelToData(path);
                DataTable dt = ds.Tables[0];

                string classname = Stringer.FirstLetterUp(dt.TableName);

                Type classType = Type.GetType(classname);

                FieldInfo fieldInfo = typeof(PBData).GetField(classname + "Dic");

                IDictionary fieldValue = fieldInfo.GetValue(data) as IDictionary;

                if (classType != null)
                {
                    for (int i = 4; i < dt.Rows.Count; i++)
                    {
                        string key = ""; // key

                        List<string> ls = new List<string>();
                        for (int x = 0; x < dt.Columns.Count; x++)
                        {
                            ls.Add(dt.Rows[i][x].ToString());

                            if (dt.Rows[2][x].ToString().Split('+')[2] == "1")// 当前值为Key值的一部分
                            {
                                key += dt.Rows[i][x].ToString() + "_";
                            }
                        }
                        key = key.Remove(key.Length - 1, 1);
                        IProtoBufable value = Activator.CreateInstance(classType) as IProtoBufable;// value
                        value.Set(ls);
                        fieldValue.Add(key, value);
                    }

                    fieldInfo.SetValue(data, fieldValue);
                }
            });

            #region SceneLayout 读取同级目录下的“Excel/SceneLayout/”内的所有 xml 文件,并将其数据写入 PBData

            Dictionary<string, XmlDocument> doc = Assist.GetXml(Assist.RootPath + "Excel/SceneLayout/");
            foreach (KeyValuePair<string, XmlDocument> item in doc)
            {
                SceneLayout sl = new SceneLayout();
                XmlNodeList xcc = item.Value.SelectSingleNode("Config").ChildNodes;
                for (int i = 0; i < xcc.Count; i++)
                {
                    SceneLayoutItem sli = new SceneLayoutItem();

                    IProtoBufable xmlItemValue = new SceneLayoutItem() as IProtoBufable;// value
                    List<string> xls = new List<string>();
                    for (int x = 0; x < xcc[i].Attributes.Count; x++)
                    {
                        xls.Add(xcc[i].Attributes[x].Value);
                    }
                    xmlItemValue.Set(xls);

                    sl.item.Add(xmlItemValue as SceneLayoutItem);
                }
                data.SceneLayoutDic.Add(item.Key, sl);
            }

            #endregion

            using (var file = System.IO.File.Create("PBData"))
            {
                try
                {
                    ProtoBuf.Serializer.Serialize(file, data);
                }
                catch (Exception e)
                {
                    MainWindow.Show(e.ToString());
                }
            }

            return true;
        }
Exemple #19
0
        /// <summary>
        /// Excel -> 二进制文件
        /// </summary>
        /// <param name="inPath"></param>
        /// <param name="inFolderName"></param>
        /// <returns></returns>
        public bool Bin(string inPath, string inFolderName)
        {
            Assist.CheckFolderExist(inFolderName);

            PBData data = new PBData();

            Assist.GetObjPaths(".xls", inPath).ForEach(delegate(string path)
            {
                DataSet ds   = Assist.ExcelToData(path);
                DataTable dt = ds.Tables[0];

                string classname = Stringer.FirstLetterUp(dt.TableName);

                Type classType = Type.GetType(classname);

                FieldInfo fieldInfo = typeof(PBData).GetField(classname + "Dic");

                IDictionary fieldValue = fieldInfo.GetValue(data) as IDictionary;

                if (classType != null)
                {
                    for (int i = 4; i < dt.Rows.Count; i++)
                    {
                        string key = ""; // key

                        List <string> ls = new List <string>();
                        for (int x = 0; x < dt.Columns.Count; x++)
                        {
                            ls.Add(dt.Rows[i][x].ToString());

                            if (dt.Rows[2][x].ToString().Split('+')[2] == "1")// 当前值为Key值的一部分
                            {
                                key += dt.Rows[i][x].ToString() + "_";
                            }
                        }
                        key = key.Remove(key.Length - 1, 1);
                        IProtoBufable value = Activator.CreateInstance(classType) as IProtoBufable;// value
                        value.Set(ls);
                        fieldValue.Add(key, value);
                    }

                    fieldInfo.SetValue(data, fieldValue);
                }
            });

            #region SceneLayout 读取同级目录下的“Excel/SceneLayout/”内的所有 xml 文件,并将其数据写入 PBData

            Dictionary <string, XmlDocument> doc = Assist.GetXml(Assist.RootPath + "Excel/SceneLayout/");
            foreach (KeyValuePair <string, XmlDocument> item in doc)
            {
                SceneLayout sl  = new SceneLayout();
                XmlNodeList xcc = item.Value.SelectSingleNode("Config").ChildNodes;
                for (int i = 0; i < xcc.Count; i++)
                {
                    SceneLayoutItem sli = new SceneLayoutItem();

                    IProtoBufable xmlItemValue = new SceneLayoutItem() as IProtoBufable;// value
                    List <string> xls          = new List <string>();
                    for (int x = 0; x < xcc[i].Attributes.Count; x++)
                    {
                        xls.Add(xcc[i].Attributes[x].Value);
                    }
                    xmlItemValue.Set(xls);

                    sl.item.Add(xmlItemValue as SceneLayoutItem);
                }
                data.SceneLayoutDic.Add(item.Key, sl);
            }

            #endregion

            using (var file = System.IO.File.Create("PBData"))
            {
                try
                {
                    ProtoBuf.Serializer.Serialize(file, data);
                }
                catch (Exception e)
                {
                    MainWindow.Show(e.ToString());
                }
            }

            return(true);
        }
Exemple #20
0
    protected override void PerformOfflineAction(OfflineDatabase offlineDatabase, IOfflineDefinitionLoader offlineDefinitions)
    {
        IglooEntity iglooEntity = offlineDatabase.Read <IglooEntity>();

        ResponseBody = iglooEntity.Data.activeLayout;
    }