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;
|
BoundingBox bounds;
|
||||||
Vertices vertices;
|
Vertices vertices;
|
||||||
Array<Vector3> collisionVertices;
|
Array<Vector3> collisionVertices;
|
||||||
|
Vector3 scaleToSize;
|
||||||
|
Vector3 positionOffset;
|
||||||
|
Vector3 collisionPositionOffset;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BoundingBox getBounds() {
|
public BoundingBox getBounds() {
|
||||||
|
@ -56,8 +59,9 @@ public class ModelTileMesh extends TileMesh {
|
||||||
Vector3 positionOffset
|
Vector3 positionOffset
|
||||||
) {
|
) {
|
||||||
super(opaqueSides, alpha, translucency, lightValue, color);
|
super(opaqueSides, alpha, translucency, lightValue, color);
|
||||||
setupMesh(model, textures, scaleToSize, positionOffset);
|
initScalingAndOffsetParams(scaleToSize, positionOffset, null);
|
||||||
setupCollisionVertices(model, scaleToSize, positionOffset);
|
setupMesh(model, textures);
|
||||||
|
setupCollisionVertices(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelTileMesh(
|
public ModelTileMesh(
|
||||||
|
@ -74,11 +78,18 @@ public class ModelTileMesh extends TileMesh {
|
||||||
Vector3 collisionPositionOffset
|
Vector3 collisionPositionOffset
|
||||||
) {
|
) {
|
||||||
super(opaqueSides, alpha, translucency, lightValue, color);
|
super(opaqueSides, alpha, translucency, lightValue, color);
|
||||||
setupMesh(model, textures, scaleToSize, positionOffset);
|
initScalingAndOffsetParams(scaleToSize, positionOffset, collisionPositionOffset);
|
||||||
setupCollisionVertices(collisionModel, scaleToSize, 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);
|
int numVertices = countModelVertices(model);
|
||||||
vertices = new Vertices(
|
vertices = new Vertices(
|
||||||
numVertices,
|
numVertices,
|
||||||
|
@ -88,15 +99,21 @@ public class ModelTileMesh extends TileMesh {
|
||||||
VertexAttribute.TexCoords(0)
|
VertexAttribute.TexCoords(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
model.getBoundingBox(tmpModelBounds);
|
||||||
|
if (scaleToSize != null) {
|
||||||
model.getBoundingBox(tmpModelBounds);
|
model.getBoundingBox(tmpModelBounds);
|
||||||
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
||||||
bounds = new BoundingBox().set(Vector3.Zero, scaleToSize);
|
bounds = new BoundingBox().set(Vector3.Zero, scaleToSize);
|
||||||
|
} else {
|
||||||
for (int i = 0; i < model.nodes.size; ++i)
|
bounds = new BoundingBox().set(Vector3.Zero, tmpModelBounds.getDimensions());
|
||||||
addModelNodeVertices(model.nodes.get(i), textures, tmpScaleFactor, positionOffset);
|
tmpScaleFactor.set(1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addModelNodeVertices(Node node, MaterialTileMapping textures, Vector3 scaleFactor, Vector3 positionOffset) {
|
for (int i = 0; i < model.nodes.size; ++i)
|
||||||
|
addModelNodeVertices(model.nodes.get(i), textures, tmpScaleFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addModelNodeVertices(Node node, MaterialTileMapping textures, Vector3 scaleFactor) {
|
||||||
final Matrix4 transform = node.globalTransform; // TODO: test that this is the right transform to use?
|
final Matrix4 transform = node.globalTransform; // TODO: test that this is the right transform to use?
|
||||||
|
|
||||||
for (int i = 0; i < node.parts.size; ++i) {
|
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)
|
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) {
|
private void setupCollisionVertices(Model collisionModel) {
|
||||||
|
if (scaleToSize != null) {
|
||||||
collisionModel.getBoundingBox(tmpModelBounds);
|
collisionModel.getBoundingBox(tmpModelBounds);
|
||||||
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
MathHelpers.getScaleFactor(tmpModelBounds.getDimensions(), scaleToSize, tmpScaleFactor);
|
||||||
|
} else
|
||||||
|
tmpScaleFactor.set(1.0f, 1.0f, 1.0f);
|
||||||
|
|
||||||
int numVertices = countModelVertices(collisionModel);
|
int numVertices = countModelVertices(collisionModel);
|
||||||
collisionVertices = new Array<Vector3>(true, numVertices, Vector3.class);
|
collisionVertices = new Array<Vector3>(true, numVertices, Vector3.class);
|
||||||
for (int i = 0; i < collisionModel.nodes.size; ++i)
|
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?
|
final Matrix4 transform = node.globalTransform; // TODO: test that this is the right transform to use?
|
||||||
|
|
||||||
for (int i = 0; i < node.parts.size; ++i) {
|
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)
|
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) {
|
private int countModelVertices(Model model) {
|
||||||
|
|
|
@ -71,9 +71,9 @@ public final class TileMeshCollectionLoader {
|
||||||
boolean alpha;
|
boolean alpha;
|
||||||
float translucency;
|
float translucency;
|
||||||
Color color = new Color(Color.WHITE);
|
Color color = new Color(Color.WHITE);
|
||||||
Vector3 scaleToSize = new Vector3(1.0f, 1.0f, 1.0f);
|
Vector3 scaleToSize = null;
|
||||||
Vector3 positionOffset = new Vector3(0.0f, 0.0f, 0.0f);
|
Vector3 positionOffset = null;
|
||||||
Vector3 collisionPositionOffset = new Vector3(0.0f, 0.0f, 0.0f);
|
Vector3 collisionPositionOffset = null;
|
||||||
|
|
||||||
if (tileDef.opaqueSides != null) {
|
if (tileDef.opaqueSides != null) {
|
||||||
if (tileDef.opaqueSides.contains("ALL"))
|
if (tileDef.opaqueSides.contains("ALL"))
|
||||||
|
@ -100,11 +100,11 @@ public final class TileMeshCollectionLoader {
|
||||||
if (tileDef.color != null)
|
if (tileDef.color != null)
|
||||||
color.set(tileDef.color);
|
color.set(tileDef.color);
|
||||||
if (tileDef.scaleToSize != null)
|
if (tileDef.scaleToSize != null)
|
||||||
scaleToSize.set(tileDef.scaleToSize);
|
scaleToSize = new Vector3(tileDef.scaleToSize);
|
||||||
if (tileDef.positionOffset != null)
|
if (tileDef.positionOffset != null)
|
||||||
positionOffset.set(tileDef.positionOffset);
|
positionOffset = new Vector3(tileDef.positionOffset);
|
||||||
if (tileDef.collisionPositionOffset != null)
|
if (tileDef.collisionPositionOffset != null)
|
||||||
collisionPositionOffset.set(tileDef.collisionPositionOffset);
|
collisionPositionOffset = new Vector3(tileDef.collisionPositionOffset);
|
||||||
|
|
||||||
if (isCube) {
|
if (isCube) {
|
||||||
if (tileDef.textures != null) {
|
if (tileDef.textures != null) {
|
||||||
|
|
Loading…
Reference in a new issue