//----------------------------------------------------------------------------- // HelperClasses.cs // // Microsoft XNA Community Game Platform // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace ShatterEffectProcessor { /// /// Enumerates each element 3 times, once for each vertex in a triangle /// internal class ReplicateTriangleDataToEachVertex : IEnumerable { private IEnumerable perTriangleData; public ReplicateTriangleDataToEachVertex(IEnumerable perTriangleData) { this.perTriangleData = perTriangleData; } public IEnumerator GetEnumerator() { foreach (T item in perTriangleData) { for (int i = 0; i < 3; i++) { // Return the same center value for every 3 vertices. yield return item; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } /// /// Enumerates a set of random vectors such that each element of those vectors /// are in the range [-1,1] /// internal class RandomVectorEnumerable : IEnumerable { private Random random = new Random(); private int count; public RandomVectorEnumerable(int count) { this.count = count; } public IEnumerator GetEnumerator() { for (int i = 0; i < count; i++) { Vector3 vector = new Vector3((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()); vector *= 2; vector -= Vector3.One; yield return vector; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }