diff --git a/api/src/main/java/com/seibel/distanthorizons/coreapi/util/BitShiftUtil.java b/api/src/main/java/com/seibel/distanthorizons/coreapi/util/BitShiftUtil.java
index 9ad2e34f8..8bd3b2512 100644
--- a/api/src/main/java/com/seibel/distanthorizons/coreapi/util/BitShiftUtil.java
+++ b/api/src/main/java/com/seibel/distanthorizons/coreapi/util/BitShiftUtil.java
@@ -30,7 +30,7 @@ public class BitShiftUtil
{
/**
* Equivalent to:
- * {@literal 1 << value0, }
+ * {@literal 1 << value, }
* 2^value,
* Math.pow(2, value)
*
diff --git a/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java b/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java
index b908d89ad..e7ecbb0a6 100644
--- a/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java
+++ b/core/src/main/java/com/seibel/distanthorizons/core/pos/DhSectionPos.java
@@ -189,6 +189,14 @@ public class DhSectionPos
return new DhLodUnit(this.sectionDetailLevel, BitShiftUtil.powerOfTwo(offset));
}
+ public int getNumberOfLodSectionsWide() { return this.getNumberOfLodSectionsWide(this.sectionDetailLevel); } // TODO this always returns 1...
+ public int getNumberOfLodSectionsWide(byte returnDetailLevel)
+ {
+ LodUtil.assertTrue(returnDetailLevel <= this.sectionDetailLevel, "returnDetailLevel must be less than sectionDetail"); // TODO add something to the method name stating this
+ byte offset = (byte) (this.sectionDetailLevel - returnDetailLevel);
+ return BitShiftUtil.powerOfTwo(offset);
+ }
+
//==================//
diff --git a/core/src/test/java/tests/DhSectionPosTest.java b/core/src/test/java/tests/DhSectionPosTest.java
index 3d37e5239..37b0c7109 100644
--- a/core/src/test/java/tests/DhSectionPosTest.java
+++ b/core/src/test/java/tests/DhSectionPosTest.java
@@ -264,19 +264,30 @@ public class DhSectionPosTest
// widths should be the same regardless of position in the world
originSectionPos = originSectionPos.convertNewToDetailLevel((byte) 1);
- Assert.assertEquals(1, originSectionPos.getWidth().numberOfLodSectionsWide);
+ Assert.assertEquals(1, originSectionPos.getNumberOfLodSectionsWide());
+ Assert.assertEquals(originSectionPos.getWidth().numberOfLodSectionsWide, originSectionPos.getNumberOfLodSectionsWide());
+
sectionPos = sectionPos.convertNewToDetailLevel((byte) 1);
- Assert.assertEquals(1, sectionPos.getWidth().numberOfLodSectionsWide);
+ Assert.assertEquals(1, sectionPos.getNumberOfLodSectionsWide());
+ Assert.assertEquals(sectionPos.getWidth().numberOfLodSectionsWide, sectionPos.getNumberOfLodSectionsWide());
+
originSectionPos = originSectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_BLOCK_DETAIL_LEVEL);
- Assert.assertEquals(1, originSectionPos.getWidth().numberOfLodSectionsWide);
+ Assert.assertEquals(1, originSectionPos.getNumberOfLodSectionsWide());
+ Assert.assertEquals(originSectionPos.getWidth().numberOfLodSectionsWide, originSectionPos.getNumberOfLodSectionsWide());
+
sectionPos = sectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_BLOCK_DETAIL_LEVEL);
- Assert.assertEquals(1, sectionPos.getWidth().numberOfLodSectionsWide);
+ Assert.assertEquals(1, sectionPos.getNumberOfLodSectionsWide());
+ Assert.assertEquals(sectionPos.getWidth().numberOfLodSectionsWide, sectionPos.getNumberOfLodSectionsWide());
+
originSectionPos = originSectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_REGION_DETAIL_LEVEL);
- Assert.assertEquals(1, originSectionPos.getWidth().numberOfLodSectionsWide);
+ Assert.assertEquals(1, originSectionPos.getNumberOfLodSectionsWide());
+ Assert.assertEquals(originSectionPos.getWidth().numberOfLodSectionsWide, originSectionPos.getNumberOfLodSectionsWide());
+
sectionPos = sectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_REGION_DETAIL_LEVEL);
- Assert.assertEquals(1, sectionPos.getWidth().numberOfLodSectionsWide);
+ Assert.assertEquals(1, sectionPos.getNumberOfLodSectionsWide());
+ Assert.assertEquals(sectionPos.getWidth().numberOfLodSectionsWide, sectionPos.getNumberOfLodSectionsWide());
}
@Test
@@ -285,20 +296,32 @@ public class DhSectionPosTest
DhSectionPos originSectionPos = new DhSectionPos((byte) 0,0,0);
DhSectionPos sectionPos = new DhSectionPos((byte) 0,-10000,5000);
+
originSectionPos = originSectionPos.convertNewToDetailLevel((byte) 1);
- Assert.assertEquals(2, originSectionPos.getWidth((byte) 0).numberOfLodSectionsWide);
+ Assert.assertEquals(2, originSectionPos.getNumberOfLodSectionsWide((byte) 0));
+ Assert.assertEquals(originSectionPos.getWidth((byte) 0).numberOfLodSectionsWide, originSectionPos.getNumberOfLodSectionsWide((byte) 0));
+
sectionPos = sectionPos.convertNewToDetailLevel((byte) 1);
- Assert.assertEquals(2, sectionPos.getWidth((byte) 0).numberOfLodSectionsWide);
+ Assert.assertEquals(2, sectionPos.getNumberOfLodSectionsWide((byte) 0));
+ Assert.assertEquals(sectionPos.getWidth((byte) 0).numberOfLodSectionsWide, sectionPos.getNumberOfLodSectionsWide((byte) 0));
+
originSectionPos = originSectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_BLOCK_DETAIL_LEVEL);
- Assert.assertEquals(64, originSectionPos.getWidth((byte) 0).numberOfLodSectionsWide);
+ Assert.assertEquals(64, originSectionPos.getNumberOfLodSectionsWide((byte) 0));
+ Assert.assertEquals(originSectionPos.getWidth((byte) 0).numberOfLodSectionsWide, originSectionPos.getNumberOfLodSectionsWide((byte) 0));
+
sectionPos = sectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_BLOCK_DETAIL_LEVEL);
- Assert.assertEquals(64, sectionPos.getWidth((byte) 0).numberOfLodSectionsWide);
+ Assert.assertEquals(64, sectionPos.getNumberOfLodSectionsWide((byte) 0));
+ Assert.assertEquals(sectionPos.getWidth((byte) 0).numberOfLodSectionsWide, sectionPos.getNumberOfLodSectionsWide((byte) 0));
+
originSectionPos = originSectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_REGION_DETAIL_LEVEL);
- Assert.assertEquals(4096, originSectionPos.getWidth((byte) 3).numberOfLodSectionsWide);
+ Assert.assertEquals(4096, originSectionPos.getNumberOfLodSectionsWide((byte) 3));
+ Assert.assertEquals(originSectionPos.getWidth((byte) 3).numberOfLodSectionsWide, originSectionPos.getNumberOfLodSectionsWide((byte) 3));
+
sectionPos = sectionPos.convertNewToDetailLevel(DhSectionPos.SECTION_REGION_DETAIL_LEVEL);
- Assert.assertEquals(4096, sectionPos.getWidth((byte) 3).numberOfLodSectionsWide);
+ Assert.assertEquals(4096, sectionPos.getNumberOfLodSectionsWide((byte) 3));
+ Assert.assertEquals(sectionPos.getWidth((byte) 3).numberOfLodSectionsWide, sectionPos.getNumberOfLodSectionsWide((byte) 3));
}