Przeglądaj źródła

Entity跟Component加上对象池

tanghai 8 lat temu
rodzic
commit
7bccbe500f

+ 14 - 11
Server/Model/Server.Model.csproj

@@ -77,37 +77,40 @@
       <Link>Message\RpcException.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\Component.cs">
-      <Link>Object\Component.cs</Link>
+      <Link>Base\Object\Component.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\ComponentFactory.cs">
-      <Link>Object\ComponentFactory.cs</Link>
+      <Link>Base\Object\ComponentFactory.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\Disposer.cs">
-      <Link>Object\Disposer.cs</Link>
+      <Link>Base\Object\Disposer.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\Entity.cs">
-      <Link>Object\Entity.cs</Link>
+      <Link>Base\Object\Entity.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\EntityFactory.cs">
-      <Link>Object\EntityFactory.cs</Link>
+      <Link>Base\Object\EntityFactory.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\IAwake.cs">
-      <Link>Object\IAwake.cs</Link>
+      <Link>Base\Object\IAwake.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\ILoad.cs">
-      <Link>Object\ILoad.cs</Link>
+      <Link>Base\Object\ILoad.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\IStart.cs">
-      <Link>Object\IStart.cs</Link>
+      <Link>Base\Object\IStart.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\IUpdate.cs">
-      <Link>Object\IUpdate.cs</Link>
+      <Link>Base\Object\IUpdate.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\Object.cs">
-      <Link>Object\Object.cs</Link>
+      <Link>Base\Object\Object.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\ObjectEventAttribute.cs">
-      <Link>Object\ObjectEventAttribute.cs</Link>
+      <Link>Base\Object\ObjectEventAttribute.cs</Link>
+    </Compile>
+    <Compile Include="..\..\Unity\Assets\Scripts\Base\Object\ObjectPool.cs">
+      <Link>Base\Object\ObjectPool.cs</Link>
     </Compile>
     <Compile Include="..\..\Unity\Assets\Scripts\Component\ConfigComponent.cs">
       <Link>Component\ConfigComponent.cs</Link>

+ 5 - 7
Unity/Assets/Scripts/Base/Object/ComponentFactory.cs

@@ -1,12 +1,10 @@
-using System;
-
-namespace Model
+namespace Model
 {
 	public static class ComponentFactory
 	{
 		public static T Create<T>(Entity entity) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer);
 			return disposer;
@@ -14,7 +12,7 @@ namespace Model
 
 		public static T Create<T, A>(Entity entity, A a) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer, a);
 			return disposer;
@@ -22,7 +20,7 @@ namespace Model
 
 		public static T Create<T, A, B>(Entity entity, A a, B b) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer, a, b);
 			return disposer;
@@ -30,7 +28,7 @@ namespace Model
 
 		public static T Create<T, A, B, C>(Entity entity, A a, B b, C c) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer, a, b, c);
 			return disposer;

+ 1 - 0
Unity/Assets/Scripts/Base/Object/Disposer.cs

@@ -19,6 +19,7 @@ namespace Model
 		public virtual void Dispose()
 		{
 			this.Id = 0;
+			ObjectPool.Instance.Recycle(this);
 		}
 	}
 }

+ 8 - 8
Unity/Assets/Scripts/Base/Object/EntityFactory.cs

@@ -6,35 +6,35 @@ namespace Model
 	{
 		public static T Create<T>() where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(A a) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T Create<T, A, B>(A a, B b) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T Create<T, A, B, C>(A a, B b, C c) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 
 		public static T CreateWithId<T>(long id) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer);
 			return disposer;
@@ -42,7 +42,7 @@ namespace Model
 
 		public static T CreateWithId<T, A>(long id, A a) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer, a);
 			return disposer;
@@ -50,7 +50,7 @@ namespace Model
 
 		public static T CreateWithId<T, A, B>(long id, A a, B b) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer, a, b);
 			return disposer;
@@ -58,7 +58,7 @@ namespace Model
 
 		public static T CreateWithId<T, A, B, C>(long id, A a, B b, C c) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer, a, b, c);
 			return disposer;

