change "default value" (null) handling of ModelTileMesh scaling/position adjustments
This commit is contained in:
parent
0c3abf574f
commit
6bfbf66c4c
|
@ -28,6 +28,9 @@ public class ModelTileMesh extends TileMesh {
|
|||
BoundingBox bounds;
|
||||
Vertices vertices;
|
||||
Array<Vector3> collisionVertices;
|
||||
Vector3 scaleToSize;
|
||||
Vector3 positionOffset;
|
||||
Vector3 collisionPositionOffset;
|
||||
|
||||
@Override
|
||||
public BoundingBox getBounds() {
|
||||
|
@ -56,8 +59,9 @@ public class ModelTileMesh extends TileMesh {
|
|||
Vector3 positionOffset
|
||||
) {
|
||||
super(opaqueSides, alpha, translucency, lightValue, color);
|
||||
setupMesh(model, textures, scaleToSize, positionOffset);
|
||||
setupCollisionVertices(model, scaleToSize, positionOffset);
|
||||
initScalingAndOffsetParams(scaleToSize, positionOffset, null);
|
||||
setupMesh(model, textures);
|
||||
setupCollisionVertices(model);
|
||||
}
|
||||
|
||||
public ModelTileMesh(
|
||||
|
@ -74,11 +78,18 @@ public class ModelTileMesh extends TileMesh {
|
|||
Vector3 collisionPositionOffset
|
||||
) {
|
||||
super(opaqueSides, alpha, translucency, lightValue, color);
|
||||
setupMesh(model, textures, scaleToSize, positionOffset);
|
||||
setupCollisionVertices(collisionModel, scaleToSize, collisionPositionOffset);
|
||||
initScalingAndOffsetParams(scaleToSize, positionOffset, collisionPositionOffset);
|
||||
setupMesh(model, textures);
|
||||
setupCollisionVertices(collisionModel);
|
||||
}
|
||||
|
||||
private void setupMesh(Model model, MaterialTileMapping textures, Vector3 scaleToSize, Vector3 positionOffset) {
|
||||
private void initScalingAndOffsetParams(Vector3 scaleToSize, Vector3 positionOffset, Vector3 collisionPositionOffset) {
|
||||
this.scaleToSize = (scaleToSize == null ? null : new Vector3(scaleToSize));
|
||||
this.positionOffset = (positionOffset == null ? new Vector3(Vector3.Zero) : new Vector3(positionOffset));
|
||||
this.collisionPositionOffset = (collisionPositionOffset == null ? new Vector3(Vector3.Zero) : new Vector3(collisionPositionOffset));
|
||||
}
|
||||
|
||||
private void setupMesh(Model model, MaterialTileMapping textures) {
|
||||
int numVertices = countModelVertices(model);
|
||||
vertices = new Vertices(
|
||||
numVertices,
|
||||
|
@ -89,14 +100,20 @@ public class ModelTileMesh extends TileMesh {
|
|||
);
|
||||
|
||||
model.getBoundingBox(tmpModelBounds);
|
||||
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
||||
bounds = new BoundingBox().set(Vector3.Zero, scaleToSize);
|
||||
if (scaleToSize != null) {
|
||||
model.getBoundingBox(tmpModelBounds);
|
||||
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
||||
bounds = new BoundingBox().set(Vector3.Zero, scaleToSize);
|
||||
} else {
|
||||
bounds = new BoundingBox().set(Vector3.Zero, tmpModelBounds.getDimensions());
|
||||
tmpScaleFactor.set(1.0f, 1.0f, 1.0f);
|
||||
}
|
||||
|
||||
for (int i = 0; i < model.nodes.size; ++i)
|
||||
addModelNodeVertices(model.nodes.get(i), textures, tmpScaleFactor, positionOffset);
|
||||
addModelNodeVertices(model.nodes.get(i), textures, tmpScaleFactor);
|
||||
}
|
||||
|
||||
private void addModelNodeVertices(Node node, MaterialTileMapping textures, Vector3 scaleFactor, Vector3 positionOffset) {
|
||||
private void addModelNodeVertices(Node node, MaterialTileMapping textures, Vector3 scaleFactor) {
|
||||
final Matrix4 transform = node.globalTransform; // TODO: test that this is the right transform to use?
|
||||
|
||||
for (int i = 0; i < node.parts.size; ++i) {
|
||||
|
@ -149,20 +166,23 @@ public class ModelTileMesh extends TileMesh {
|
|||
}
|
||||
|
||||
for (int i = 0; i < node.children.size; ++i)
|
||||
addModelNodeVertices(node.children.get(i), textures, tmpScaleFactor, positionOffset);
|
||||
addModelNodeVertices(node.children.get(i), textures, tmpScaleFactor);
|
||||
}
|
||||
|
||||
private void setupCollisionVertices(Model collisionModel, Vector3 scaleToSize, Vector3 positionOffset) {
|
||||
collisionModel.getBoundingBox(tmpModelBounds);
|
||||
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
||||
private void setupCollisionVertices(Model collisionModel) {
|
||||
if (scaleToSize != null) {
|
||||
collisionModel.getBoundingBox(tmpModelBounds);
|
||||
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
||||
} else
|
||||
tmpScaleFactor.set(1.0f, 1.0f, 1.0f);
|
||||
|
||||
int numVertices = countModelVertices(collisionModel);
|
||||
collisionVertices = new Array<Vector3>(true, numVertices, Vector3.class);
|
||||
for (int i = 0; i < collisionModel.nodes.size; ++i)
|
||||
addModelNodeCollisionVertices(collisionModel.nodes.get(i), tmpScaleFactor, positionOffset);
|
||||
addModelNodeCollisionVertices(collisionModel.nodes.get(i), tmpScaleFactor);
|
||||
}
|
||||
|
||||
private void addModelNodeCollisionVertices(Node node, Vector3 scaleFactor, Vector3 positionOffset) {
|
||||
private void addModelNodeCollisionVertices(Node node, Vector3 scaleFactor) {
|
||||
final Matrix4 transform = node.globalTransform; // TODO: test that this is the right transform to use?
|
||||
|
||||
for (int i = 0; i < node.parts.size; ++i) {
|
||||
|
@ -185,7 +205,7 @@ public class ModelTileMesh extends TileMesh {
|
|||
}
|
||||
|
||||
for (int i = 0; i < node.children.size; ++i)
|
||||
addModelNodeCollisionVertices(node.children.get(i), tmpScaleFactor, positionOffset);
|
||||
addModelNodeCollisionVertices(node.children.get(i), tmpScaleFactor);
|
||||
}
|
||||
|
||||
private int countModelVertices(Model model) {
|
||||
|
|
|
@ -71,9 +71,9 @@ public final class TileMeshCollectionLoader {
|
|||
boolean alpha;
|
||||
float translucency;
|
||||
Color color = new Color(Color.WHITE);
|
||||
Vector3 scaleToSize = new Vector3(1.0f, 1.0f, 1.0f);
|
||||
Vector3 positionOffset = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
Vector3 collisionPositionOffset = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
Vector3 scaleToSize = null;
|
||||
Vector3 positionOffset = null;
|
||||
Vector3 collisionPositionOffset = null;
|
||||
|
||||
if (tileDef.opaqueSides != null) {
|
||||
if (tileDef.opaqueSides.contains("ALL"))
|
||||
|
@ -100,11 +100,11 @@ public final class TileMeshCollectionLoader {
|
|||
if (tileDef.color != null)
|
||||
color.set(tileDef.color);
|
||||
if (tileDef.scaleToSize != null)
|
||||
scaleToSize.set(tileDef.scaleToSize);
|
||||
scaleToSize = new Vector3(tileDef.scaleToSize);
|
||||
if (tileDef.positionOffset != null)
|
||||
positionOffset.set(tileDef.positionOffset);
|
||||
positionOffset = new Vector3(tileDef.positionOffset);
|
||||
if (tileDef.collisionPositionOffset != null)
|
||||
collisionPositionOffset.set(tileDef.collisionPositionOffset);
|
||||
collisionPositionOffset = new Vector3(tileDef.collisionPositionOffset);
|
||||
|
||||
if (isCube) {
|
||||
if (tileDef.textures != null) {
|
||||
|
|
Loading…
Reference in a new issue