pbox2d 0.6.0-java → 0.8.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.mvn/extensions.xml +8 -0
- data/.mvn/wrapper/maven-wrapper.properties +1 -0
- data/.travis.yml +23 -0
- data/CHANGELOG.md +8 -0
- data/README.md +7 -7
- data/Rakefile +1 -2
- data/lib/box2d.jar +0 -0
- data/lib/pbox2d/version.rb +1 -1
- data/lib/pbox2d.rb +1 -0
- data/pbox2d.gemspec +6 -11
- data/pom.rb +59 -0
- data/pom.xml +82 -73
- data/src/org/jbox2d/JBox2D.gwt.xml +12 -0
- data/src/org/jbox2d/callbacks/ContactAdaptor.java +27 -0
- data/src/org/jbox2d/callbacks/ContactFilter.java +59 -0
- data/src/org/jbox2d/callbacks/ContactImpulse.java +42 -0
- data/src/org/jbox2d/callbacks/ContactListener.java +87 -0
- data/src/org/jbox2d/callbacks/DebugDraw.java +297 -0
- data/src/org/jbox2d/callbacks/DestructionListener.java +53 -0
- data/src/org/jbox2d/callbacks/PairCallback.java +29 -0
- data/src/org/jbox2d/callbacks/ParticleDestructionListener.java +20 -0
- data/src/org/jbox2d/callbacks/ParticleQueryCallback.java +19 -0
- data/src/org/jbox2d/callbacks/ParticleRaycastCallback.java +19 -0
- data/src/org/jbox2d/callbacks/QueryCallback.java +45 -0
- data/src/org/jbox2d/callbacks/RayCastCallback.java +55 -0
- data/src/org/jbox2d/callbacks/TreeCallback.java +42 -0
- data/src/org/jbox2d/callbacks/TreeRayCastCallback.java +44 -0
- data/src/org/jbox2d/collision/AABB.java +338 -0
- data/src/org/jbox2d/collision/Collision.java +1444 -0
- data/src/org/jbox2d/collision/ContactID.java +106 -0
- data/src/org/jbox2d/collision/Distance.java +773 -0
- data/src/org/jbox2d/collision/DistanceInput.java +41 -0
- data/src/org/jbox2d/collision/DistanceOutput.java +43 -0
- data/src/org/jbox2d/collision/Manifold.java +116 -0
- data/src/org/jbox2d/collision/ManifoldPoint.java +104 -0
- data/src/org/jbox2d/collision/RayCastInput.java +47 -0
- data/src/org/jbox2d/collision/RayCastOutput.java +46 -0
- data/src/org/jbox2d/collision/TimeOfImpact.java +526 -0
- data/src/org/jbox2d/collision/WorldManifold.java +200 -0
- data/src/org/jbox2d/collision/broadphase/BroadPhase.java +92 -0
- data/src/org/jbox2d/collision/broadphase/BroadPhaseStrategy.java +88 -0
- data/src/org/jbox2d/collision/broadphase/DefaultBroadPhaseBuffer.java +268 -0
- data/src/org/jbox2d/collision/broadphase/DynamicTree.java +883 -0
- data/src/org/jbox2d/collision/broadphase/DynamicTreeFlatNodes.java +873 -0
- data/src/org/jbox2d/collision/broadphase/DynamicTreeNode.java +54 -0
- data/src/org/jbox2d/collision/broadphase/Pair.java +46 -0
- data/src/org/jbox2d/collision/shapes/ChainShape.java +264 -0
- data/src/org/jbox2d/collision/shapes/CircleShape.java +207 -0
- data/src/org/jbox2d/collision/shapes/EdgeShape.java +254 -0
- data/src/org/jbox2d/collision/shapes/MassData.java +105 -0
- data/src/org/jbox2d/collision/shapes/PolygonShape.java +718 -0
- data/src/org/jbox2d/collision/shapes/Shape.java +136 -0
- data/src/org/jbox2d/collision/shapes/ShapeType.java +32 -0
- data/src/org/jbox2d/common/BufferUtils.java +209 -0
- data/src/org/jbox2d/common/Color3f.java +88 -0
- data/src/org/jbox2d/common/IViewportTransform.java +133 -0
- data/src/org/jbox2d/common/Mat22.java +609 -0
- data/src/org/jbox2d/common/Mat33.java +290 -0
- data/src/org/jbox2d/common/MathUtils.java +335 -0
- data/src/org/jbox2d/common/OBBViewportTransform.java +174 -0
- data/src/org/jbox2d/common/PlatformMathUtils.java +46 -0
- data/src/org/jbox2d/common/RaycastResult.java +37 -0
- data/src/org/jbox2d/common/Rot.java +150 -0
- data/src/org/jbox2d/common/Settings.java +246 -0
- data/src/org/jbox2d/common/Sweep.java +116 -0
- data/src/org/jbox2d/common/Timer.java +46 -0
- data/src/org/jbox2d/common/Transform.java +203 -0
- data/src/org/jbox2d/common/Vec2.java +388 -0
- data/src/org/jbox2d/common/Vec3.java +170 -0
- data/src/org/jbox2d/dynamics/Body.java +1246 -0
- data/src/org/jbox2d/dynamics/BodyDef.java +382 -0
- data/src/org/jbox2d/dynamics/BodyType.java +41 -0
- data/src/org/jbox2d/dynamics/ContactManager.java +293 -0
- data/src/org/jbox2d/dynamics/Filter.java +62 -0
- data/src/org/jbox2d/dynamics/Fixture.java +454 -0
- data/src/org/jbox2d/dynamics/FixtureDef.java +214 -0
- data/src/org/jbox2d/dynamics/FixtureProxy.java +38 -0
- data/src/org/jbox2d/dynamics/Island.java +602 -0
- data/src/org/jbox2d/dynamics/Profile.java +97 -0
- data/src/org/jbox2d/dynamics/SolverData.java +33 -0
- data/src/org/jbox2d/dynamics/TimeStep.java +46 -0
- data/src/org/jbox2d/dynamics/World.java +2075 -0
- data/src/org/jbox2d/dynamics/contacts/ChainAndCircleContact.java +57 -0
- data/src/org/jbox2d/dynamics/contacts/ChainAndPolygonContact.java +57 -0
- data/src/org/jbox2d/dynamics/contacts/CircleContact.java +50 -0
- data/src/org/jbox2d/dynamics/contacts/Contact.java +365 -0
- data/src/org/jbox2d/dynamics/contacts/ContactCreator.java +35 -0
- data/src/org/jbox2d/dynamics/contacts/ContactEdge.java +56 -0
- data/src/org/jbox2d/dynamics/contacts/ContactPositionConstraint.java +49 -0
- data/src/org/jbox2d/dynamics/contacts/ContactRegister.java +31 -0
- data/src/org/jbox2d/dynamics/contacts/ContactSolver.java +1104 -0
- data/src/org/jbox2d/dynamics/contacts/ContactVelocityConstraint.java +60 -0
- data/src/org/jbox2d/dynamics/contacts/EdgeAndCircleContact.java +52 -0
- data/src/org/jbox2d/dynamics/contacts/EdgeAndPolygonContact.java +52 -0
- data/src/org/jbox2d/dynamics/contacts/PolygonAndCircleContact.java +51 -0
- data/src/org/jbox2d/dynamics/contacts/PolygonContact.java +50 -0
- data/src/org/jbox2d/dynamics/contacts/Position.java +31 -0
- data/src/org/jbox2d/dynamics/contacts/Velocity.java +31 -0
- data/src/org/jbox2d/dynamics/joints/ConstantVolumeJoint.java +258 -0
- data/src/org/jbox2d/dynamics/joints/ConstantVolumeJointDef.java +75 -0
- data/src/org/jbox2d/dynamics/joints/DistanceJoint.java +356 -0
- data/src/org/jbox2d/dynamics/joints/DistanceJointDef.java +106 -0
- data/src/org/jbox2d/dynamics/joints/FrictionJoint.java +294 -0
- data/src/org/jbox2d/dynamics/joints/FrictionJointDef.java +78 -0
- data/src/org/jbox2d/dynamics/joints/GearJoint.java +520 -0
- data/src/org/jbox2d/dynamics/joints/GearJointDef.java +58 -0
- data/src/org/jbox2d/dynamics/joints/Jacobian.java +32 -0
- data/src/org/jbox2d/dynamics/joints/Joint.java +235 -0
- data/src/org/jbox2d/dynamics/joints/JointDef.java +65 -0
- data/src/org/jbox2d/dynamics/joints/JointEdge.java +57 -0
- data/src/org/jbox2d/dynamics/joints/JointType.java +28 -0
- data/src/org/jbox2d/dynamics/joints/LimitState.java +28 -0
- data/src/org/jbox2d/dynamics/joints/MotorJoint.java +339 -0
- data/src/org/jbox2d/dynamics/joints/MotorJointDef.java +55 -0
- data/src/org/jbox2d/dynamics/joints/MouseJoint.java +262 -0
- data/src/org/jbox2d/dynamics/joints/MouseJointDef.java +62 -0
- data/src/org/jbox2d/dynamics/joints/PrismaticJoint.java +808 -0
- data/src/org/jbox2d/dynamics/joints/PrismaticJointDef.java +120 -0
- data/src/org/jbox2d/dynamics/joints/PulleyJoint.java +393 -0
- data/src/org/jbox2d/dynamics/joints/PulleyJointDef.java +105 -0
- data/src/org/jbox2d/dynamics/joints/RevoluteJoint.java +554 -0
- data/src/org/jbox2d/dynamics/joints/RevoluteJointDef.java +137 -0
- data/src/org/jbox2d/dynamics/joints/RopeJoint.java +276 -0
- data/src/org/jbox2d/dynamics/joints/RopeJointDef.java +34 -0
- data/src/org/jbox2d/dynamics/joints/WeldJoint.java +424 -0
- data/src/org/jbox2d/dynamics/joints/WeldJointDef.java +85 -0
- data/src/org/jbox2d/dynamics/joints/WheelJoint.java +498 -0
- data/src/org/jbox2d/dynamics/joints/WheelJointDef.java +98 -0
- data/src/org/jbox2d/particle/ParticleBodyContact.java +17 -0
- data/src/org/jbox2d/particle/ParticleColor.java +52 -0
- data/src/org/jbox2d/particle/ParticleContact.java +14 -0
- data/src/org/jbox2d/particle/ParticleDef.java +24 -0
- data/src/org/jbox2d/particle/ParticleGroup.java +154 -0
- data/src/org/jbox2d/particle/ParticleGroupDef.java +62 -0
- data/src/org/jbox2d/particle/ParticleGroupType.java +8 -0
- data/src/org/jbox2d/particle/ParticleSystem.java +2172 -0
- data/src/org/jbox2d/particle/ParticleType.java +28 -0
- data/src/org/jbox2d/particle/StackQueue.java +44 -0
- data/src/org/jbox2d/particle/VoronoiDiagram.java +209 -0
- data/src/org/jbox2d/pooling/IDynamicStack.java +47 -0
- data/src/org/jbox2d/pooling/IOrderedStack.java +57 -0
- data/src/org/jbox2d/pooling/IWorldPool.java +101 -0
- data/src/org/jbox2d/pooling/arrays/FloatArray.java +50 -0
- data/src/org/jbox2d/pooling/arrays/GeneratorArray.java +33 -0
- data/src/org/jbox2d/pooling/arrays/IntArray.java +53 -0
- data/src/org/jbox2d/pooling/arrays/Vec2Array.java +57 -0
- data/src/org/jbox2d/pooling/normal/CircleStack.java +77 -0
- data/src/org/jbox2d/pooling/normal/DefaultWorldPool.java +331 -0
- data/src/org/jbox2d/pooling/normal/MutableStack.java +72 -0
- data/src/org/jbox2d/pooling/normal/OrderedStack.java +73 -0
- data/src/org/jbox2d/pooling/stacks/DynamicIntStack.java +60 -0
- metadata +161 -14
- data/lib/jbox2d-library-2.3.1-SNAPSHOT.jar +0 -0
@@ -0,0 +1,136 @@
|
|
1
|
+
/*******************************************************************************
|
2
|
+
* Copyright (c) 2013, Daniel Murphy
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
* are permitted provided that the following conditions are met:
|
7
|
+
* * Redistributions of source code must retain the above copyright notice,
|
8
|
+
* this list of conditions and the following disclaimer.
|
9
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
* this list of conditions and the following disclaimer in the documentation
|
11
|
+
* and/or other materials provided with the distribution.
|
12
|
+
*
|
13
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
14
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
15
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
16
|
+
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
17
|
+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
18
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
19
|
+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
20
|
+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
21
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
23
|
+
******************************************************************************/
|
24
|
+
package org.jbox2d.collision.shapes;
|
25
|
+
|
26
|
+
import org.jbox2d.collision.AABB;
|
27
|
+
import org.jbox2d.collision.RayCastInput;
|
28
|
+
import org.jbox2d.collision.RayCastOutput;
|
29
|
+
import org.jbox2d.common.Transform;
|
30
|
+
import org.jbox2d.common.Vec2;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* A shape is used for collision detection. You can create a shape however you like. Shapes used for
|
34
|
+
* simulation in World are created automatically when a Fixture is created. Shapes may encapsulate a
|
35
|
+
* one or more child shapes.
|
36
|
+
*/
|
37
|
+
public abstract class Shape {
|
38
|
+
|
39
|
+
public final ShapeType m_type;
|
40
|
+
public float m_radius;
|
41
|
+
|
42
|
+
public Shape(ShapeType type) {
|
43
|
+
this.m_type = type;
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Get the type of this shape. You can use this to down cast to the concrete shape.
|
48
|
+
*
|
49
|
+
* @return the shape type.
|
50
|
+
*/
|
51
|
+
public ShapeType getType() {
|
52
|
+
return m_type;
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* The radius of the underlying shape. This can refer to different things depending on the shape
|
57
|
+
* implementation
|
58
|
+
*
|
59
|
+
* @return
|
60
|
+
*/
|
61
|
+
public float getRadius() {
|
62
|
+
return m_radius;
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Sets the radius of the underlying shape. This can refer to different things depending on the
|
67
|
+
* implementation
|
68
|
+
*
|
69
|
+
* @param radius
|
70
|
+
*/
|
71
|
+
public void setRadius(float radius) {
|
72
|
+
this.m_radius = radius;
|
73
|
+
}
|
74
|
+
|
75
|
+
/**
|
76
|
+
* Get the number of child primitives
|
77
|
+
*
|
78
|
+
* @return
|
79
|
+
*/
|
80
|
+
public abstract int getChildCount();
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Test a point for containment in this shape. This only works for convex shapes.
|
84
|
+
*
|
85
|
+
* @param xf the shape world transform.
|
86
|
+
* @param p a point in world coordinates.
|
87
|
+
* @return
|
88
|
+
*/
|
89
|
+
public abstract boolean testPoint(final Transform xf, final Vec2 p);
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Cast a ray against a child shape.
|
93
|
+
*
|
94
|
+
* @param output
|
95
|
+
* @param input
|
96
|
+
* @param transform
|
97
|
+
* @param childIndex
|
98
|
+
* @return if hit
|
99
|
+
*/
|
100
|
+
public abstract boolean raycast(RayCastOutput output, RayCastInput input, Transform transform,
|
101
|
+
int childIndex);
|
102
|
+
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Given a transform, compute the associated axis aligned bounding box for a child shape.
|
106
|
+
*
|
107
|
+
* @param aabb returns the axis aligned box.
|
108
|
+
* @param xf the world transform of the shape.
|
109
|
+
* @param childIndex
|
110
|
+
*/
|
111
|
+
public abstract void computeAABB(final AABB aabb, final Transform xf, int childIndex);
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Compute the mass properties of this shape using its dimensions and density. The inertia tensor
|
115
|
+
* is computed about the local origin.
|
116
|
+
*
|
117
|
+
* @param massData returns the mass data for this shape.
|
118
|
+
* @param density the density in kilograms per meter squared.
|
119
|
+
*/
|
120
|
+
public abstract void computeMass(final MassData massData, final float density);
|
121
|
+
|
122
|
+
/**
|
123
|
+
* Compute the distance from the current shape to the specified point. This only works for convex
|
124
|
+
* shapes.
|
125
|
+
*
|
126
|
+
* @param xf the shape world transform.
|
127
|
+
* @param p a point in world coordinates.
|
128
|
+
* @param childIndex
|
129
|
+
* @param normalOut returns the direction in which the distance increases.
|
130
|
+
* @return distance returns the distance from the current shape.
|
131
|
+
*/
|
132
|
+
public abstract float computeDistanceToOut(Transform xf, Vec2 p, int childIndex, Vec2 normalOut);
|
133
|
+
|
134
|
+
@Override
|
135
|
+
public abstract Shape clone();
|
136
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/*******************************************************************************
|
2
|
+
* Copyright (c) 2013, Daniel Murphy
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
* are permitted provided that the following conditions are met:
|
7
|
+
* * Redistributions of source code must retain the above copyright notice,
|
8
|
+
* this list of conditions and the following disclaimer.
|
9
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
* this list of conditions and the following disclaimer in the documentation
|
11
|
+
* and/or other materials provided with the distribution.
|
12
|
+
*
|
13
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
14
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
15
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
16
|
+
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
17
|
+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
18
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
19
|
+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
20
|
+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
21
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
23
|
+
******************************************************************************/
|
24
|
+
package org.jbox2d.collision.shapes;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Types of shapes
|
28
|
+
* @author Daniel
|
29
|
+
*/
|
30
|
+
public enum ShapeType {
|
31
|
+
CIRCLE, EDGE, POLYGON, CHAIN
|
32
|
+
}
|
@@ -0,0 +1,209 @@
|
|
1
|
+
package org.jbox2d.common;
|
2
|
+
|
3
|
+
import java.lang.reflect.Array;
|
4
|
+
|
5
|
+
public class BufferUtils {
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Reallocate a buffer.
|
9
|
+
*
|
10
|
+
* @param <T>
|
11
|
+
* @param klass
|
12
|
+
* @param oldBuffer
|
13
|
+
* @param oldCapacity
|
14
|
+
* @param newCapacity
|
15
|
+
* @return
|
16
|
+
*/
|
17
|
+
public static <T> T[] reallocateBuffer(Class<T> klass, T[] oldBuffer, int oldCapacity,
|
18
|
+
int newCapacity) {
|
19
|
+
assert (newCapacity > oldCapacity);
|
20
|
+
@SuppressWarnings("unchecked")
|
21
|
+
T[] newBuffer = (T[]) Array.newInstance(klass, newCapacity);
|
22
|
+
if (oldBuffer != null) {
|
23
|
+
System.arraycopy(oldBuffer, 0, newBuffer, 0, oldCapacity);
|
24
|
+
}
|
25
|
+
for (int i = oldCapacity; i < newCapacity; i++) {
|
26
|
+
try {
|
27
|
+
newBuffer[i] = klass.newInstance();
|
28
|
+
} catch (InstantiationException | IllegalAccessException e) {
|
29
|
+
throw new RuntimeException(e);
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return newBuffer;
|
33
|
+
}
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Reallocate a buffer.
|
37
|
+
*
|
38
|
+
* @param oldBuffer
|
39
|
+
* @param oldCapacity
|
40
|
+
* @param newCapacity
|
41
|
+
* @return
|
42
|
+
*/
|
43
|
+
public static int[] reallocateBuffer(int[] oldBuffer, int oldCapacity, int newCapacity) {
|
44
|
+
assert (newCapacity > oldCapacity);
|
45
|
+
int[] newBuffer = new int[newCapacity];
|
46
|
+
if (oldBuffer != null) {
|
47
|
+
System.arraycopy(oldBuffer, 0, newBuffer, 0, oldCapacity);
|
48
|
+
}
|
49
|
+
return newBuffer;
|
50
|
+
}
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Reallocate a buffer.
|
54
|
+
*
|
55
|
+
* @param oldBuffer
|
56
|
+
* @param oldCapacity
|
57
|
+
* @param newCapacity
|
58
|
+
* @return
|
59
|
+
*/
|
60
|
+
public static float[] reallocateBuffer(float[] oldBuffer, int oldCapacity, int newCapacity) {
|
61
|
+
assert (newCapacity > oldCapacity);
|
62
|
+
float[] newBuffer = new float[newCapacity];
|
63
|
+
if (oldBuffer != null) {
|
64
|
+
System.arraycopy(oldBuffer, 0, newBuffer, 0, oldCapacity);
|
65
|
+
}
|
66
|
+
return newBuffer;
|
67
|
+
}
|
68
|
+
|
69
|
+
/**
|
70
|
+
* Reallocate a buffer. A 'deferred' buffer is reallocated only if it is not
|
71
|
+
* NULL. If 'userSuppliedCapacity' is not zero, buffer is user supplied and
|
72
|
+
* must be kept.
|
73
|
+
*
|
74
|
+
* @param <T>
|
75
|
+
* @param klass
|
76
|
+
* @param buffer
|
77
|
+
* @param userSuppliedCapacity
|
78
|
+
* @param oldCapacity
|
79
|
+
* @param newCapacity
|
80
|
+
* @param deferred
|
81
|
+
* @return
|
82
|
+
*/
|
83
|
+
public static <T> T[] reallocateBuffer(Class<T> klass, T[] buffer, int userSuppliedCapacity,
|
84
|
+
int oldCapacity, int newCapacity, boolean deferred) {
|
85
|
+
assert (newCapacity > oldCapacity);
|
86
|
+
assert (userSuppliedCapacity == 0 || newCapacity <= userSuppliedCapacity);
|
87
|
+
if ((!deferred || buffer != null) && userSuppliedCapacity == 0) {
|
88
|
+
buffer = reallocateBuffer(klass, buffer, oldCapacity, newCapacity);
|
89
|
+
}
|
90
|
+
return buffer;
|
91
|
+
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Reallocate an int buffer. A 'deferred' buffer is reallocated only if it
|
95
|
+
* is not NULL. If 'userSuppliedCapacity' is not zero, buffer is user
|
96
|
+
* supplied and must be kept.
|
97
|
+
*
|
98
|
+
* @param buffer
|
99
|
+
* @param userSuppliedCapacity
|
100
|
+
* @param oldCapacity
|
101
|
+
* @param newCapacity
|
102
|
+
* @param deferred
|
103
|
+
* @return
|
104
|
+
*/
|
105
|
+
public static int[] reallocateBuffer(int[] buffer, int userSuppliedCapacity, int oldCapacity,
|
106
|
+
int newCapacity, boolean deferred) {
|
107
|
+
assert (newCapacity > oldCapacity);
|
108
|
+
assert (userSuppliedCapacity == 0 || newCapacity <= userSuppliedCapacity);
|
109
|
+
if ((!deferred || buffer != null) && userSuppliedCapacity == 0) {
|
110
|
+
buffer = reallocateBuffer(buffer, oldCapacity, newCapacity);
|
111
|
+
}
|
112
|
+
return buffer;
|
113
|
+
}
|
114
|
+
|
115
|
+
/**
|
116
|
+
* Reallocate a float buffer. A 'deferred' buffer is reallocated only if it
|
117
|
+
* is not NULL. If 'userSuppliedCapacity' is not zero, buffer is user
|
118
|
+
* supplied and must be kept.
|
119
|
+
*
|
120
|
+
* @param buffer
|
121
|
+
* @param userSuppliedCapacity
|
122
|
+
* @param oldCapacity
|
123
|
+
* @param newCapacity
|
124
|
+
* @param deferred
|
125
|
+
* @return
|
126
|
+
*/
|
127
|
+
public static float[] reallocateBuffer(float[] buffer, int userSuppliedCapacity, int oldCapacity,
|
128
|
+
int newCapacity, boolean deferred) {
|
129
|
+
assert (newCapacity > oldCapacity);
|
130
|
+
assert (userSuppliedCapacity == 0 || newCapacity <= userSuppliedCapacity);
|
131
|
+
if ((!deferred || buffer != null) && userSuppliedCapacity == 0) {
|
132
|
+
buffer = reallocateBuffer(buffer, oldCapacity, newCapacity);
|
133
|
+
}
|
134
|
+
return buffer;
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Rotate an array, see std::rotate
|
139
|
+
*
|
140
|
+
* @param <T>
|
141
|
+
* @param ray
|
142
|
+
* @param first
|
143
|
+
* @param new_first
|
144
|
+
* @param last
|
145
|
+
*/
|
146
|
+
public static <T> void rotate(T[] ray, int first, int new_first, int last) {
|
147
|
+
int next = new_first;
|
148
|
+
while (next != first) {
|
149
|
+
T temp = ray[first];
|
150
|
+
ray[first] = ray[next];
|
151
|
+
ray[next] = temp;
|
152
|
+
first++;
|
153
|
+
next++;
|
154
|
+
if (next == last) {
|
155
|
+
next = new_first;
|
156
|
+
} else if (first == new_first) {
|
157
|
+
new_first = next;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
/**
|
163
|
+
* Rotate an array, see std::rotate
|
164
|
+
*
|
165
|
+
* @param ray
|
166
|
+
* @param first
|
167
|
+
* @param new_first
|
168
|
+
* @param last
|
169
|
+
*/
|
170
|
+
public static void rotate(int[] ray, int first, int new_first, int last) {
|
171
|
+
int next = new_first;
|
172
|
+
while (next != first) {
|
173
|
+
int temp = ray[first];
|
174
|
+
ray[first] = ray[next];
|
175
|
+
ray[next] = temp;
|
176
|
+
first++;
|
177
|
+
next++;
|
178
|
+
if (next == last) {
|
179
|
+
next = new_first;
|
180
|
+
} else if (first == new_first) {
|
181
|
+
new_first = next;
|
182
|
+
}
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
/**
|
187
|
+
* Rotate an array, see std::rotate
|
188
|
+
*
|
189
|
+
* @param ray
|
190
|
+
* @param first
|
191
|
+
* @param new_first
|
192
|
+
* @param last
|
193
|
+
*/
|
194
|
+
public static void rotate(float[] ray, int first, int new_first, int last) {
|
195
|
+
int next = new_first;
|
196
|
+
while (next != first) {
|
197
|
+
float temp = ray[first];
|
198
|
+
ray[first] = ray[next];
|
199
|
+
ray[next] = temp;
|
200
|
+
first++;
|
201
|
+
next++;
|
202
|
+
if (next == last) {
|
203
|
+
next = new_first;
|
204
|
+
} else if (first == new_first) {
|
205
|
+
new_first = next;
|
206
|
+
}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
}
|
@@ -0,0 +1,88 @@
|
|
1
|
+
/*******************************************************************************
|
2
|
+
* Copyright (c) 2013, Daniel Murphy
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
* are permitted provided that the following conditions are met:
|
7
|
+
* * Redistributions of source code must retain the above copyright notice,
|
8
|
+
* this list of conditions and the following disclaimer.
|
9
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
* this list of conditions and the following disclaimer in the documentation
|
11
|
+
* and/or other materials provided with the distribution.
|
12
|
+
*
|
13
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
14
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
15
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
16
|
+
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
17
|
+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
18
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
19
|
+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
20
|
+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
21
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
23
|
+
******************************************************************************/
|
24
|
+
/*
|
25
|
+
* JBox2D - A Java Port of Erin Catto's Box2D
|
26
|
+
*
|
27
|
+
* JBox2D homepage: http://jbox2d.sourceforge.net/
|
28
|
+
* Box2D homepage: http://www.box2d.org
|
29
|
+
*
|
30
|
+
* This software is provided 'as-is', without any express or implied
|
31
|
+
* warranty. In no event will the authors be held liable for any damages
|
32
|
+
* arising from the use of this software.
|
33
|
+
*
|
34
|
+
* Permission is granted to anyone to use this software for any purpose,
|
35
|
+
* including commercial applications, and to alter it and redistribute it
|
36
|
+
* freely, subject to the following restrictions:
|
37
|
+
*
|
38
|
+
* 1. The origin of this software must not be misrepresented; you must not
|
39
|
+
* claim that you wrote the original software. If you use this software
|
40
|
+
* in a product, an acknowledgment in the product documentation would be
|
41
|
+
* appreciated but is not required.
|
42
|
+
* 2. Altered source versions must be plainly marked as such, and must not be
|
43
|
+
* misrepresented as being the original software.
|
44
|
+
* 3. This notice may not be removed or altered from any source distribution.
|
45
|
+
*/
|
46
|
+
|
47
|
+
package org.jbox2d.common;
|
48
|
+
|
49
|
+
// updated to rev 100
|
50
|
+
/**
|
51
|
+
* Similar to javax.vecmath.Color3f holder
|
52
|
+
* @author ewjordan
|
53
|
+
*
|
54
|
+
*/
|
55
|
+
public class Color3f {
|
56
|
+
|
57
|
+
public static final Color3f WHITE = new Color3f(1, 1, 1);
|
58
|
+
public static final Color3f BLACK = new Color3f(0, 0, 0);
|
59
|
+
public static final Color3f BLUE = new Color3f(0, 0, 1);
|
60
|
+
public static final Color3f GREEN = new Color3f(0, 1, 0);
|
61
|
+
public static final Color3f RED = new Color3f(1, 0, 0);
|
62
|
+
|
63
|
+
public float x;
|
64
|
+
public float y;
|
65
|
+
public float z;
|
66
|
+
|
67
|
+
|
68
|
+
public Color3f(){
|
69
|
+
x = y = z = 0;
|
70
|
+
}
|
71
|
+
public Color3f(float r, float g, float b) {
|
72
|
+
x = r;
|
73
|
+
y = g;
|
74
|
+
z = b;
|
75
|
+
}
|
76
|
+
|
77
|
+
public void set(float r, float g, float b){
|
78
|
+
x = r;
|
79
|
+
y = g;
|
80
|
+
z = b;
|
81
|
+
}
|
82
|
+
|
83
|
+
public void set(Color3f argColor){
|
84
|
+
x = argColor.x;
|
85
|
+
y = argColor.y;
|
86
|
+
z = argColor.z;
|
87
|
+
}
|
88
|
+
}
|
@@ -0,0 +1,133 @@
|
|
1
|
+
/*******************************************************************************
|
2
|
+
* Copyright (c) 2013, Daniel Murphy
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* Redistribution and use in source and binary forms, with or without modification,
|
6
|
+
* are permitted provided that the following conditions are met:
|
7
|
+
* * Redistributions of source code must retain the above copyright notice,
|
8
|
+
* this list of conditions and the following disclaimer.
|
9
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
* this list of conditions and the following disclaimer in the documentation
|
11
|
+
* and/or other materials provided with the distribution.
|
12
|
+
*
|
13
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
14
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
15
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
16
|
+
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
17
|
+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
18
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
19
|
+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
20
|
+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
21
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
|
+
* POSSIBILITY OF SUCH DAMAGE.
|
23
|
+
******************************************************************************/
|
24
|
+
package org.jbox2d.common;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* This is the viewport transform used from drawing. Use yFlip if you are drawing from the top-left
|
28
|
+
* corner.
|
29
|
+
*
|
30
|
+
* @author Daniel
|
31
|
+
*/
|
32
|
+
public interface IViewportTransform {
|
33
|
+
|
34
|
+
/**
|
35
|
+
* @return if the transform flips the y axis
|
36
|
+
*/
|
37
|
+
boolean isYFlip();
|
38
|
+
|
39
|
+
/**
|
40
|
+
* @param yFlip if we flip the y axis when transforming
|
41
|
+
*/
|
42
|
+
void setYFlip(boolean yFlip);
|
43
|
+
|
44
|
+
/**
|
45
|
+
* This is the half-width and half-height. This should be the actual half-width and half-height,
|
46
|
+
* not anything transformed or scaled. Not a copy.
|
47
|
+
* @return
|
48
|
+
*/
|
49
|
+
Vec2 getExtents();
|
50
|
+
|
51
|
+
/**
|
52
|
+
* This sets the half-width and half-height. This should be the actual half-width and half-height,
|
53
|
+
* not anything transformed or scaled.
|
54
|
+
* @param extents
|
55
|
+
*/
|
56
|
+
void setExtents(Vec2 extents);
|
57
|
+
|
58
|
+
/**
|
59
|
+
* This sets the half-width and half-height of the viewport. This should be the actual half-width
|
60
|
+
* and half-height, not anything transformed or scaled.
|
61
|
+
* @param halfWidth
|
62
|
+
* @param halfHeight
|
63
|
+
*/
|
64
|
+
void setExtents(float halfWidth, float halfHeight);
|
65
|
+
|
66
|
+
/**
|
67
|
+
* center of the viewport. Not a copy.
|
68
|
+
* @return
|
69
|
+
*/
|
70
|
+
Vec2 getCenter();
|
71
|
+
|
72
|
+
/**
|
73
|
+
* sets the center of the viewport.
|
74
|
+
* @param pos
|
75
|
+
*/
|
76
|
+
void setCenter(Vec2 pos);
|
77
|
+
|
78
|
+
/**
|
79
|
+
* sets the center of the viewport.
|
80
|
+
* @param x
|
81
|
+
* @param y
|
82
|
+
*/
|
83
|
+
void setCenter(float x, float y);
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Sets the transform's center to the given x and y coordinates, and using the given scale.
|
87
|
+
* @param x
|
88
|
+
* @param y
|
89
|
+
* @param scale
|
90
|
+
*/
|
91
|
+
void setCamera(float x, float y, float scale);
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Transforms the given directional vector by the viewport transform (not positional)
|
95
|
+
* @param world
|
96
|
+
* @param screen
|
97
|
+
*/
|
98
|
+
void getWorldVectorToScreen(Vec2 world, Vec2 screen);
|
99
|
+
|
100
|
+
|
101
|
+
/**
|
102
|
+
* Transforms the given directional screen vector back to the world direction.
|
103
|
+
* @param screen
|
104
|
+
* @param world
|
105
|
+
*/
|
106
|
+
void getScreenVectorToWorld(Vec2 screen, Vec2 world);
|
107
|
+
|
108
|
+
Mat22 getMat22Representation();
|
109
|
+
|
110
|
+
|
111
|
+
/**
|
112
|
+
* takes the world coordinate (world) puts the corresponding screen coordinate in screen. It
|
113
|
+
* should be safe to give the same object as both parameters.
|
114
|
+
* @param world
|
115
|
+
* @param screen
|
116
|
+
*/
|
117
|
+
void getWorldToScreen(Vec2 world, Vec2 screen);
|
118
|
+
|
119
|
+
|
120
|
+
/**
|
121
|
+
* takes the screen coordinates (screen) and puts the corresponding world coordinates in world. It
|
122
|
+
* should be safe to give the same object as both parameters.
|
123
|
+
* @param screen
|
124
|
+
* @param world
|
125
|
+
*/
|
126
|
+
void getScreenToWorld(Vec2 screen, Vec2 world);
|
127
|
+
|
128
|
+
/**
|
129
|
+
* Multiplies the viewport transform by the given Mat22
|
130
|
+
* @param transform
|
131
|
+
*/
|
132
|
+
void mulByTransform(Mat22 transform);
|
133
|
+
}
|