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