/// <summary> /// Generates the visual remeshing tasks, as needed. /// </summary> /// <param name="properties">The chunk properties.</param> /// <param name="tasks">The task list to add to.</param> private void GenerateVisuals(ChunkProperties properties, RemeshTaskStack taskStack) { List <int> materials = new List <int>(); foreach (var pos in BlockIterator(properties.ChunkSize.Value)) { var type = properties.GetBlock(pos); if (!type.IsVisible) { continue; } for (int j = 0; j < 6; j++) { var material = type.GetMaterialID(j); if (materials.Contains(material)) { continue; } materials.Add(material); taskStack.AddTask(new VisualRemeshTask(properties, material)); } } }
/// <summary> /// Generates the collision remesh task, as needed. /// </summary> /// <param name="properties">The chunk properties.</param> /// <param name="tasks">The task list to add to.</param> private void GenerateCollision(ChunkProperties properties, RemeshTaskStack taskStack) { foreach (var pos in BlockIterator(properties.ChunkSize.Value)) { var type = properties.GetBlock(pos); if (type.IsSolid) { taskStack.AddTask(new CollisionRemeshTask(properties)); return; } } }
/// <summary> /// Creates a new chunk remesh event. /// </summary> /// <param name="task">The task information.</param> internal ChunkRemeshEvent(RemeshTaskStack task) => Task = task;
/// <inheritdoc cref="IRemeshTask"/> public void CreateTasks(ChunkProperties properties, RemeshTaskStack taskStack) { GenerateVisuals(properties, taskStack); GenerateCollision(properties, taskStack); }