Example #1
0
            /// <summary>
            /// インスタンスを生成します。
            /// </summary>
            /// <param name="manager">クラスタ マネージャ。</param>
            public Cluster(ClusterManager manager)
            {
                if (manager == null) throw new ArgumentNullException("manager");

                this.manager = manager;

                var size = manager.size;
                partitionsByPosition = new Dictionary<IntVector3, Partition>(size.X * size.Y * size.Z);
            }
        /// <summary>
        /// インスタンスを生成します。
        /// 指定する設定は、パーティション マネージャのインスタンス化後に外部から変更しても反映されません。
        /// </summary>
        /// <param name="settings">パーティション マネージャ設定。</param>
        public PartitionManager(Settings settings)
        {
            if (settings == null) throw new ArgumentNullException("settings");

            PartitionSize = settings.PartitionSize;

            clusterManager = new ClusterManager(settings.ClusterSize, settings.PartitionSize);
            partitions = new Queue<Partition>();

            activationCapacity = settings.ActivationCapacity;
            passivationCapacity = settings.PassivationCapacity;
            passivationSearchCapacity = settings.PassivationSearchCapacity;

            activatingParitions = new ConcurrentDictionary<IntVector3, Partition>(activationCapacity, activationCapacity);
            passivatingPartitions = new ConcurrentDictionary<IntVector3, Partition>(passivationCapacity, passivationCapacity);

            maxActiveVolume = settings.MaxActiveVolume ?? new DefaultActiveVolume(8);

            var minActiveVolume = settings.MinActiveVolume ?? new DefaultActiveVolume(4);
            activationCandidateFinder = new ActivationCandidateFinder(this, minActiveVolume, settings.PriorActiveDistance);

            activatePartitionAction = new WaitCallback(ActivatePartition);
            passivatePartitionAction = new WaitCallback(PassivatePartition);
        }