Improved code readability
[sixth-3d.git] / src / main / java / eu / svjatoslav / sixth / e3d / renderer / raster / shapes / composite / base / AbstractCompositeShape.java
index 88ab271..52acbc2 100644 (file)
@@ -1,20 +1,15 @@
 /*
- * Sixth 3D engine. Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 3 of the GNU Lesser General Public License
- * or later as published by the Free Software Foundation.
- *
+ * Sixth 3D engine. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
  */
-
 package eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.base;
 
 import eu.svjatoslav.sixth.e3d.geometry.Point3D;
-import eu.svjatoslav.sixth.e3d.geometry.Transform;
-import eu.svjatoslav.sixth.e3d.geometry.TransformPipe;
 import eu.svjatoslav.sixth.e3d.gui.RenderingContext;
 import eu.svjatoslav.sixth.e3d.gui.UserRelativityTracker;
 import eu.svjatoslav.sixth.e3d.gui.humaninput.MouseInteractionController;
+import eu.svjatoslav.sixth.e3d.math.Transform;
+import eu.svjatoslav.sixth.e3d.math.TransformsStack;
 import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
 import eu.svjatoslav.sixth.e3d.renderer.raster.RenderAggregator;
 import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.AbstractShape;
@@ -27,11 +22,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-/**
- * In order to get perspective correct textures, large textured polygons are
- * sliced into smaller ones.
- */
-
 public class AbstractCompositeShape extends AbstractShape {
     private final List<SubShape> originalSubShapes = new ArrayList<>();
     private final UserRelativityTracker relativityTracker;
@@ -69,7 +59,7 @@ public class AbstractCompositeShape extends AbstractShape {
      * This method should be overridden by anyone wanting to customize shape
      * before it is rendered.
      */
-    public void beforeTransformHook(final TransformPipe transformPipe,
+    public void beforeTransformHook(final TransformsStack transformPipe,
                                     final RenderingContext context) {
     }
 
@@ -92,19 +82,19 @@ public class AbstractCompositeShape extends AbstractShape {
         });
     }
 
-    private boolean isReslicingNeeded(double sliceFactor1, double sliceFactor2) {
+    private boolean isReslicingNeeded(double proposedNewSliceFactor, double currentSliceFactor) {
 
         if (slicingOutdated)
             return true;
 
-        if (sliceFactor1 > sliceFactor2) {
-            final double tmp = sliceFactor1;
-            sliceFactor1 = sliceFactor2;
-            sliceFactor2 = tmp;
+        // reslice if there is significant difference between proposed and current slice factor
+        if (proposedNewSliceFactor > currentSliceFactor) {
+            final double tmp = proposedNewSliceFactor;
+            proposedNewSliceFactor = currentSliceFactor;
+            currentSliceFactor = tmp;
         }
 
-        return (sliceFactor2 / sliceFactor1) > 1.5d;
-
+        return (currentSliceFactor / proposedNewSliceFactor) > 1.5d;
     }
 
     public void removeGroup(final String groupIdentifier) {
@@ -122,18 +112,17 @@ public class AbstractCompositeShape extends AbstractShape {
 
     public List<SubShape> getGroup(final String groupIdentifier) {
         return originalSubShapes.stream().filter(
-                subShape -> subShape.matchesGroup(groupIdentifier))
+                        subShape -> subShape.matchesGroup(groupIdentifier))
                 .collect(Collectors.toList());
     }
 
     private void resliceIfNeeded() {
 
-        final double proposedSliceFactor = relativityTracker
-                .proposeSliceFactor();
+        final double proposedSliceFactor = relativityTracker.proposeSliceFactor();
 
         if (isReslicingNeeded(proposedSliceFactor, currentSliceFactor)) {
             currentSliceFactor = proposedSliceFactor;
-            slice();
+            reslice();
         }
     }
 
@@ -153,7 +142,7 @@ public class AbstractCompositeShape extends AbstractShape {
     }
 
     public void setGroupForUngrouped(final String groupIdentifier) {
-        originalSubShapes.stream().filter(subShape -> subShape.isUngrouped()).forEach(subShape -> subShape.setGroup(groupIdentifier));
+        originalSubShapes.stream().filter(SubShape::isUngrouped).forEach(subShape -> subShape.setGroup(groupIdentifier));
     }
 
     @Override
@@ -180,13 +169,13 @@ public class AbstractCompositeShape extends AbstractShape {
         });
     }
 
-    private void slice() {
+    private void reslice() {
         slicingOutdated = false;
 
         final List<AbstractShape> result = new ArrayList<>();
 
         final Slicer slicer = new Slicer(currentSliceFactor);
-        originalSubShapes.stream().filter(subShape -> subShape.isVisible()).forEach(subShape -> {
+        originalSubShapes.stream().filter(SubShape::isVisible).forEach(subShape -> {
             if (subShape.getShape() instanceof TexturedPolygon)
                 slicer.slice((TexturedPolygon) subShape.getShape());
             else
@@ -199,7 +188,7 @@ public class AbstractCompositeShape extends AbstractShape {
     }
 
     @Override
-    public void transform(final TransformPipe transformPipe,
+    public void transform(final TransformsStack transformPipe,
                           final RenderAggregator aggregator, final RenderingContext context) {
 
         // add current composite shape transform to the end of the transform