mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-02 16:05:29 +00:00
start moving to int vector impls where possible
This commit is contained in:
parent
ba7722ce45
commit
b04f7cfc55
@ -20,7 +20,7 @@ import com.dfsek.terra.api.block.state.properties.enums.Direction;
|
||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||
import com.dfsek.terra.api.structure.Structure;
|
||||
import com.dfsek.terra.api.structure.buffer.Buffer;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.collection.MaterialSet;
|
||||
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
|
@ -237,7 +237,8 @@ public class CellularSampler extends NoiseFunction {
|
||||
int xPrimed = (xr - 1) * PRIME_X;
|
||||
int yPrimedBase = (yr - 1) * PRIME_Y;
|
||||
|
||||
Vector2 center = new Vector2(x, y);
|
||||
double centerX = x;
|
||||
double centerY = y;
|
||||
|
||||
switch(distanceFunction) {
|
||||
default:
|
||||
@ -259,8 +260,8 @@ public class CellularSampler extends NoiseFunction {
|
||||
if(newDistance < distance0) {
|
||||
distance0 = newDistance;
|
||||
closestHash = hash;
|
||||
center.setX((xi + RAND_VECS_2D[idx] * cellularJitter) / frequency);
|
||||
center.setZ((yi + RAND_VECS_2D[idx | 1] * cellularJitter) / frequency);
|
||||
centerX = ((xi + RAND_VECS_2D[idx] * cellularJitter) / frequency);
|
||||
centerY = ((yi + RAND_VECS_2D[idx | 1] * cellularJitter) / frequency);
|
||||
} else if(newDistance < distance1) {
|
||||
distance2 = distance1;
|
||||
distance1 = newDistance;
|
||||
@ -289,8 +290,8 @@ public class CellularSampler extends NoiseFunction {
|
||||
if(newDistance < distance0) {
|
||||
distance0 = newDistance;
|
||||
closestHash = hash;
|
||||
center.setX((xi + RAND_VECS_2D[idx] * cellularJitter) / frequency);
|
||||
center.setZ((yi + RAND_VECS_2D[idx | 1] * cellularJitter) / frequency);
|
||||
centerX = ((xi + RAND_VECS_2D[idx] * cellularJitter) / frequency);
|
||||
centerY = ((yi + RAND_VECS_2D[idx | 1] * cellularJitter) / frequency);
|
||||
} else if(newDistance < distance1) {
|
||||
distance2 = distance1;
|
||||
distance1 = newDistance;
|
||||
@ -319,8 +320,8 @@ public class CellularSampler extends NoiseFunction {
|
||||
if(newDistance < distance0) {
|
||||
distance0 = newDistance;
|
||||
closestHash = hash;
|
||||
center.setX((xi + RAND_VECS_2D[idx] * cellularJitter) / frequency);
|
||||
center.setZ((yi + RAND_VECS_2D[idx | 1] * cellularJitter) / frequency);
|
||||
centerX = ((xi + RAND_VECS_2D[idx] * cellularJitter) / frequency);
|
||||
centerY = ((yi + RAND_VECS_2D[idx | 1] * cellularJitter) / frequency);
|
||||
} else if(newDistance < distance1) {
|
||||
distance2 = distance1;
|
||||
distance1 = newDistance;
|
||||
@ -349,7 +350,7 @@ public class CellularSampler extends NoiseFunction {
|
||||
case Distance2Sub -> distance1 - distance0 - 1;
|
||||
case Distance2Mul -> distance1 * distance0 * 0.5 - 1;
|
||||
case Distance2Div -> distance0 / distance1 - 1;
|
||||
case NoiseLookup -> noiseLookup.getNoiseSeeded(sl, center.getX(), center.getZ());
|
||||
case NoiseLookup -> noiseLookup.getNoiseSeeded(sl, centerX, centerY);
|
||||
case Distance3 -> distance2 - 1;
|
||||
case Distance3Add -> (distance2 + distance0) * 0.5 - 1;
|
||||
case Distance3Sub -> distance2 - distance0 - 1;
|
||||
|
@ -16,7 +16,7 @@ import com.dfsek.terra.api.Platform;
|
||||
import com.dfsek.terra.api.config.WorldConfig;
|
||||
import com.dfsek.terra.api.profiler.ProfileFrame;
|
||||
import com.dfsek.terra.api.structure.configured.ConfiguredStructure;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.PopulationUtil;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
import com.dfsek.terra.api.world.Chunk;
|
||||
|
@ -28,7 +28,7 @@ import com.dfsek.terra.api.entity.CommandSender;
|
||||
import com.dfsek.terra.api.entity.Player;
|
||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||
import com.dfsek.terra.api.structure.Structure;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
|
||||
|
||||
@PlayerCommand
|
||||
|
@ -10,7 +10,7 @@ package com.dfsek.terra.addons.generation.feature;
|
||||
import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures;
|
||||
import com.dfsek.terra.api.Platform;
|
||||
import com.dfsek.terra.api.profiler.ProfileFrame;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.PopulationUtil;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
import com.dfsek.terra.api.world.Chunk;
|
||||
|
@ -16,10 +16,9 @@ import com.dfsek.terra.api.block.state.BlockState;
|
||||
import com.dfsek.terra.api.structure.Structure;
|
||||
import com.dfsek.terra.api.structure.buffer.Buffer;
|
||||
import com.dfsek.terra.api.structure.buffer.items.BufferedBlock;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.RotationUtil;
|
||||
import com.dfsek.terra.api.util.vector.Vector2;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
import com.dfsek.terra.api.util.vector.integer.Vector2Int;
|
||||
import com.dfsek.terra.api.world.Chunk;
|
||||
import com.dfsek.terra.api.world.World;
|
||||
|
||||
@ -44,9 +43,9 @@ public class SpongeStructure implements Structure {
|
||||
int bZ = location.getBlockZ();
|
||||
for(int x = 0; x < blocks.length; x++) {
|
||||
for(int z = 0; z < blocks[x].length; z++) {
|
||||
Vector2 r = RotationUtil.rotateVector(new Vector2(x, z), rotation);
|
||||
int rX = r.getBlockX();
|
||||
int rZ = r.getBlockZ();
|
||||
Vector2Int r = Vector2Int.of(x, z).rotate(rotation);
|
||||
int rX = r.getX();
|
||||
int rZ = r.getZ();
|
||||
if(FastMath.floorDiv(bX + rX, 16) != chunk.getX() || FastMath.floorDiv(bZ + rZ, 16) != chunk.getZ()) {
|
||||
continue;
|
||||
}
|
||||
@ -64,9 +63,9 @@ public class SpongeStructure implements Structure {
|
||||
public boolean generate(Buffer buffer, World world, Random random, Rotation rotation, int recursions) {
|
||||
for(int x = 0; x < blocks.length; x++) {
|
||||
for(int z = 0; z < blocks[x].length; z++) {
|
||||
Vector2 r = RotationUtil.rotateVector(new Vector2(x, z), rotation);
|
||||
int rX = r.getBlockX();
|
||||
int rZ = r.getBlockZ();
|
||||
Vector2Int r = Vector2Int.of(x, z).rotate(rotation);
|
||||
int rX = r.getX();
|
||||
int rZ = r.getZ();
|
||||
for(int y = 0; y < blocks[z].length; y++) {
|
||||
BlockState state = blocks[x][z][y];
|
||||
if(state == null) continue;
|
||||
@ -84,9 +83,9 @@ public class SpongeStructure implements Structure {
|
||||
int bZ = location.getBlockZ();
|
||||
for(int x = 0; x < blocks.length; x++) {
|
||||
for(int z = 0; z < blocks[x].length; z++) {
|
||||
Vector2 r = RotationUtil.rotateVector(new Vector2(x, z), rotation);
|
||||
int rX = r.getBlockX();
|
||||
int rZ = r.getBlockZ();
|
||||
Vector2Int r = Vector2Int.of(x, z).rotate(rotation);
|
||||
int rX = r.getX();
|
||||
int rZ = r.getZ();
|
||||
for(int y = 0; y < blocks[z].length; y++) {
|
||||
BlockState state = blocks[x][z][y];
|
||||
if(state == null) continue;
|
||||
|
@ -48,7 +48,7 @@ import com.dfsek.terra.api.structure.Structure;
|
||||
import com.dfsek.terra.api.structure.buffer.Buffer;
|
||||
import com.dfsek.terra.api.structure.buffer.buffers.DirectBuffer;
|
||||
import com.dfsek.terra.api.structure.buffer.buffers.StructureBuffer;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
import com.dfsek.terra.api.world.Chunk;
|
||||
import com.dfsek.terra.api.world.World;
|
||||
|
@ -11,7 +11,7 @@ import java.util.Random;
|
||||
|
||||
import com.dfsek.terra.addons.terrascript.parser.lang.ImplementationArguments;
|
||||
import com.dfsek.terra.api.structure.buffer.Buffer;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.world.World;
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@ import com.dfsek.terra.addons.terrascript.tokenizer.Position;
|
||||
import com.dfsek.terra.api.Platform;
|
||||
import com.dfsek.terra.api.registry.Registry;
|
||||
import com.dfsek.terra.api.structure.Structure;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.RotationUtil;
|
||||
import com.dfsek.terra.api.util.vector.Vector2;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
package com.dfsek.terra.api.block.state.properties.enums;
|
||||
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.generic.Construct;
|
||||
|
||||
|
||||
|
@ -10,7 +10,7 @@ package com.dfsek.terra.api.structure;
|
||||
import java.util.Random;
|
||||
|
||||
import com.dfsek.terra.api.structure.buffer.Buffer;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
import com.dfsek.terra.api.util.StringIdentifiable;
|
||||
import com.dfsek.terra.api.util.vector.Vector3;
|
||||
import com.dfsek.terra.api.world.Chunk;
|
||||
|
@ -15,7 +15,6 @@ import com.dfsek.terra.api.block.state.properties.enums.Axis;
|
||||
import com.dfsek.terra.api.block.state.properties.enums.RailShape;
|
||||
import com.dfsek.terra.api.block.state.properties.enums.RedstoneConnection;
|
||||
import com.dfsek.terra.api.block.state.properties.enums.WallHeight;
|
||||
import com.dfsek.terra.api.structure.rotation.Rotation;
|
||||
import com.dfsek.terra.api.util.vector.Vector2;
|
||||
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
* reference the LICENSE file in the common/api directory.
|
||||
*/
|
||||
|
||||
package com.dfsek.terra.api.structure.rotation;
|
||||
package com.dfsek.terra.api.util;
|
||||
|
||||
import net.jafama.FastMath;
|
||||
|
@ -0,0 +1,86 @@
|
||||
package com.dfsek.terra.api.util.vector.integer;
|
||||
|
||||
import com.dfsek.terra.api.util.Rotation;
|
||||
|
||||
|
||||
/**
|
||||
* oh yeah
|
||||
*/
|
||||
public class Vector2Int {
|
||||
private final int x;
|
||||
private final int z;
|
||||
|
||||
private static final Vector2Int ZERO = new Vector2Int(0, 0);
|
||||
private static final Vector2Int UNIT = new Vector2Int(0, 1);
|
||||
|
||||
protected Vector2Int(int x, int z) {
|
||||
this.x = x;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public static Vector2Int zero() {
|
||||
return ZERO;
|
||||
}
|
||||
|
||||
public static Vector2Int unit() {
|
||||
return UNIT;
|
||||
}
|
||||
|
||||
public static Vector2Int of(int x, int z) {
|
||||
return new Vector2Int(x, z);
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public Vector3Int toVector3(int y) {
|
||||
return new Vector3Int(x, y, z);
|
||||
}
|
||||
|
||||
public Mutable mutable() {
|
||||
return new Mutable(x, z);
|
||||
}
|
||||
|
||||
public Vector2Int rotate(Rotation rotation) {
|
||||
return switch(rotation) {
|
||||
case CW_90 -> of(z, -x);
|
||||
case CCW_90 -> of(-z, x);
|
||||
case CW_180 -> of(-x, -z);
|
||||
default -> this;
|
||||
};
|
||||
}
|
||||
|
||||
public static class Mutable {
|
||||
private int x, z;
|
||||
|
||||
protected Mutable(int x, int z) {
|
||||
this.x = x;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public void setZ(int z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public Vector2Int immutable() {
|
||||
return new Vector2Int(x, z);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.dfsek.terra.api.util.vector.integer;
|
||||
|
||||
public class Vector3Int {
|
||||
private final int x, y, z;
|
||||
|
||||
private static final Vector3Int ZERO = new Vector3Int(0, 0, 0);
|
||||
private static final Vector3Int UNIT = new Vector3Int(0, 1, 0);
|
||||
|
||||
protected Vector3Int(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public Mutable mutable() {
|
||||
return new Mutable(x, y, z);
|
||||
}
|
||||
|
||||
public static Vector3Int unit() {
|
||||
return UNIT;
|
||||
}
|
||||
|
||||
public static Vector3Int zero() {
|
||||
return ZERO;
|
||||
}
|
||||
|
||||
public static Vector3Int of(int x, int y, int z) {
|
||||
return new Vector3Int(x, y, z);
|
||||
}
|
||||
|
||||
public static class Mutable {
|
||||
private int x, y, z;
|
||||
|
||||
protected Mutable(int x, int y, int z) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public void setX(int x) {
|
||||
this.x = x;
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public void setZ(int z) {
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
public Vector3Int immutable() {
|
||||
return Vector3Int.of(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user