public void Awake(StartConfig allConfig, long id) { Instance = this; this.AllConfig = allConfig; this.AllConfig.Parent = this; // 每个进程的配置 foreach (StartConfig s in this.AllConfig.List) { s.SceneInstanceId = (s.Id << IdGenerater.HeadPos) + s.Id; if (s.Id == id) { this.StartConfig = s; } InnerConfig innerConfig = s.GetComponent <InnerConfig>(); if (innerConfig != null) { this.innerAddressDict.Add(s.Id, innerConfig.Address); } // 每个进程里面domain的配置 foreach (StartConfig startConfig in s.List) { startConfig.SceneInstanceId = (startConfig.Parent.Id << IdGenerater.HeadPos) + startConfig.Id; this.configDict.Add(startConfig.Id, startConfig); SceneConfig sceneConfig = startConfig.GetComponent <SceneConfig>(); switch (sceneConfig.SceneType) { case SceneType.Gate: this.Gates.Add(startConfig); break; case SceneType.Map: this.nameDict.Add(sceneConfig.Name, startConfig); break; default: this.typeDict.Add((int)sceneConfig.SceneType, startConfig); break; } } } }
/// <summary> /// 生成一个SceneBase /// </summary> /// <param name="sceneID"></param> /// <returns></returns> public SceneBase CreateScene(int sceneID) { SceneConfig sceneConfig = SceneDefine.SceneConfig[sceneID]; if (sceneConfig == null) { Debug.Log("can not find scene config...SceneID:" + sceneID); return(null); } //新场景加载前的准备(应该根据类型实例化对应的场景类,需要反射调用) SceneBase newScene = new SceneBase(sceneConfig); return(newScene); }
public SceneBase(SceneConfig sceneConfig) { this.SceneType = sceneConfig.SceneType; this.SceneId = sceneConfig.SceneId; this.SceneName = sceneConfig.SceneName; this.SceneFolder = sceneConfig.SceneFolder; this.SceneLoadState = sceneConfig.SceneLoadState; this.SceneMusic = sceneConfig.SceneMusic; this.sceneRoot = null;//根节hko this.isEnter = false; this.sceneParam = null;//切换场景,外部传入的参数 }
public bool OnGUI() { StartConfig startConfig = this.GetParent <StartConfig>(); GUILayout.BeginHorizontal(GUILayout.Height(16)); if (this.level > 0) { string s = ""; for (int i = 1; i < this.level; ++i) { s += $" "; } GUILayout.Label(s, GUILayout.Width(20 * this.level)); } { GUILayout.BeginHorizontal(GUILayout.Width(240), GUILayout.Height(16)); this.isFold = EditorGUILayout.Foldout(isFold, $"子配置数量:{startConfig.List.Count}"); if (GUILayout.Button("添加子配置", GUILayout.Height(16), GUILayout.Width(75))) { StartConfig s = new StartConfig(); startConfig.Add(s); s.AddComponentNoPool <StartConfigDrawer, int>(this.level + 1); for (int i = 0; i < startConfig.List.Count; ++i) { startConfig.List[i].Id = i + 1; } this.isFold = true; return(false); } if (GUILayout.Button("上", GUILayout.Height(16), GUILayout.Width(30))) { StartConfig parentStartConfig = startConfig.GetParent <StartConfig>(); int index = parentStartConfig.List.IndexOf(startConfig); if (index == 0) { return(true); } parentStartConfig.List.Remove(startConfig); parentStartConfig.List.Insert(index - 1, startConfig); for (int i = 0; i < parentStartConfig.List.Count; ++i) { parentStartConfig.List[i].Id = i + 1; } return(false); } if (GUILayout.Button("下", GUILayout.Height(16), GUILayout.Width(30))) { StartConfig parentStartConfig = startConfig.GetParent <StartConfig>(); int index = parentStartConfig.List.IndexOf(startConfig); if (index == parentStartConfig.List.Count - 1) { return(true); } parentStartConfig.List.Remove(startConfig); parentStartConfig.List.Insert(index + 1, startConfig); for (int i = 0; i < parentStartConfig.List.Count; ++i) { parentStartConfig.List[i].Id = i + 1; } return(false); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(50)); GUILayout.Label($"Id: "); startConfig.Id = EditorGUILayout.LongField(startConfig.Id, GUILayout.Width(30)); GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(200)); ProcessConfig processConfig = startConfig.GetComponent <ProcessConfig>(); if (processConfig != null) { GUILayout.Label($" ProcessConfig(", this.style); GUILayout.Label($"服务器IP: "); processConfig.ServerIP = EditorGUILayout.TextField(processConfig.ServerIP, GUILayout.Width(100)); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(200)); SceneConfig sceneConfig = startConfig.GetComponent <SceneConfig>(); if (sceneConfig != null) { GUILayout.Label($" SceneConfig(", this.style); GUILayout.Label($"SceneType: "); sceneConfig.SceneType = (SceneType)EditorGUILayout.EnumPopup(sceneConfig.SceneType, GUILayout.Width(100)); GUILayout.Label($"Name: "); sceneConfig.Name = EditorGUILayout.TextField(sceneConfig.Name, GUILayout.Width(100)); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(150)); InnerConfig innerConfig = startConfig.GetComponent <InnerConfig>(); if (innerConfig != null) { GUILayout.Label($" InnerConfig(", this.style); GUILayout.Label($"内网地址:"); innerConfig.Address = EditorGUILayout.TextField(innerConfig.Address, GUILayout.Width(120)); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(350)); OuterConfig outerConfig = startConfig.GetComponent <OuterConfig>(); if (outerConfig != null) { GUILayout.Label($" OuterConfig(", this.style); GUILayout.Label($"外网地址:"); outerConfig.Address = EditorGUILayout.TextField(outerConfig.Address, GUILayout.Width(120)); GUILayout.Label($"外网地址2:"); outerConfig.Address2 = EditorGUILayout.TextField(outerConfig.Address2, GUILayout.Width(120)); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(50)); CopyConfig copyConfig = startConfig.GetComponent <CopyConfig>(); if (copyConfig != null) { GUILayout.Label($" CopyConfig(", this.style); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(50)); MapConfig mapConfig = startConfig.GetComponent <MapConfig>(); if (mapConfig != null) { GUILayout.Label($" MapConfig(", this.style); GUILayout.Label($"MapType: "); mapConfig.MapType = (MapType)EditorGUILayout.EnumPopup(mapConfig.MapType, GUILayout.Width(100)); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(350)); ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>(); if (clientConfig != null) { GUILayout.Label($" ClientConfig(", this.style); GUILayout.Label($"连接地址:"); clientConfig.Address = EditorGUILayout.TextField(clientConfig.Address, GUILayout.Width(120)); GUILayout.Label($"),", this.style); } DBConfig dbConfig = startConfig.GetComponent <DBConfig>(); if (dbConfig != null) { GUILayout.Label($" DBConfig(", this.style); GUILayout.Label($"连接串:"); dbConfig.ConnectionString = EditorGUILayout.TextField(dbConfig.ConnectionString); GUILayout.Label($"DBName:"); dbConfig.DBName = EditorGUILayout.TextField(dbConfig.DBName); GUILayout.Label($"),", this.style); } GUILayout.EndHorizontal(); } { GUILayout.BeginHorizontal(GUILayout.Width(200), GUILayout.Height(16)); this.st = (StartConfigComponentType)EditorGUILayout.EnumPopup(this.st, GUILayout.Width(100)); if (GUILayout.Button("添加组件", GUILayout.Height(16))) { Assembly assembly = Assembly.GetAssembly(typeof(Game)); Type type = assembly.GetType($"ETModel.{this.st.ToString()}"); startConfig.AddComponent(type); } if (GUILayout.Button("删除组件", GUILayout.Height(16))) { Assembly assembly = Assembly.GetAssembly(typeof(Game)); Type type = assembly.GetType($"ETModel.{this.st.ToString()}"); startConfig.RemoveComponent(type); } if (GUILayout.Button("删除该行配置", GUILayout.Height(16))) { startConfig.GetParent <StartConfig>().Remove(startConfig); return(false); } GUILayout.EndHorizontal(); } GUILayout.EndHorizontal(); if (this.isFold) { foreach (StartConfig child in startConfig.List) { if (child.GetComponent <StartConfigDrawer>()?.OnGUI() == false) { return(false); } } } return(true); }
//基类有带参数的构造方法,所以必须传递实参给基类 public BattleScene(SceneConfig config) : base(config) { this.sceneConfig = config; }