Skip to content

Commit

Permalink
make traversable trees abstract so that they can be subclassed with a…
Browse files Browse the repository at this point in the history
… different tree implementation
  • Loading branch information
douira committed Nov 10, 2024
1 parent 06dd4c7 commit 13418ca
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ private static Forest createPortalTree(int baseOffsetX,int baseOffsetY, int base
return new PortalBiForest(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

return new PortalManyForest(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
return new PortalMultiForest(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

private static class PortalBiForest extends BaseBiForest<FlatTree> {
Expand All @@ -132,8 +132,8 @@ protected FlatTree makeTree(int offsetX, int offsetY, int offsetZ) {
}
}

private static class PortalManyForest extends BaseManyForest<FlatTree> {
public PortalManyForest(int baseOffsetX,int baseOffsetY, int baseOffsetZ, float buildDistance) {
private static class PortalMultiForest extends BaseMultiForest<FlatTree> {
public PortalMultiForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
super(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package net.caffeinemc.mods.sodium.client.render.chunk.tree;

import net.caffeinemc.mods.sodium.client.render.chunk.occlusion.SectionTree;
import net.caffeinemc.mods.sodium.client.render.viewport.Viewport;

public abstract class AbstractTraversableBiForest<T extends TraversableTree> extends BaseBiForest<T> implements TraversableForest {
public AbstractTraversableBiForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
super(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

@Override
public void calculateReduced() {
this.mainTree.calculateReduced();
if (this.secondaryTree != null) {
this.secondaryTree.calculateReduced();
}
}

@Override
public void traverse(SectionTree.VisibleSectionVisitor visitor, Viewport viewport, float distanceLimit) {
TraversableForest.super.traverse(visitor, viewport, distanceLimit);
}

@Override
public void traverse(SectionTree.VisibleSectionVisitor visitor, Viewport viewport, float distanceLimit, float buildDistance) {
// no sorting is necessary because we assume the camera will never be closer to the secondary tree than the main tree
this.mainTree.traverse(visitor, viewport, distanceLimit, buildDistance);
if (this.secondaryTree != null) {
this.secondaryTree.traverse(visitor, viewport, distanceLimit, buildDistance);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import net.caffeinemc.mods.sodium.client.render.chunk.occlusion.SectionTree;
import net.caffeinemc.mods.sodium.client.render.viewport.Viewport;

public class TraversableManyForest extends BaseManyForest<TraversableTree> implements TraversableForest {
public TraversableManyForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
public abstract class AbstractTraversableMultiForest<T extends TraversableTree> extends BaseMultiForest<T> implements TraversableForest {
public AbstractTraversableMultiForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
super(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

Expand Down Expand Up @@ -51,13 +51,4 @@ public void traverse(SectionTree.VisibleSectionVisitor visitor, Viewport viewpor
}
}

@Override
protected TraversableTree makeTree(int offsetX, int offsetY, int offsetZ) {
return new TraversableTree(offsetX, offsetY, offsetZ);
}

@Override
protected TraversableTree[] makeTrees(int length) {
return new TraversableTree[length];
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package net.caffeinemc.mods.sodium.client.render.chunk.tree;

public abstract class BaseManyForest<T extends Tree> extends BaseForest<T> {
public abstract class BaseMultiForest<T extends Tree> extends BaseForest<T> {
protected final T[] trees;
protected final int forestDim;

protected T lastTree;

public BaseManyForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
public BaseMultiForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
super(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);

this.forestDim = (int) Math.ceil(buildDistance / 64.0);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,10 @@
package net.caffeinemc.mods.sodium.client.render.chunk.tree;

import net.caffeinemc.mods.sodium.client.render.chunk.occlusion.SectionTree;
import net.caffeinemc.mods.sodium.client.render.viewport.Viewport;

public class TraversableBiForest extends BaseBiForest<TraversableTree> implements TraversableForest {
public class TraversableBiForest extends AbstractTraversableBiForest<TraversableTree> {
public TraversableBiForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
super(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

@Override
public void calculateReduced() {
this.mainTree.calculateReduced();
if (this.secondaryTree != null) {
this.secondaryTree.calculateReduced();
}
}

@Override
public void traverse(SectionTree.VisibleSectionVisitor visitor, Viewport viewport, float distanceLimit) {
TraversableForest.super.traverse(visitor, viewport, distanceLimit);
}

@Override
public void traverse(SectionTree.VisibleSectionVisitor visitor, Viewport viewport, float distanceLimit, float buildDistance) {
// no sorting is necessary because we assume the camera will never be closer to the secondary tree than the main tree
this.mainTree.traverse(visitor, viewport, distanceLimit, buildDistance);
if (this.secondaryTree != null) {
this.secondaryTree.traverse(visitor, viewport, distanceLimit, buildDistance);
}
}

@Override
protected TraversableTree makeTree(int offsetX, int offsetY, int offsetZ) {
return new TraversableTree(offsetX, offsetY, offsetZ);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ static TraversableForest createTraversableForest(int baseOffsetX, int baseOffset
return new TraversableBiForest(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

return new TraversableManyForest(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
return new TraversableMultiForest(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package net.caffeinemc.mods.sodium.client.render.chunk.tree;

public class TraversableMultiForest extends AbstractTraversableMultiForest<TraversableTree> {
public TraversableMultiForest(int baseOffsetX, int baseOffsetY, int baseOffsetZ, float buildDistance) {
super(baseOffsetX, baseOffsetY, baseOffsetZ, buildDistance);
}

@Override
protected TraversableTree makeTree(int offsetX, int offsetY, int offsetZ) {
return new TraversableTree(offsetX, offsetY, offsetZ);
}

@Override
protected TraversableTree[] makeTrees(int length) {
return new TraversableTree[length];
}
}

0 comments on commit 13418ca

Please sign in to comment.