import eu.svjatoslav.sixth.e3d.geometry.Point3D;
import eu.svjatoslav.sixth.e3d.geometry.Transform;
import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
-import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.ForwardOrientedTexture;
import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.GlowingPoint;
import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.base.AbstractCompositeShape;
-import eu.svjatoslav.sixth.e3d.renderer.raster.texture.Texture;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Random;
-import java.util.Vector;
public class Galaxy extends AbstractCompositeShape {
- private Vector<Texture> textures;
+ private static List<Color> colors;
public Galaxy(final int size, final int tailCount, final int starsCount,
Transform transform) {
super(transform);
- Point3D location = new Point3D();
-
- createReusableTextures();
+ ensureColorsAreInitialized();
final double angle1 = Math.random() * 10;
final double angle2 = Math.random() * 10;
final double y1 = (y * angleCos2) + (z1 * angleSin2);
final double z2 = (z1 * angleCos2) - (y * angleSin2);
- final Point3D point3d = new Point3D(x1 + location.x, y1
- + location.y, z2 + location.z);
-
- addStar(point3d);
+ addStar(new Point3D(x1,y1,z2));
}
}
- public void addStar(final Point3D point3d) {
-
- final Texture texture = textures.get((int) (Math.random() * textures
- .size()));
-
- addShape(new ForwardOrientedTexture(point3d, 10, texture));
+ private void addStar(final Point3D starLocation) {
+ addShape(
+ new GlowingPoint(starLocation,10,
+ colors.get((int) (Math.random() * colors.size()))));
}
- public void createReusableTextures() {
- textures = new Vector<>();
-
- for (int i = 0; i < 30; i++) {
- final GlowingPoint glowingPoint = new GlowingPoint(null, 1,
- new Color(Math.random() + 0.5, Math.random() + 0.5,
- Math.random() + 0.5, 255));
+ private synchronized void ensureColorsAreInitialized() {
+ if (colors != null) return;
- textures.add(glowingPoint.texture);
+ colors = new ArrayList<>();
- }
+ for (int i = 0; i < 30; i++)
+ colors.add(
+ new Color(
+ Math.random() + 0.5,
+ Math.random() + 0.5,
+ Math.random() + 0.5,
+ 255));
}
}