public void OnTreePositionFound(object treePlacementObject) { Random random = new Random(135); ThreadsafePlaceable threadsafePlaceable = (ThreadsafePlaceable)treePlacementObject; Vector2 position = _terrainGenerator.GetTerrainChunkPosition(threadsafePlaceable.Position.x, threadsafePlaceable.Position.z); Debug.Log("Tree Position Terrain Chunk: " + position); TerrainChunk terrainChunk = _terrainGenerator.GetTerrainChunk(position); TreeBehaviour treeBehaviour = (TreeBehaviour)threadsafePlaceable.MapPlaceable; treeBehaviour.transform.position = threadsafePlaceable.Position; treeBehaviour.gameObject.name = "Tree: " + threadsafePlaceable.Position; foreach (NeededSpace neededSpace in threadsafePlaceable.NeededSpaces) { ProceduralNeededSpace proceduralNeededSpace = (ProceduralNeededSpace)neededSpace; GameObject prefab = null; if (neededSpace.TerrainType == TerrainGenerator.TerrainType.Coast) { prefab = _coastModel; } else if (neededSpace.TerrainType == TerrainGenerator.TerrainType.Flatland) { prefab = _flatlandModel; } else if (neededSpace.TerrainType == TerrainGenerator.TerrainType.Hill) { prefab = _hillModel; } else if (neededSpace.TerrainType == TerrainGenerator.TerrainType.Mountain) { prefab = _mountainModel; } else { continue; } Vector3 absolutePosition = neededSpace.UsedCoordinate + threadsafePlaceable.Position; Vector2Int pos = new Vector2Int((int)absolutePosition.x, (int)absolutePosition.z); if (terrainChunk.EnvDictionary.ContainsKey(pos)) { continue; } float proceduralScalar = Mathf.Clamp(((proceduralNeededSpace.NoiseValue * 100f) % 10) / 7, 0.8f, 2f); GameObject go = GameObject.Instantiate(prefab, absolutePosition, Quaternion.Euler(0f, proceduralScalar * 360f, 0f), treeBehaviour.transform); // Debug.Log(proceduralNeededSpace.NoiseValue + " _ " + proceduralScalar); for (int i = 0; i < go.transform.childCount; i++) { go.transform.GetChild(i).localScale *= proceduralScalar; } terrainChunk.EnvDictionary.Add(pos, go); } if (!_placementController.PlaceObject(treeBehaviour)) { GameObject.Destroy(treeBehaviour.gameObject); } }