+ 64 - 0
Unity/Assets/Scripts/Base/Object/ObjectPool.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+
+namespace Model
+{
+    public class ObjectPool
+    {
+	    private static ObjectPool instance;
+
+	    public static ObjectPool Instance
+	    {
+		    get
+		    {
+			    return instance ?? new ObjectPool();
+		    }
+	    }
+
+        private readonly Dictionary<Type, EQueue<Disposer>> dictionary = new Dictionary<Type, EQueue<Disposer>>();
+
+        private ObjectPool()
+        {
+        }
+
+	    public static void Close()
+	    {
+		    instance = null;
+	    }
+
+        public Disposer Fetch(Type type)
+        {
+	        EQueue<Disposer> queue;
+            if (!this.dictionary.TryGetValue(type, out queue))
+            {
+                queue = new EQueue<Disposer>();
+                this.dictionary.Add(type, queue);
+            }
+	        Disposer obj;
+			if (queue.Count > 0)
+            {
+				obj = queue.Dequeue();
+	            obj.Id = IdGenerater.GenerateId();
+	            return obj;
+            }
+	        obj = (Disposer)Activator.CreateInstance(type);
+            return obj;
+        }
+
+        public T Fetch<T>() where T: Disposer
+		{
+            return (T) this.Fetch(typeof(T));
+        }
+        
+        public void Recycle(Disposer obj)
+        {
+            Type type = obj.GetType();
+	        EQueue<Disposer> queue;
+            if (!this.dictionary.TryGetValue(type, out queue))
+            {
+                queue = new EQueue<Disposer>();
+            }
+            queue.Enqueue(obj);
+        }
+    }
+}

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

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

+ 4 - 4
Unity/Hotfix/Base/Object/ComponentFactory.cs

@@ -6,7 +6,7 @@ namespace Hotfix
 	{
 		public static T Create<T>(Entity entity) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer);
 			return disposer;
@@ -14,7 +14,7 @@ namespace Hotfix
 
 		public static T Create<T, A>(Entity entity, A a) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer, a);
 			return disposer;
@@ -22,7 +22,7 @@ namespace Hotfix
 
 		public static T Create<T, A, B>(Entity entity, A a, B b) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer, a, b);
 			return disposer;
@@ -30,7 +30,7 @@ namespace Hotfix
 
 		public static T Create<T, A, B, C>(Entity entity, A a, B b, C c) where T : Component
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Entity = entity;
 			ObjectEvents.Instance.Awake(disposer, a, b, c);
 			return disposer;

+ 8 - 8
Unity/Hotfix/Base/Object/EntityFactory.cs

@@ -6,35 +6,35 @@ namespace Hotfix
 	{
 		public static T Create<T>() where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer);
 			return disposer;
 		}
 
 		public static T Create<T, A>(A a) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer, a);
 			return disposer;
 		}
 
 		public static T Create<T, A, B>(A a, B b) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer, a, b);
 			return disposer;
 		}
 
 		public static T Create<T, A, B, C>(A a, B b, C c) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			ObjectEvents.Instance.Awake(disposer, a, b, c);
 			return disposer;
 		}
 
 		public static T CreateWithId<T>(long id) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer);
 			return disposer;
@@ -42,7 +42,7 @@ namespace Hotfix
 
 		public static T CreateWithId<T, A>(long id, A a) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer, a);
 			return disposer;
@@ -50,7 +50,7 @@ namespace Hotfix
 
 		public static T CreateWithId<T, A, B>(long id, A a, B b) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer, a, b);
 			return disposer;
