public void DisposeColliderSystem() { if (JobHandleList.IsCreated) { JobHandleList.Dispose(); } for (int i = 0; i <= PackageColliderInfoList.Count - 1; i++) { VegetationPackageColliderInfo vegetationPackageColliderInfo = PackageColliderInfoList[i]; for (int j = 0; j <= vegetationPackageColliderInfo.ColliderManagerList.Count - 1; j++) { ColliderManager colliderManager = vegetationPackageColliderInfo.ColliderManagerList[j]; if (colliderManager != null) { colliderManager.OnCreateColliderDelegate -= OnCreateCollider; colliderManager.OnBeforeDestroyColliderDelegate -= OnBeforeDestroyCollider; } colliderManager?.Dispose(); } vegetationPackageColliderInfo.ColliderManagerList.Clear(); } PackageColliderInfoList.Clear(); VisibleVegetationCellSelector?.Dispose(); VisibleVegetationCellSelector = null; DestroyColliderParent(); }
public void DisposeRuntimePrefabSystem() { for (int i = 0; i <= PackageRuntimePrefabInfoList.Count - 1; i++) { VegetationPackageRuntimePrefabInfo packageRuntimePrefabInfo = PackageRuntimePrefabInfoList[i]; for (int j = 0; j <= packageRuntimePrefabInfo.RuntimePrefabManagerList.Count - 1; j++) { VegetationItemRuntimePrefabInfo vegetationItemRuntimePrefabInfo = packageRuntimePrefabInfo.RuntimePrefabManagerList[j]; for (int k = 0; k <= vegetationItemRuntimePrefabInfo.RuntimePrefabManagerList.Count - 1; k++) { RuntimePrefabManager runtimePrefabManager = vegetationItemRuntimePrefabInfo.RuntimePrefabManagerList[k]; runtimePrefabManager?.Dispose(); } } packageRuntimePrefabInfo.RuntimePrefabManagerList.Clear(); } PackageRuntimePrefabInfoList.Clear(); VisibleVegetationCellSelector?.Dispose(); VisibleVegetationCellSelector = null; DestroyRuntimePrefabParent(); }
public ColliderManager(VisibleVegetationCellSelector visibleVegetationCellSelector, VegetationSystemPro vegetationSystemPro, VegetationItemInfoPro vegetationItemInfoPro, Transform colliderParent, bool showColliders) { _showColliders = showColliders; _vegetationSystemPro = vegetationSystemPro; _vegetationItemInfoPro = vegetationItemInfoPro; float cullingDistance = vegetationSystemPro.VegetationSettings.GetVegetationDistance() * vegetationItemInfoPro.ColliderDistanceFactor; VegetationItemSelector = new VegetationItemSelector(visibleVegetationCellSelector, vegetationSystemPro, vegetationItemInfoPro, false, 1, 0) { CullingDistance = cullingDistance }; VegetationItemSelector.OnVegetationItemVisibleDelegate += OnVegetationItemVisible; VegetationItemSelector.OnVegetationItemInvisibleDelegate += OnVegetationItemInvisible; VegetationItemSelector.OnVegetationCellInvisibleDelegate += OnVegetationCellInvisible; VegetationItemModelInfo vegetationItemModelInfo = vegetationSystemPro.GetVegetationItemModelInfo(vegetationItemInfoPro.VegetationItemID); ColliderPool = new ColliderPool(vegetationItemInfoPro, vegetationItemModelInfo, vegetationSystemPro, colliderParent, _showColliders); RuntimePrefabStorage = new RuntimePrefabStorage(ColliderPool); }
public void SetupRuntimePrefabSystem() { if (!VegetationSystemPro) { return; } DisposeRuntimePrefabSystem(); CreateRuntimePrefabParent(); VisibleVegetationCellSelector = new VisibleVegetationCellSelector(); for (int i = 0; i <= VegetationSystemPro.VegetationPackageProList.Count - 1; i++) { VegetationPackagePro vegetationPackagePro = VegetationSystemPro.VegetationPackageProList[i]; VegetationPackageRuntimePrefabInfo vegetationPackageRuntimePrefabInfo = new VegetationPackageRuntimePrefabInfo(); for (int j = 0; j <= vegetationPackagePro.VegetationInfoList.Count - 1; j++) { VegetationItemInfoPro vegetationItemInfoPro = vegetationPackagePro.VegetationInfoList[j]; VegetationItemRuntimePrefabInfo vegetationItemRuntimePrefabInfo = new VegetationItemRuntimePrefabInfo(); for (int k = 0; k <= vegetationItemInfoPro.RuntimePrefabRuleList.Count - 1; k++) { RuntimePrefabRule runtimePrefabRule = vegetationItemInfoPro.RuntimePrefabRuleList[k]; RuntimePrefabManager runtimePrefabManager = new RuntimePrefabManager(VisibleVegetationCellSelector, VegetationSystemPro, vegetationItemInfoPro, runtimePrefabRule, _runtimePrefabParent, ShowRuntimePrefabs); vegetationItemRuntimePrefabInfo.RuntimePrefabManagerList.Add(runtimePrefabManager); } vegetationPackageRuntimePrefabInfo.RuntimePrefabManagerList.Add(vegetationItemRuntimePrefabInfo); } PackageRuntimePrefabInfoList.Add(vegetationPackageRuntimePrefabInfo); } VisibleVegetationCellSelector.Init(VegetationSystemPro); }
public void SetupColliderSystem() { if (!VegetationSystemPro) { return; } DisposeColliderSystem(); JobHandleList = new NativeList <JobHandle>(64, Allocator.Persistent); CreateColliderParent(); VisibleVegetationCellSelector = new VisibleVegetationCellSelector(); for (int i = 0; i <= VegetationSystemPro.VegetationPackageProList.Count - 1; i++) { VegetationPackagePro vegetationPackagePro = VegetationSystemPro.VegetationPackageProList[i]; VegetationPackageColliderInfo vegetationPackageColliderInfo = new VegetationPackageColliderInfo(); for (int j = 0; j <= vegetationPackagePro.VegetationInfoList.Count - 1; j++) { VegetationItemInfoPro vegetationItemInfoPro = vegetationPackagePro.VegetationInfoList[j]; if (vegetationItemInfoPro.ColliderType != ColliderType.Disabled) { ColliderManager tmpColliderManager = new ColliderManager(VisibleVegetationCellSelector, VegetationSystemPro, vegetationItemInfoPro, _colliderParent, ShowColliders); tmpColliderManager.OnCreateColliderDelegate += OnCreateCollider; tmpColliderManager.OnBeforeDestroyColliderDelegate += OnBeforeDestroyCollider; vegetationPackageColliderInfo.ColliderManagerList.Add(tmpColliderManager); } else { vegetationPackageColliderInfo.ColliderManagerList.Add(null); } } PackageColliderInfoList.Add(vegetationPackageColliderInfo); } VisibleVegetationCellSelector.Init(VegetationSystemPro); }
public VegetationItemSelector(VisibleVegetationCellSelector visibleVegetationCellSelector, VegetationSystemPro vegetationSystemPro, VegetationItemInfoPro vegetationItemInfoPro, bool useSpawnChance, float spawnChance, int spawnSeed) { _useSpawnChance = useSpawnChance; _spawnChance = spawnChance; _spawnSeed = spawnSeed; _visibleVegetationCellSelector = visibleVegetationCellSelector; _vegetationSystemPro = vegetationSystemPro; VegetationItemID = vegetationItemInfoPro.VegetationItemID; _vegetationItemIndexes = _vegetationSystemPro.GetVegetationItemIndexes(VegetationItemID); _visibleVegetationCellSelector.OnVegetationCellVisibleDelegate += OnVegetationCellVisible; _visibleVegetationCellSelector.OnVegetationCellInvisibleDelegate += OnVegetationCellInvisible; _vegetationSystemPro.OnVegetationCellLoaded += OnVegetationCellLoaded; InstanceList = new NativeList <ItemSelectorInstanceInfo>(512, Allocator.Persistent); _removeVegetationCellIndexList = new NativeList <int>(64, Allocator.Persistent); _visibilityChangedIndexList = new NativeList <int>(512, Allocator.Persistent); }
public RuntimePrefabManager(VisibleVegetationCellSelector visibleVegetationCellSelector, VegetationSystemPro vegetationSystemPro, VegetationItemInfoPro vegetationItemInfoPro, RuntimePrefabRule runtimePrefabRule, Transform prefabParent, bool showPrefabsInHierarchy) { _showPrefabsInHierarchy = showPrefabsInHierarchy; _vegetationSystemPro = vegetationSystemPro; _runtimePrefabRule = runtimePrefabRule; float cullingDistance = vegetationSystemPro.VegetationSettings.GetVegetationDistance() * runtimePrefabRule.DistanceFactor; VegetationItemSelector = new VegetationItemSelector(visibleVegetationCellSelector, vegetationSystemPro, vegetationItemInfoPro, true, _runtimePrefabRule.SpawnFrequency, _runtimePrefabRule.Seed) { CullingDistance = cullingDistance }; VegetationItemSelector.OnVegetationItemVisibleDelegate += OnVegetationItemVisible; VegetationItemSelector.OnVegetationItemInvisibleDelegate += OnVegetationItemInvisible; VegetationItemSelector.OnVegetationCellInvisibleDelegate += OnVegetationCellInvisible; RuntimePrefabPool = new RuntimePrefabPool(_runtimePrefabRule, vegetationItemInfoPro, prefabParent, _showPrefabsInHierarchy); RuntimePrefabStorage = new RuntimePrefabStorage(RuntimePrefabPool); }