Просмотр исходного кода

修复所有Disposer对象不能删除的bug

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

+ 0 - 1
Server/App/Program.cs

@@ -1,7 +1,6 @@
 using System;
 using Base;
 using Model;
-using MongoDB.Bson;
 using NLog;
 
 namespace App

+ 0 - 4
Unity/Assets/Scripts/Component/RobotComponent.cs

@@ -3,10 +3,6 @@
 	[EntityEvent(typeof(RobotComponent))]
 	public class RobotComponent : Component
     {
-		private void Awake()
-		{
-		}
-		
 		public override void Dispose()
 		{
 			if (this.Id == 0)

+ 12 - 3
Unity/Assets/Scripts/Entity/Game.cs

@@ -7,7 +7,7 @@ namespace Base
 {
 	public static class Game
 	{
-		private static readonly HashSet<Disposer> disposers = new HashSet<Disposer>();
+		private static HashSet<Disposer> disposers;
 
 		private static EntityEventManager entityEventManager;
 
@@ -21,6 +21,14 @@ namespace Base
 			}
 		}
 
+		public static HashSet<Disposer> Disposers
+		{
+			get
+			{
+				return disposers ?? (disposers = new HashSet<Disposer>());
+			}
+		}
+
 		public static void CloseScene()
 		{
 			scene.Dispose();
@@ -29,11 +37,12 @@ namespace Base
 
 		public static void ClearDisposers()
 		{
-			foreach (Disposer disposer in disposers)
+			foreach (Disposer disposer in Disposers)
 			{
 				disposer.Dispose();
 			}
 			disposers.Clear();
+			disposers = null;
 		}
 
 		public static EntityEventManager EntityEventManager
@@ -47,7 +56,7 @@ namespace Base
 		public static string DisposerInfo()
 		{
 			var info = new Dictionary<string, int>();
-			foreach (Disposer disposer in disposers)
+			foreach (Disposer disposer in Disposers)
 			{
 				if (info.ContainsKey(disposer.GetType().Name))
 				{

+ 4 - 0
Unity/Assets/Scripts/Object/Disposer.cs

@@ -7,15 +7,18 @@ namespace Model
 	{
 		protected Disposer(): base(IdGenerater.GenerateId())
 		{
+			Game.Disposers.Add(this);
 		}
 
 		protected Disposer(long id): base(id)
 		{
+			Game.Disposers.Add(this);
 		}
 
 		public virtual void Dispose()
 		{
 			this.Id = 0;
+			Game.Disposers.Remove(this);
 		}
 
 		public override void BeginInit()
@@ -24,6 +27,7 @@ namespace Model
 
 		public override void EndInit()
 		{
+			Game.Disposers.Add(this);
 		}
 	}
 }