@@ -58,7 +58,7 @@ namespace Hotfix
 
 		public static T CreateWithId<T, A, B, C>(long id, A a, B b, C c) where T : Disposer
 		{
-			T disposer = (T)Activator.CreateInstance(typeof(T));
+			T disposer = ObjectPool.Instance.Fetch<T>();
 			disposer.Id = id;
 			ObjectEvents.Instance.Awake(disposer, a, b, c);
 			return disposer;

+ 65 - 0
Unity/Hotfix/Base/Object/ObjectPool.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using Model;
+
+namespace Hotfix
+{
+    public class ObjectPool
+    {
+	    private static ObjectPool instance;
+
+	    public static ObjectPool Instance
+	    {
+		    get
+		    {
+			    return instance ?? new ObjectPool();
+		    }
+	    }
+
+        private readonly Dictionary<Type, EQueue<Disposer>> dictionary = new Dictionary<Type, EQueue<Disposer>>();
+
+        private ObjectPool()
+        {
+        }
+
+	    public static void Close()
+	    {
+		    instance = null;
+	    }
+
+        public Disposer Fetch(Type type)
+        {
+	        EQueue<Disposer> queue;
+            if (!this.dictionary.TryGetValue(type, out queue))
+            {
+                queue = new EQueue<Disposer>();
+                this.dictionary.Add(type, queue);
+            }
+	        Disposer obj;
+			if (queue.Count > 0)
+            {
+				obj = queue.Dequeue();
+	            obj.Id = IdGenerater.GenerateId();
+	            return obj;
+            }
+	        obj = (Disposer)Activator.CreateInstance(type);
+            return obj;
+        }
+
+        public T Fetch<T>() where T: Disposer
+		{
+            return (T) this.Fetch(typeof(T));
+        }
+        
+        public void Recycle(Disposer obj)
+        {
+            Type type = obj.GetType();
+	        EQueue<Disposer> queue;
+            if (!this.dictionary.TryGetValue(type, out queue))
+            {
+                queue = new EQueue<Disposer>();
+            }
+            queue.Enqueue(obj);
+        }
+    }
+}

+ 1 - 0
Unity/Hotfix/Unity.Hotfix.csproj

@@ -70,6 +70,7 @@
     <Compile Include="Base\Object\IUpdate.cs" />
     <Compile Include="Base\Object\Object.cs" />
     <Compile Include="Base\Object\ObjectEvents.cs" />
+    <Compile Include="Base\Object\ObjectPool.cs" />
     <Compile Include="Base\Other\IUIFactory.cs" />
     <Compile Include="Component\EventComponent.cs" />
     <Compile Include="Component\GameObjectComponent.cs" />

+ 4 - 4
Unity/Unity.Editor.csproj

@@ -11,7 +11,7 @@
     <FileAlignment>512</FileAlignment>
     <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <TargetFrameworkProfile></TargetFrameworkProfile>
     <CompilerResponseFile></CompilerResponseFile>
     <UnityProjectType>Editor:5</UnityProjectType>
@@ -43,7 +43,7 @@
   <ItemGroup>
     <Reference Include="mscorlib" />
     <Reference Include="System" />
-    <Reference Include="System.XML" />
+    <Reference Include="System.Xml" />
     <Reference Include="System.Core" />
     <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.Xml.Linq" />
@@ -75,7 +75,7 @@
       <HintPath>Library\UnityAssemblies\UnityEngine.TestRunner.dll</HintPath>
     </Reference>
     <Reference Include="nunit.framework">
-      <HintPath>Library\UnityAssemblies\nunit.framework.dll</HintPath>
+      <HintPath>C:\Apps\Unity\Editor\Data/Managed/nunit.framework.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine.Timeline">
       <HintPath>Library\UnityAssemblies\UnityEngine.Timeline.dll</HintPath>
@@ -198,4 +198,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />
-</Project>
+</Project>

+ 4 - 4
Unity/Unity.Plugins.csproj

@@ -11,7 +11,7 @@
     <FileAlignment>512</FileAlignment>
     <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <TargetFrameworkProfile></TargetFrameworkProfile>
     <CompilerResponseFile></CompilerResponseFile>
     <UnityProjectType>GamePlugins:3</UnityProjectType>
@@ -43,7 +43,7 @@
   <ItemGroup>
     <Reference Include="mscorlib" />
     <Reference Include="System" />
-    <Reference Include="System.XML" />
+    <Reference Include="System.Xml" />
     <Reference Include="System.Core" />
     <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.Xml.Linq" />
@@ -63,7 +63,7 @@
       <HintPath>Library\UnityAssemblies\UnityEngine.TestRunner.dll</HintPath>
     </Reference>
     <Reference Include="nunit.framework">
-      <HintPath>Library\UnityAssemblies\nunit.framework.dll</HintPath>
+      <HintPath>C:\Apps\Unity\Editor\Data/Managed/nunit.framework.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine.Timeline">
       <HintPath>Library\UnityAssemblies\UnityEngine.Timeline.dll</HintPath>
@@ -518,4 +518,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />
-</Project>
+</Project>

+ 5 - 4
Unity/Unity.csproj

@@ -11,7 +11,7 @@
     <FileAlignment>512</FileAlignment>
     <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <TargetFrameworkProfile></TargetFrameworkProfile>
     <CompilerResponseFile></CompilerResponseFile>
     <UnityProjectType>Game:1</UnityProjectType>
@@ -43,7 +43,7 @@
   <ItemGroup>
     <Reference Include="mscorlib" />
     <Reference Include="System" />
-    <Reference Include="System.XML" />
+    <Reference Include="System.Xml" />
     <Reference Include="System.Core" />
     <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.Xml.Linq" />
@@ -63,7 +63,7 @@
       <HintPath>Library\UnityAssemblies\UnityEngine.TestRunner.dll</HintPath>
     </Reference>
     <Reference Include="nunit.framework">
-      <HintPath>Library\UnityAssemblies\nunit.framework.dll</HintPath>
+      <HintPath>C:\Apps\Unity\Editor\Data/Managed/nunit.framework.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine.Timeline">
       <HintPath>Library\UnityAssemblies\UnityEngine.Timeline.dll</HintPath>
@@ -487,6 +487,7 @@
     <Compile Include="Assets\Scripts\Base\Object\Object.cs" />
     <Compile Include="Assets\Scripts\Base\Object\ObjectEventAttribute.cs" />
     <Compile Include="Assets\Scripts\Base\Object\ObjectEvents.cs" />
+    <Compile Include="Assets\Scripts\Base\Object\ObjectPool.cs" />
     <Compile Include="Assets\Scripts\Base\QueueDictionary.cs" />
     <Compile Include="Assets\Scripts\Base\TryLocker.cs" />
     <Compile Include="Assets\Scripts\Base\UI\LayerNames.cs" />
@@ -554,4 +555,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />
-</Project>
+</Project>

+ 25 - 23
Unity/Unity.sln

@@ -1,13 +1,12 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2017
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Plugins", "Unity.Plugins.csproj", "{D1FDB199-0FB7-099D-3771-C6A942E4E326}"
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-firstpass", "Assembly-CSharp-firstpass.csproj", "{2662B409-6332-1E56-D797-C9025C53BDD6}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity", "Unity.csproj", "{CF118143-7E37-744F-BE45-3F55345FEC40}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Editor", "Unity.Editor.csproj", "{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{6311E6C6-0A20-383B-320B-694068DE37A5}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Hotfix", "Hotfix\Unity.Hotfix.csproj", "{40533600-4E69-4F7D-A924-E1A3B4127255}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor-firstpass", "Assembly-CSharp-Editor-firstpass.csproj", "{F534D6C4-3368-032B-289C-A943CC171719}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -15,24 +14,27 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{D1FDB199-0FB7-099D-3771-C6A942E4E326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D1FDB199-0FB7-099D-3771-C6A942E4E326}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D1FDB199-0FB7-099D-3771-C6A942E4E326}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D1FDB199-0FB7-099D-3771-C6A942E4E326}.Release|Any CPU.Build.0 = Release|Any CPU
-		{CF118143-7E37-744F-BE45-3F55345FEC40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{CF118143-7E37-744F-BE45-3F55345FEC40}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{CF118143-7E37-744F-BE45-3F55345FEC40}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{CF118143-7E37-744F-BE45-3F55345FEC40}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Release|Any CPU.Build.0 = Release|Any CPU
-		{40533600-4E69-4F7D-A924-E1A3B4127255}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{40533600-4E69-4F7D-A924-E1A3B4127255}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{40533600-4E69-4F7D-A924-E1A3B4127255}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{40533600-4E69-4F7D-A924-E1A3B4127255}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2662B409-6332-1E56-D797-C9025C53BDD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2662B409-6332-1E56-D797-C9025C53BDD6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2662B409-6332-1E56-D797-C9025C53BDD6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2662B409-6332-1E56-D797-C9025C53BDD6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F534D6C4-3368-032B-289C-A943CC171719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F534D6C4-3368-032B-289C-A943CC171719}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F534D6C4-3368-032B-289C-A943CC171719}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F534D6C4-3368-032B-289C-A943CC171719}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(MonoDevelopProperties) = preSolution
+		StartupItem = Assembly-CSharp.csproj
+	EndGlobalSection
 EndGlobal