/// <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); }