package uk.org.squirm3.engine.generator;
import java.util.ArrayList;
import java.util.Collection;
import uk.org.squirm3.model.Atom;
import uk.org.squirm3.model.Atoms;
import uk.org.squirm3.model.Configuration;
import uk.org.squirm3.model.type.AtomType;
import uk.org.squirm3.model.type.def.BasicType;
public class RandomConstructor implements LevelConstructor {
final Configuration partialConfiguration;
final AtomType[] types = BasicType.values();
private RandomConstructor(final Configuration partialConfiguration) {
super();
this.partialConfiguration = partialConfiguration;
}
@Override
public Configuration construct() throws GeneratorException {
final Collection<Atom> atoms = new ArrayList<Atom>();
float currentWidth = 5 * Atom.getAtomSize();
float currentHeight = 5 * Atom.getAtomSize();
final float maximumWidth = partialConfiguration.getWidth()
- currentWidth;
final float maximumHeigth = partialConfiguration.getHeight()
- currentHeight;
while (currentHeight < maximumHeigth) {
if (currentWidth >= maximumWidth) {
currentWidth = Atom.getAtomSize();
currentHeight += 6 * Atom.getAtomSize();
} else {
atoms.add(Atoms.createMobileAtomWithRandomSpeed(
getRandomAtomType(), getRandomState(), currentWidth,
currentHeight));
currentWidth += 6 * Atom.getAtomSize();
}
}
return new Configuration(partialConfiguration.getHeight(),
partialConfiguration.getWidth(), atoms);
}
private AtomType getRandomAtomType() {
return types[(int) (Math.random() * types.length)];
}
private int getRandomState() {
return (int) (Math.random() + 0.1);
}
}