/// <summary>Only call me if you are <see cref="EngineSystemAttribute.NewInstance"/></summary> /// <param name="prototype">The <see cref="BlamEngineSystem"/> used to describe this instance</param> internal void InitializeForNewInstance(BlamEngineSystem prototype) { Prototype = prototype; mActiveInBlamEngine = true; mRootBuildHandleBaseline = Prototype.Engine.RootBuildHandle; // ReSharper disable once InconsistentlySynchronizedField - method is construction, don't need a lock if (Prototype.SystemRequiresReferenceTracking) { mReferencesByBuildCounts = new Dictionary <EngineBuildHandle, int>(); } }
/// <summary>Create a new instance of the system. Only call me if you are <see cref="BlamEngine"/>!</summary> /// <param name="prototype"></param> /// <returns></returns> internal EngineSystemBase NewInstance(BlamEngineSystem prototype) { Contract.Requires(prototype != null); Contract.Assert(mFactoryMethod != null, "Rerun engine unit tests"); var system = mFactoryMethod(); Contract.Assert(system != null); system.InitializeForNewInstance(prototype); return(system); }