Пример #1
0
 internal BaseCluster(BaseClusteringPluginConfiguration pluginConfiguration,
                      BaseClusterDirectory baseClusterDirectory, int instanceId, bool isGlobalCluster = false)
 {
     m_PluginConfiguration  = pluginConfiguration;
     m_BaseClusterDirectory = baseClusterDirectory;
     m_Buildables           = new List <Buildable>();
     InstanceId             = instanceId;
     IsGlobalCluster        = isGlobalCluster;
 }
        /// <summary>
        /// Creates a new instance of the BaseCluster Directory.
        /// </summary>
        /// <param name="plugin">The instance of the plugin.</param>
        /// <param name="pluginConfiguration">The configuration of the plugin.</param>
        /// <param name="buildableDirectory">The buildable directory, which should've been initialized beforehand.</param>
        public BaseClusterDirectory(BaseClusteringPlugin plugin, BaseClusteringPluginConfiguration pluginConfiguration,
                                    BuildableDirectory buildableDirectory)
        {
            m_Plugin = plugin;
            m_PluginConfiguration = pluginConfiguration;
            m_BuildableDirectory  = buildableDirectory;
            m_ClusterPool         = new ConcurrentBag <BaseCluster>();
            m_Clusters            = new List <BaseCluster>();

            PatchBuildableTransforms.OnBuildableTransformed += BuildableTransformed;
            buildableDirectory.OnBuildablesAdded            += BuildablesSpawned;
            buildableDirectory.OnBuildablesRemoved          += BuildablesDestroyed;
            SaveManager.onPostSave += Save;
        }
        /// <summary>
        /// Creates a new instance of the buildable directory.
        /// </summary>
        /// <param name="configuration">The plugin's configuration to utilize here.</param>
        public BuildableDirectory(BaseClusteringPluginConfiguration configuration)
        {
            m_BarricadeBuildables = new Dictionary <uint, BarricadeBuildable>(configuration.BuildableCapacity);
            m_StructureBuildables = new Dictionary <uint, StructureBuildable>(configuration.BuildableCapacity);
            m_BackgroundWorker    = new BackgroundWorker {
                WorkerSupportsCancellation = true
            };
            m_BackgroundWorker.DoWork  += HandleDeferred;
            m_DeferredRemove            = new ConcurrentQueue <Buildable>();
            m_DeferredAdd               = new ConcurrentQueue <Buildable>();
            m_BackgroundWorkerEnd       = new AutoResetEvent(false);
            m_BackgroundWorkerSleepTime = configuration.BackgroundWorkerSleepTime;
            _instance = this;

            StructureManager.onStructureSpawned         += StructureSpawned;
            BarricadeManager.onBarricadeSpawned         += BarricadeSpawned;
            PatchBuildablesDestroy.OnBuildableDestroyed += BuildableDestroyed;

            m_BackgroundWorker.RunWorkerAsync();
        }