tanghai 9 лет назад
Родитель
Сommit
4515a5e38d

+ 3 - 4
Server/App/Program.cs

@@ -2,7 +2,6 @@
 using Base;
 using Model;
 using NLog;
-using Object = Model.Object;
 
 namespace App
 {
@@ -12,8 +11,8 @@ namespace App
 		{
 			try
 			{
-				Object.ObjectManager.Register("Model", typeof(Game).Assembly);
-				Object.ObjectManager.Register("Controller", DllHelper.GetController());
+				ObjectManager.Instance.Register("Model", typeof(Game).Assembly);
+				ObjectManager.Instance.Register("Controller", DllHelper.GetController());
 
 				StartConfig startConfig = Game.Scene.AddComponent<StartConfigComponent, string[]>(args).MyConfig;
 
@@ -67,7 +66,7 @@ namespace App
 
 				while (true)
 				{
-					Object.ObjectManager.Update();
+					ObjectManager.Instance.Update();
 				}
 			}
 			catch (Exception e)

+ 1 - 2
Server/Controller/Message/M2A_ReloadHandler.cs

@@ -1,7 +1,6 @@
 using System;
 using Base;
 using Model;
-using Object = Model.Object;
 
 namespace Controller
 {
@@ -13,7 +12,7 @@ namespace Controller
 			A2M_Reload a2MReload = new A2M_Reload();
 			try
 			{
-				Object.ObjectManager.Register("Controller", DllHelper.GetController());
+				ObjectManager.Instance.Register("Controller", DllHelper.GetController());
 			}
 			catch (Exception e)
 			{

+ 0 - 3
Server/Model/Server.Model.csproj

@@ -173,9 +173,6 @@
     <Compile Include="..\..\Unity\Assets\Scripts\Object\ILoader.cs">
       <Link>Object\ILoader.cs</Link>
     </Compile>
-    <Compile Include="..\..\Unity\Assets\Scripts\Object\IStart.cs">
-      <Link>Object\IStart.cs</Link>
-    </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Object\IUpdate.cs">
       <Link>Object\IUpdate.cs</Link>
     </Compile>

+ 3 - 4
Unity/Assets/Editor/EditorInit.cs

@@ -3,7 +3,6 @@ using Base;
 using UnityEditor;
 using UnityEngine;
 using Model;
-using Object = Model.Object;
 
 namespace MyEditor
 {
@@ -12,6 +11,7 @@ namespace MyEditor
 	{
 		static EditorInit()
 		{
+			ObjectManager.Instance.Register("Editor", typeof(EditorInit).Assembly);
 			EditorApplication.update += Update;
 		}
 
@@ -24,12 +24,11 @@ namespace MyEditor
 
 			try
 			{
-				Object.ObjectManager.Update();
+				ObjectManager.Instance.Update();
 			}
 			catch (Exception e)
 			{
-				Object.ObjectManager.Dispose();
-				Object.ObjectManager = new ObjectManager();
+				ObjectManager.Reset();
 				Log.Error(e.ToString());
 			}
 		}

+ 2 - 3
Unity/Assets/Editor/ObjectManagerToolsEditor/ObjectManagerToolsWindow.cs

@@ -7,14 +7,13 @@ public class ObjectManagerToolsWindow : EditorWindow
 	[MenuItem("Tools/ObjectManagerTools/显示未Dispose的对象")]
 	private static void ShowUnDisposeObjects()
 	{
-		Log.Info(Object.ObjectManager.ToString());
+		Log.Info(ObjectManager.Instance.ToString());
 	}
 	
 
 	[MenuItem("Tools/ObjectManagerTools/清除所有对象")]
 	private static void ClearAllObjects()
 	{
-		Object.ObjectManager.Dispose();
-		Object.ObjectManager = new ObjectManager();
+		ObjectManager.Reset();
 	}
 }

+ 1 - 3
Unity/Assets/Scripts/Component/ConfigComponent.cs

@@ -1,8 +1,6 @@
 using System;
 using System.Collections.Generic;
 using System.Reflection;
-using Base;
-using Object = Model.Object;
 
 namespace Model
 {
@@ -12,7 +10,7 @@ namespace Model
 
 		public void Load()
 		{
-			Assembly assembly = Object.ObjectManager.GetAssembly("Base");
+			Assembly assembly = ObjectManager.Instance.GetAssembly("Base");
 
 			this.allConfig = new Dictionary<Type, ICategory>();
 			Type[] types = assembly.GetTypes();

+ 1 - 2
Unity/Assets/Scripts/Component/EventComponent.cs

@@ -2,7 +2,6 @@
 using System.Collections.Generic;
 using System.Reflection;
 using Base;
-using Object = Model.Object;
 
 namespace Model
 {
@@ -30,7 +29,7 @@ namespace Model
 		public void Load()
 		{
 			this.allEvents = new Dictionary<EventIdType, List<object>>();
-			Assembly[] assemblies = Object.ObjectManager.GetAssemblies();
+			Assembly[] assemblies = ObjectManager.Instance.GetAssemblies();
 			foreach (Assembly assembly in assemblies)
 			{
 				Type[] types = assembly.GetTypes();

+ 1 - 1
Unity/Assets/Scripts/Component/MessageDispatherComponent.cs

@@ -40,7 +40,7 @@ namespace Model
 			this.handlers = new Dictionary<ushort, List<IMHandler>>();
 			this.messageOpcode = new Dictionary<Type, MessageAttribute>();
 
-			Assembly[] assemblies = Object.ObjectManager.GetAssemblies();
+			Assembly[] assemblies = ObjectManager.Instance.GetAssemblies();
 
 			foreach (Assembly assembly in assemblies)
 			{

+ 3 - 3
Unity/Assets/Scripts/Init.cs

@@ -8,8 +8,8 @@ namespace Model
 	{
 		private void Start()
 		{
-			Object.ObjectManager.Register("Model", typeof(Game).Assembly);
-			Object.ObjectManager.Register("Controller", DllHelper.GetController());
+			ObjectManager.Instance.Register("Model", typeof(Game).Assembly);
+			ObjectManager.Instance.Register("Controller", DllHelper.GetController());
 
 			Game.Scene.AddComponent<EventComponent>().Run(EventIdType.InitSceneStart);
 		}
@@ -18,7 +18,7 @@ namespace Model
 		{
 			try
 			{
-				Object.ObjectManager.Update();
+				ObjectManager.Instance.Update();
 			}
 			catch (Exception e)
 			{

+ 0 - 3
Unity/Assets/Scripts/Object/Component.cs

@@ -2,9 +2,6 @@
 
 namespace Model
 {
-	/// <summary>
-	/// Component的Id与Owner Entity Id一样
-	/// </summary>
 	[BsonKnownTypes(typeof(AConfigComponent))]
 	public abstract class Component : Object
 	{

+ 5 - 5
Unity/Assets/Scripts/Object/Entity.cs

@@ -66,7 +66,7 @@ namespace Model
 
 			this.components.Add(component);
 			this.componentDict.Add(component.GetType(), component);
-			ObjectManager.Awake(component.Id);
+			ObjectManager.Instance.Awake(component);
 			return component;
 		}
 
@@ -87,7 +87,7 @@ namespace Model
 
 			this.components.Add(component);
 			this.componentDict.Add(component.GetType(), component);
-			ObjectManager.Awake(component.Id, p1);
+			ObjectManager.Instance.Awake(component, p1);
 			return component;
 		}
 
@@ -108,7 +108,7 @@ namespace Model
 
 			this.components.Add(component);
 			this.componentDict.Add(component.GetType(), component);
-			ObjectManager.Awake(component.Id, p1, p2);
+			ObjectManager.Instance.Awake(component, p1, p2);
 			return component;
 		}
 
@@ -130,7 +130,7 @@ namespace Model
 
 			this.components.Add(component);
 			this.componentDict.Add(component.GetType(), component);
-			ObjectManager.Awake(component.Id, p1, p2, p3);
+			ObjectManager.Instance.Awake(component, p1, p2, p3);
 			return component;
 		}
 
@@ -147,7 +147,7 @@ namespace Model
 			}
 			this.components.Add(component);
 			this.componentDict.Add(component.GetType(), component);
-			ObjectManager.Awake(component.Id);
+			ObjectManager.Instance.Awake(component);
 		}
 
 		public void RemoveComponent<K>() where K : Component

+ 0 - 10
Unity/Assets/Scripts/Object/IStart.cs

@@ -1,10 +0,0 @@
-namespace Model
-{
-	/// <summary>
-	/// World的Componet实现该接口后,会在World.Start时调用该Start方法
-	/// </summary>
-	public interface IStart
-	{
-		void Start();
-	}
-}

+ 0 - 12
Unity/Assets/Scripts/Object/IStart.cs.meta

@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: ee0b99021f2abfb408ca33f2f551a1d8
-timeCreated: 1474942922
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 3 - 6
Unity/Assets/Scripts/Object/Object.cs

@@ -7,22 +7,19 @@ namespace Model
 {
 	public abstract class Object: IDisposable, ISupportInitialize
 	{
-		[BsonIgnore]
-		public static ObjectManager ObjectManager = new ObjectManager();
-
 		[BsonId]
 		public long Id { get; private set; }
 
 		protected Object()
 		{
 			Id = IdGenerater.GenerateId();
-			ObjectManager.Add(this);
+			ObjectManager.Instance.Add(this);
 		}
 
 		protected Object(long id)
 		{
 			this.Id = id;
-			ObjectManager.Add(this);
+			ObjectManager.Instance.Add(this);
 		}
 
 		public virtual void Dispose()
@@ -32,7 +29,7 @@ namespace Model
 				return;
 			}
 
-			ObjectManager.Remove(this.Id);
+			ObjectManager.Instance.Remove(this);
 
 			this.Id = 0;
 		}

+ 51 - 89
Unity/Assets/Scripts/Object/ObjectManager.cs

@@ -39,19 +39,33 @@ namespace Model
 
 		private Dictionary<Type, IObjectEvent> objectEvents;
 
-		private readonly Dictionary<long, Object> objects = new Dictionary<long, Object>();
+		private readonly HashSet<Object> objects = new HashSet<Object>();
+		private readonly HashSet<Object> updates = new HashSet<Object>();
+		private readonly HashSet<Object> loaders = new HashSet<Object>();
 
-		private List<long> starts = new List<long>();
-		private List<long> newStarts = new List<long>();
+		private static ObjectManager instance = new ObjectManager();
 
-		private List<long> updates = new List<long>(3000);
-		private List<long> newUpdates = new List<long>(3000);
+		public static ObjectManager Instance
+		{
+			get
+			{
+				return instance;
+			}
+		}
 
-		private readonly List<long> loaders = new List<long>();
+		private ObjectManager()
+		{
+		}
+
+		public static void Reset()
+		{
+			instance.Dispose();
+			instance = new ObjectManager();
+		}
 
 		public void Dispose()
 		{
-			foreach (Object o in this.objects.Values.ToArray())
+			foreach (Object o in this.objects.ToArray())
 			{
 				o.Dispose();
 			}
@@ -99,13 +113,8 @@ namespace Model
 
 		private void Load()
 		{
-			foreach (long id in this.loaders)
+			foreach (Object obj in this.loaders)
 			{
-				Object obj;
-				if (!this.objects.TryGetValue(id, out obj))
-				{
-					continue;
-				}
 				IObjectEvent objectEvent;
 				if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 				{
@@ -128,44 +137,51 @@ namespace Model
 				return;
 			}
 
-			this.objects.Add(obj.Id, obj);
+			this.objects.Add(obj);
 			IObjectEvent objectEvent;
 			if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 			{
 				return;
 			}
 
-			IStart iStart = objectEvent as IStart;
-			if (iStart != null)
-			{
-				this.newStarts.Add(obj.Id);
-			}
-
 			IUpdate iUpdate = objectEvent as IUpdate;
 			if (iUpdate != null)
 			{
-				this.newUpdates.Add(obj.Id);
+				this.updates.Add(obj);
 			}
 
 			ILoader iLoader = objectEvent as ILoader;
 			if (iLoader != null)
 			{
-				this.loaders.Add(obj.Id);
+				this.loaders.Add(obj);
 			}
 		}
 
-		public void Remove(long id)
+		public void Remove(Object obj)
 		{
-			this.objects.Remove(id);
-		}
+			this.objects.Remove(obj);
 
-		public void Awake(long id)
-		{
-			Object obj;
-			if (!objects.TryGetValue(id, out obj))
+			IObjectEvent objectEvent;
+			if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 			{
 				return;
 			}
+
+			IUpdate iUpdate = objectEvent as IUpdate;
+			if (iUpdate != null)
+			{
+				this.updates.Remove(obj);
+			}
+
+			ILoader iLoader = objectEvent as ILoader;
+			if (iLoader != null)
+			{
+				this.loaders.Remove(obj);
+			}
+		}
+
+		public void Awake(Object obj)
+		{
 			IObjectEvent objectEvent;
 			if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 			{
@@ -180,13 +196,8 @@ namespace Model
 			iAwake.Awake();
 		}
 
-		public void Awake<P1>(long id, P1 p1)
+		public void Awake<P1>(Object obj, P1 p1)
 		{
-			Object obj;
-			if (!objects.TryGetValue(id, out obj))
-			{
-				return;
-			}
 			IObjectEvent objectEvent;
 			if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 			{
@@ -201,13 +212,8 @@ namespace Model
 			iAwake.Awake(p1);
 		}
 
-		public void Awake<P1, P2>(long id, P1 p1, P2 p2)
+		public void Awake<P1, P2>(Object obj, P1 p1, P2 p2)
 		{
-			Object obj;
-			if (!objects.TryGetValue(id, out obj))
-			{
-				return;
-			}
 			IObjectEvent objectEvent;
 			if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 			{
@@ -222,13 +228,8 @@ namespace Model
 			iAwake.Awake(p1, p2);
 		}
 
-		public void Awake<P1, P2, P3>(long id, P1 p1, P2 p2, P3 p3)
+		public void Awake<P1, P2, P3>(Object obj, P1 p1, P2 p2, P3 p3)
 		{
-			Object obj;
-			if (!objects.TryGetValue(id, out obj))
-			{
-				return;
-			}
 			IObjectEvent objectEvent;
 			if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 			{
@@ -242,49 +243,11 @@ namespace Model
 			objectEvent.SetValue(obj);
 			iAwake.Awake(p1, p2, p3);
 		}
-
-		private void Start()
-		{
-			starts = newStarts;
-			newStarts = new List<long>();
-			foreach (long id in starts)
-			{
-				Object obj;
-				if (!this.objects.TryGetValue(id, out obj))
-				{
-					continue;
-				}
-				IObjectEvent objectEvent;
-				if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
-				{
-					continue;
-				}
-				IStart iStart = objectEvent as IStart;
-				if (iStart == null)
-				{
-					continue;
-				}
-				objectEvent.SetValue(obj);
-				iStart.Start();
-			}
-		}
 		
 		public void Update()
 		{
-			this.Start();
-
-			// 交换update
-			List<long> tmpUpdate = updates;
-			updates = newUpdates;
-			newUpdates = tmpUpdate;
-			newUpdates.Clear();
-			foreach (long id in updates)
+			foreach (Object obj in updates)
 			{
-				Object obj;
-				if (!objects.TryGetValue(id, out obj))
-				{
-					continue;
-				}
 				IObjectEvent objectEvent;
 				if (!objectEvents.TryGetValue(obj.GetType(), out objectEvent))
 				{
@@ -295,7 +258,6 @@ namespace Model
 				{
 					continue;
 				}
-				newUpdates.Add(id);
 				objectEvent.SetValue(obj);
 				try
 				{
@@ -311,7 +273,7 @@ namespace Model
 		public override string ToString()
 		{
 			var info = new Dictionary<string, int>();
-			foreach (Object obj in objects.Values)
+			foreach (Object obj in objects)
 			{
 				if (info.ContainsKey(obj.GetType().Name))
 				{
@@ -330,7 +292,7 @@ namespace Model
 				sb.Append($"{info[key],10} {key}\r\n");
 			}
 
-			sb.Append($"\r\n start: {newStarts.Count}, update: {newUpdates.Count} total: {this.objects.Count}");
+			sb.Append($"\r\n update: {this.updates.Count} total: {this.objects.Count}");
 			return sb.ToString();
 		}
 	}

+ 0 - 1
Unity/Unity.CSharp.csproj

@@ -130,7 +130,6 @@
     <Compile Include="Assets\Scripts\Object\Entity.cs" />
     <Compile Include="Assets\Scripts\Object\IAwake.cs" />
     <Compile Include="Assets\Scripts\Object\ILoader.cs" />
-    <Compile Include="Assets\Scripts\Object\IStart.cs" />
     <Compile Include="Assets\Scripts\Object\IUpdate.cs" />
     <Compile Include="Assets\Scripts\Object\Object.cs" />
     <Compile Include="Assets\Scripts\Object\ObjectEventAttribute.cs" />