diff --git a/engine/src/core/com/jme3/collision/Collidable.java b/engine/src/core/com/jme3/collision/Collidable.java
index 5dd823067..65c063135 100644
--- a/engine/src/core/com/jme3/collision/Collidable.java
+++ b/engine/src/core/com/jme3/collision/Collidable.java
@@ -33,16 +33,21 @@
package com.jme3.collision;
/**
- * Interface for collidable objects.
- * @author Kirill
+ * Interface for Collidable objects.
+ * Classes that implement this interface are marked as collidable, meaning
+ * they support collision detection between other objects that are also
+ * collidable.
+ *
+ * @author Kirill Vainer
*/
public interface Collidable {
/**
- * Check collision with another collidable
- * @param other
- * @param results
- * @return how many collisions were found
+ * Check collision with another Collidable.
+ *
+ * @param other The object to check collision against
+ * @param results Will contain the list of {@link CollisionResult}s.
+ * @return how many collisions were found between this and other
*/
public int collideWith(Collidable other, CollisionResults results) throws UnsupportedCollisionException;
}
diff --git a/engine/src/core/com/jme3/collision/CollisionResults.java b/engine/src/core/com/jme3/collision/CollisionResults.java
index 84585934f..ec691c102 100644
--- a/engine/src/core/com/jme3/collision/CollisionResults.java
+++ b/engine/src/core/com/jme3/collision/CollisionResults.java
@@ -36,15 +36,29 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
+/**
+ * CollisionResults
is a collection returned as a result of a
+ * collision detection operation done by {@link Collidable}.
+ *
+ * @author Kirill Vainer
+ */
public class CollisionResults implements Iterable {
private final ArrayList results = new ArrayList();
private boolean sorted = true;
+ /**
+ * Clears all collision results added to this list
+ */
public void clear(){
results.clear();
}
+ /**
+ * Iterator for iterating over the collision results.
+ *
+ * @return the iterator
+ */
public Iterator iterator() {
if (!sorted){
Collections.sort(results);
diff --git a/engine/src/core/com/jme3/collision/UnsupportedCollisionException.java b/engine/src/core/com/jme3/collision/UnsupportedCollisionException.java
index 68192a1be..ddd6779eb 100644
--- a/engine/src/core/com/jme3/collision/UnsupportedCollisionException.java
+++ b/engine/src/core/com/jme3/collision/UnsupportedCollisionException.java
@@ -33,8 +33,11 @@
package com.jme3.collision;
/**
- *
- * @author Kirill
+ * Thrown by {@link Collidable} when the requested collision query could not
+ * be completed because one of the collidables does not support colliding with
+ * the other.
+ *
+ * @author Kirill Vainer
*/
public class UnsupportedCollisionException extends UnsupportedOperationException {
diff --git a/engine/src/core/com/jme3/math/Matrix3f.java b/engine/src/core/com/jme3/math/Matrix3f.java
index 3ab9d0abc..073b9f0a1 100644
--- a/engine/src/core/com/jme3/math/Matrix3f.java
+++ b/engine/src/core/com/jme3/math/Matrix3f.java
@@ -38,6 +38,7 @@ import com.jme3.export.JmeImporter;
import com.jme3.export.OutputCapsule;
import com.jme3.export.Savable;
import com.jme3.util.BufferUtils;
+import com.jme3.util.TempVars;
import java.io.IOException;
import java.nio.FloatBuffer;
import java.util.logging.Logger;
@@ -384,16 +385,49 @@ public final class Matrix3f implements Savable, Cloneable {
* limit set is not changed).
*/
public FloatBuffer fillFloatBuffer(FloatBuffer fb, boolean columnMajor) {
- if (columnMajor){
- fb.put(m00).put(m10).put(m20);
- fb.put(m01).put(m11).put(m21);
- fb.put(m02).put(m12).put(m22);
+// if (columnMajor){
+// fb.put(m00).put(m10).put(m20);
+// fb.put(m01).put(m11).put(m21);
+// fb.put(m02).put(m12).put(m22);
+// }else{
+// fb.put(m00).put(m01).put(m02);
+// fb.put(m10).put(m11).put(m12);
+// fb.put(m20).put(m21).put(m22);
+// }
+
+ TempVars vars = TempVars.get();
+ assert vars.lock();
+
+ fillFloatArray(vars.matrixWrite, columnMajor);
+ fb.put(vars.matrixWrite, 0, 9);
+
+ assert vars.unlock();
+
+ return fb;
+ }
+
+ public void fillFloatArray(float[] f, boolean columnMajor){
+ if (columnMajor) {
+ f[ 0] = m00;
+ f[ 1] = m10;
+ f[ 2] = m20;
+ f[ 3] = m01;
+ f[ 4] = m11;
+ f[ 5] = m21;
+ f[ 6] = m02;
+ f[ 7] = m12;
+ f[ 8] = m22;
}else{
- fb.put(m00).put(m01).put(m02);
- fb.put(m10).put(m11).put(m12);
- fb.put(m20).put(m21).put(m22);
+ f[ 0] = m00;
+ f[ 1] = m01;
+ f[ 2] = m02;
+ f[ 3] = m10;
+ f[ 4] = m11;
+ f[ 5] = m12;
+ f[ 6] = m20;
+ f[ 7] = m21;
+ f[ 8] = m22;
}
- return fb;
}
/**
diff --git a/engine/src/core/com/jme3/math/Matrix4f.java b/engine/src/core/com/jme3/math/Matrix4f.java
index abd329d2b..fdd5ae468 100644
--- a/engine/src/core/com/jme3/math/Matrix4f.java
+++ b/engine/src/core/com/jme3/math/Matrix4f.java
@@ -733,17 +733,26 @@ public final class Matrix4f implements Savable, Cloneable {
* limit set is not changed).
*/
public FloatBuffer fillFloatBuffer(FloatBuffer fb, boolean columnMajor) {
- if (columnMajor) {
- fb.put(m00).put(m10).put(m20).put(m30);
- fb.put(m01).put(m11).put(m21).put(m31);
- fb.put(m02).put(m12).put(m22).put(m32);
- fb.put(m03).put(m13).put(m23).put(m33);
- } else {
- fb.put(m00).put(m01).put(m02).put(m03);
- fb.put(m10).put(m11).put(m12).put(m13);
- fb.put(m20).put(m21).put(m22).put(m23);
- fb.put(m30).put(m31).put(m32).put(m33);
- }
+// if (columnMajor) {
+// fb.put(m00).put(m10).put(m20).put(m30);
+// fb.put(m01).put(m11).put(m21).put(m31);
+// fb.put(m02).put(m12).put(m22).put(m32);
+// fb.put(m03).put(m13).put(m23).put(m33);
+// } else {
+// fb.put(m00).put(m01).put(m02).put(m03);
+// fb.put(m10).put(m11).put(m12).put(m13);
+// fb.put(m20).put(m21).put(m22).put(m23);
+// fb.put(m30).put(m31).put(m32).put(m33);
+// }
+
+ TempVars vars = TempVars.get();
+ assert vars.lock();
+
+ fillFloatArray(vars.matrixWrite, columnMajor);
+ fb.put(vars.matrixWrite, 0, 16);
+
+ assert vars.unlock();
+
return fb;
}
diff --git a/engine/src/core/com/jme3/util/TempVars.java b/engine/src/core/com/jme3/util/TempVars.java
index 7bc569c53..c96508c80 100644
--- a/engine/src/core/com/jme3/util/TempVars.java
+++ b/engine/src/core/com/jme3/util/TempVars.java
@@ -193,6 +193,8 @@ public class TempVars {
*/
public final Spatial[] spatialStack = new Spatial[32];
+ public final float[] matrixWrite = new float[16];
+
/**
* BIHTree
*/