propane 3.8.0-java → 4.0.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 +1 -1
- data/.mvn/wrapper/maven-wrapper.properties +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +7 -1
- data/README.md +7 -7
- data/Rakefile +6 -5
- data/lib/propane/app.rb +10 -17
- data/lib/propane/helper_methods.rb +6 -6
- data/lib/propane/version.rb +1 -1
- data/lib/propane-4.0.0.jar +0 -0
- data/library/pdf/itextpdf-5.5.13.2.jar +0 -0
- data/library/pdf/pdf.rb +7 -0
- data/library/slider/slider.rb +1 -1
- data/library/svg/batik-all-1.14.jar +0 -0
- data/library/svg/svg.rb +7 -0
- data/mvnw +3 -3
- data/mvnw.cmd +2 -2
- data/pom.rb +35 -8
- data/pom.xml +60 -9
- data/propane.gemspec +9 -7
- data/src/main/java/monkstone/ColorUtil.java +1 -1
- data/src/main/java/monkstone/FastNoiseModuleJava.java +127 -0
- data/src/main/java/monkstone/MathToolModule.java +31 -31
- data/src/main/java/monkstone/PropaneLibrary.java +3 -1
- data/src/main/java/monkstone/SmoothNoiseModuleJava.java +127 -0
- data/src/main/java/monkstone/fastmath/DegLutTables.java +25 -26
- data/src/main/java/monkstone/fastmath/Deglut.java +1 -1
- data/src/main/java/monkstone/filechooser/Chooser.java +2 -2
- data/src/main/java/monkstone/noise/LICENSE +121 -0
- data/src/main/java/monkstone/noise/OpenSimplex2F.java +914 -0
- data/src/main/java/monkstone/noise/OpenSimplex2S.java +1138 -0
- data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SliderBar.java +1 -1
- data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
- data/src/main/java/monkstone/slider/WheelHandler.java +2 -2
- data/src/main/java/monkstone/vecmath/JRender.java +6 -6
- data/src/main/java/monkstone/vecmath/package-info.java +1 -1
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +103 -83
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +27 -41
- data/src/main/java/monkstone/videoevent/CaptureEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/MovieEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/package-info.java +1 -1
- data/src/main/java/processing/awt/PGraphicsJava2D.java +11 -4
- data/src/main/java/processing/awt/PImageAWT.java +8 -8
- data/src/main/java/processing/core/PApplet.java +245 -254
- data/src/main/java/processing/core/PConstants.java +155 -163
- data/src/main/java/processing/core/PGraphics.java +116 -109
- data/src/main/java/processing/core/PImage.java +3025 -3047
- data/src/main/java/processing/core/PMatrix.java +5 -2
- data/src/main/java/processing/data/DoubleDict.java +72 -43
- data/src/main/java/processing/data/DoubleList.java +6 -2
- data/src/main/java/processing/data/FloatDict.java +744 -756
- data/src/main/java/processing/data/FloatList.java +68 -26
- data/src/main/java/processing/data/IntDict.java +72 -45
- data/src/main/java/processing/data/IntList.java +63 -26
- data/src/main/java/processing/data/JSONArray.java +892 -931
- data/src/main/java/processing/data/JSONObject.java +1169 -1262
- data/src/main/java/processing/data/JSONTokener.java +30 -49
- data/src/main/java/processing/data/LongDict.java +699 -712
- data/src/main/java/processing/data/LongList.java +676 -700
- data/src/main/java/processing/data/Sort.java +1 -0
- data/src/main/java/processing/data/Table.java +4040 -3661
- data/src/main/java/processing/data/TableRow.java +16 -0
- data/src/main/java/processing/data/XML.java +1041 -956
- data/src/main/java/processing/event/TouchEvent.java +1 -1
- data/src/main/java/processing/opengl/FontTexture.java +2 -2
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +28 -31
- data/src/main/java/processing/opengl/PJOGL.java +8 -7
- data/src/main/java/processing/opengl/PShader.java +1 -6
- data/src/main/java/processing/opengl/PShapeOpenGL.java +23 -24
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +6 -6
- data/src/main/java/processing/pdf/PGraphicsPDF.java +581 -0
- data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
- data/src/main/{java/processing/opengl → resources}/cursors/arrow.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/cross.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/hand.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/license.txt +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/move.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/text.png +0 -0
- data/src/main/{java/processing/opengl → resources}/cursors/wait.png +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/ColorFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/ColorVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LightFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LightVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LineFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/LineVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/MaskFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/PointFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/PointVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexLightFrag.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexLightVert.glsl +0 -0
- data/src/main/{java/processing/opengl → resources}/shaders/TexVert.glsl +0 -0
- data/test/test_helper.rb +1 -0
- data/test/vecmath_spec_test.rb +14 -3
- data/vendors/Rakefile +1 -1
- metadata +53 -53
- data/lib/propane-3.8.0.jar +0 -0
- data/src/main/java/monkstone/noise/Noise.java +0 -116
- data/src/main/java/monkstone/noise/NoiseGenerator.java +0 -63
- data/src/main/java/monkstone/noise/NoiseMode.java +0 -15
- data/src/main/java/monkstone/noise/SimplexNoise.java +0 -470
- data/src/main/java/monkstone/noise/ValueNoise.java +0 -170
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2015-
|
|
2
|
+
* Copyright (c) 2015-22 Martin Prout
|
|
3
3
|
*
|
|
4
4
|
* This library is free software; you can redistribute it and/or
|
|
5
5
|
* modify it under the terms of the GNU Lesser General Public
|
|
@@ -31,5 +31,5 @@ public interface WheelHandler {
|
|
|
31
31
|
*
|
|
32
32
|
* @param amount int
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
void handleWheel(final short amount);
|
|
35
35
|
}
|
|
@@ -11,14 +11,14 @@ public interface JRender {
|
|
|
11
11
|
* @param x double
|
|
12
12
|
* @param y double
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
void vertex(double x, double y);
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
*
|
|
18
18
|
* @param x double
|
|
19
19
|
* @param y double
|
|
20
20
|
*/
|
|
21
|
-
|
|
21
|
+
void curveVertex(double x, double y);
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
*
|
|
@@ -26,7 +26,7 @@ public interface JRender {
|
|
|
26
26
|
* @param y double
|
|
27
27
|
* @param z double
|
|
28
28
|
*/
|
|
29
|
-
|
|
29
|
+
void vertex(double x, double y, double z);
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
*
|
|
@@ -36,7 +36,7 @@ public interface JRender {
|
|
|
36
36
|
* @param u double
|
|
37
37
|
* @param v double
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
void vertex(double x, double y, double z, double u, double v);
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
42
|
*
|
|
@@ -44,7 +44,7 @@ public interface JRender {
|
|
|
44
44
|
* @param y double
|
|
45
45
|
* @param z double
|
|
46
46
|
*/
|
|
47
|
-
|
|
47
|
+
void curveVertex(double x, double y, double z);
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
*
|
|
@@ -52,5 +52,5 @@ public interface JRender {
|
|
|
52
52
|
* @param y double
|
|
53
53
|
* @param z double
|
|
54
54
|
*/
|
|
55
|
-
|
|
55
|
+
void normal(double x, double y, double z);
|
|
56
56
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
package monkstone.vecmath.vec2;
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
|
-
* Copyright (c) 2015-
|
|
4
|
+
* Copyright (c) 2015-22 Martin Prout
|
|
5
5
|
*
|
|
6
6
|
* This library is free software; you can redistribute it and/or
|
|
7
7
|
* modify it under the terms of the GNU Lesser General Public
|
|
@@ -21,6 +21,7 @@ package monkstone.vecmath.vec2;
|
|
|
21
21
|
*
|
|
22
22
|
* fastAtan2 algorithm from https://github.com/libgdx/libgdx (Apache 2.0 license)
|
|
23
23
|
*/
|
|
24
|
+
import java.util.logging.Logger;
|
|
24
25
|
import org.jruby.Ruby;
|
|
25
26
|
import org.jruby.RubyArray;
|
|
26
27
|
import org.jruby.RubyClass;
|
|
@@ -40,11 +41,10 @@ import monkstone.vecmath.JRender;
|
|
|
40
41
|
* @author Martin Prout
|
|
41
42
|
*/
|
|
42
43
|
@JRubyClass(name = "Vec2D")
|
|
43
|
-
public class Vec2 extends RubyObject {
|
|
44
|
+
public final class Vec2 extends RubyObject {
|
|
44
45
|
|
|
45
46
|
static final double EPSILON = 9.999999747378752e-05; // matches processing.org EPSILON
|
|
46
47
|
private static final long serialVersionUID = -2950154560223211646L;
|
|
47
|
-
|
|
48
48
|
private double jx = 0;
|
|
49
49
|
private double jy = 0;
|
|
50
50
|
|
|
@@ -73,7 +73,7 @@ public class Vec2 extends RubyObject {
|
|
|
73
73
|
* @return new Vec2 object (ruby)
|
|
74
74
|
*/
|
|
75
75
|
@JRubyMethod(name = "new", meta = true, rest = true)
|
|
76
|
-
public static
|
|
76
|
+
public static IRubyObject rbNew(ThreadContext context, IRubyObject klazz, IRubyObject... args) {
|
|
77
77
|
Vec2 vec2 = (Vec2) ((RubyClass) klazz).allocate();
|
|
78
78
|
vec2.init(context, args);
|
|
79
79
|
return vec2;
|
|
@@ -91,17 +91,15 @@ public class Vec2 extends RubyObject {
|
|
|
91
91
|
void init(ThreadContext context, IRubyObject... args) {
|
|
92
92
|
int count = args.length;
|
|
93
93
|
if (count == 2) {
|
|
94
|
-
jx = (args[0]
|
|
95
|
-
jy = (args[1]
|
|
94
|
+
jx = jvalue(args[0]);
|
|
95
|
+
jy = jvalue(args[1]);
|
|
96
96
|
} // allow ruby ducktyping in constructor
|
|
97
97
|
if (count == 1) {
|
|
98
98
|
if (!(args[0].respondsTo("x"))) {
|
|
99
99
|
throw context.runtime.newTypeError(args[0].getType() + " doesn't respond_to :x & :y");
|
|
100
100
|
}
|
|
101
|
-
jx = (
|
|
102
|
-
|
|
103
|
-
jy = ((args[0].callMethod(context, "y")) instanceof RubyFloat)
|
|
104
|
-
? ((RubyFloat) args[0].callMethod(context, "y")).getValue() : ((RubyFixnum) args[0].callMethod(context, "y")).getDoubleValue();
|
|
101
|
+
jx = jvalue(args[0].callMethod(context, "x"));
|
|
102
|
+
jy = jvalue(args[0].callMethod(context, "y"));
|
|
105
103
|
}
|
|
106
104
|
}
|
|
107
105
|
|
|
@@ -137,13 +135,14 @@ public class Vec2 extends RubyObject {
|
|
|
137
135
|
|
|
138
136
|
public IRubyObject aref(ThreadContext context, IRubyObject key) {
|
|
139
137
|
Ruby runtime = context.runtime;
|
|
140
|
-
if (key instanceof RubySymbol) {
|
|
141
|
-
if (
|
|
138
|
+
if (key instanceof RubySymbol rubySymbol) {
|
|
139
|
+
if (rubySymbol.equals(RubySymbol.newSymbol(runtime, "x"))) {
|
|
142
140
|
return runtime.newFloat(jx);
|
|
143
|
-
}
|
|
141
|
+
}
|
|
142
|
+
if (rubySymbol.equals(RubySymbol.newSymbol(runtime, "y"))) {
|
|
144
143
|
return runtime.newFloat(jy);
|
|
145
144
|
} else {
|
|
146
|
-
throw runtime.newIndexError("
|
|
145
|
+
throw runtime.newIndexError("unknown key");
|
|
147
146
|
}
|
|
148
147
|
} else {
|
|
149
148
|
throw runtime.newIndexError("invalid key");
|
|
@@ -160,13 +159,13 @@ public class Vec2 extends RubyObject {
|
|
|
160
159
|
|
|
161
160
|
public IRubyObject aset(ThreadContext context, IRubyObject key, IRubyObject value) {
|
|
162
161
|
Ruby runtime = context.runtime;
|
|
163
|
-
if (key instanceof RubySymbol) {
|
|
164
|
-
if (
|
|
165
|
-
jx = (value
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
if (key instanceof RubySymbol rubySymbol) {
|
|
163
|
+
if (rubySymbol.equals(RubySymbol.newSymbol(runtime, "x"))) {
|
|
164
|
+
jx = jvalue(value);
|
|
165
|
+
} else if (rubySymbol.equals(RubySymbol.newSymbol(runtime, "y"))) {
|
|
166
|
+
jy = jvalue(value);
|
|
167
|
+
} else {
|
|
168
|
+
throw runtime.newIndexError("unknown key");
|
|
170
169
|
}
|
|
171
170
|
} else {
|
|
172
171
|
throw runtime.newIndexError("invalid key");
|
|
@@ -183,11 +182,7 @@ public class Vec2 extends RubyObject {
|
|
|
183
182
|
@JRubyMethod(name = "x=")
|
|
184
183
|
|
|
185
184
|
public IRubyObject setX(ThreadContext context, IRubyObject other) {
|
|
186
|
-
|
|
187
|
-
jx = ((RubyFloat) other).getValue();
|
|
188
|
-
} else {
|
|
189
|
-
jx = ((RubyFixnum) other).getDoubleValue();
|
|
190
|
-
}
|
|
185
|
+
jx = jvalue(other);
|
|
191
186
|
return other;
|
|
192
187
|
}
|
|
193
188
|
|
|
@@ -200,11 +195,7 @@ public class Vec2 extends RubyObject {
|
|
|
200
195
|
@JRubyMethod(name = "y=")
|
|
201
196
|
|
|
202
197
|
public IRubyObject setY(ThreadContext context, IRubyObject other) {
|
|
203
|
-
|
|
204
|
-
jy = ((RubyFloat) other).getValue();
|
|
205
|
-
} else {
|
|
206
|
-
jy = ((RubyFixnum) other).getDoubleValue();
|
|
207
|
-
}
|
|
198
|
+
jy = jvalue(other);
|
|
208
199
|
return other;
|
|
209
200
|
}
|
|
210
201
|
|
|
@@ -219,28 +210,36 @@ public class Vec2 extends RubyObject {
|
|
|
219
210
|
public IRubyObject dist(ThreadContext context, IRubyObject other) {
|
|
220
211
|
Vec2 b = null;
|
|
221
212
|
Ruby runtime = context.runtime;
|
|
222
|
-
if (other instanceof Vec2) {
|
|
223
|
-
b =
|
|
213
|
+
if (other instanceof Vec2 vec) {
|
|
214
|
+
b = vec.toJava(Vec2.class);
|
|
224
215
|
} else {
|
|
225
216
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
226
217
|
}
|
|
227
|
-
double result = Math.hypot(
|
|
218
|
+
double result = Math.hypot(jx - b.jx, jy - b.jy);
|
|
228
219
|
return runtime.newFloat(result);
|
|
229
220
|
}
|
|
221
|
+
|
|
222
|
+
@Deprecated
|
|
223
|
+
@JRubyMethod(name = "cross", required = 1)
|
|
224
|
+
public IRubyObject cross(ThreadContext context, IRubyObject other) {
|
|
225
|
+
Logger log = Logger.getGlobal();
|
|
226
|
+
log.warning("prefer ^ operator");
|
|
227
|
+
return op_wedge(context, other);
|
|
228
|
+
}
|
|
230
229
|
|
|
231
230
|
/**
|
|
232
231
|
*
|
|
233
232
|
* @param context ThreadContext
|
|
234
233
|
* @param other IRubyObject
|
|
235
|
-
* @return
|
|
234
|
+
* @return wedge product IRubyObject
|
|
236
235
|
*/
|
|
237
|
-
@JRubyMethod(name = "
|
|
236
|
+
@JRubyMethod(name = "^", required = 1)
|
|
238
237
|
|
|
239
|
-
public IRubyObject
|
|
238
|
+
public IRubyObject op_wedge(ThreadContext context, IRubyObject other) {
|
|
240
239
|
Vec2 b = null;
|
|
241
240
|
Ruby runtime = context.runtime;
|
|
242
|
-
if (other instanceof Vec2) {
|
|
243
|
-
b =
|
|
241
|
+
if (other instanceof Vec2 vec) {
|
|
242
|
+
b = vec.toJava(Vec2.class);
|
|
244
243
|
} else {
|
|
245
244
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
246
245
|
}
|
|
@@ -258,8 +257,8 @@ public class Vec2 extends RubyObject {
|
|
|
258
257
|
public IRubyObject dot(ThreadContext context, IRubyObject other) {
|
|
259
258
|
Vec2 b = null;
|
|
260
259
|
Ruby runtime = context.runtime;
|
|
261
|
-
if (other instanceof Vec2) {
|
|
262
|
-
b =
|
|
260
|
+
if (other instanceof Vec2 vec) {
|
|
261
|
+
b = vec.toJava(Vec2.class);
|
|
263
262
|
} else {
|
|
264
263
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
265
264
|
}
|
|
@@ -277,8 +276,8 @@ public class Vec2 extends RubyObject {
|
|
|
277
276
|
public IRubyObject op_plus(ThreadContext context, IRubyObject other) {
|
|
278
277
|
Vec2 b = null;
|
|
279
278
|
Ruby runtime = context.runtime;
|
|
280
|
-
if (other instanceof Vec2) {
|
|
281
|
-
b =
|
|
279
|
+
if (other instanceof Vec2 vec) {
|
|
280
|
+
b = vec.toJava(Vec2.class);
|
|
282
281
|
} else {
|
|
283
282
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
284
283
|
}
|
|
@@ -298,8 +297,8 @@ public class Vec2 extends RubyObject {
|
|
|
298
297
|
public IRubyObject op_minus(ThreadContext context, IRubyObject other) {
|
|
299
298
|
Vec2 b = null;
|
|
300
299
|
Ruby runtime = context.runtime;
|
|
301
|
-
if (other instanceof Vec2) {
|
|
302
|
-
b =
|
|
300
|
+
if (other instanceof Vec2 vec) {
|
|
301
|
+
b = vec.toJava(Vec2.class);
|
|
303
302
|
} else {
|
|
304
303
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
305
304
|
}
|
|
@@ -308,6 +307,38 @@ public class Vec2 extends RubyObject {
|
|
|
308
307
|
runtime.newFloat(jy - b.jy)});
|
|
309
308
|
}
|
|
310
309
|
|
|
310
|
+
/**
|
|
311
|
+
* Utility method
|
|
312
|
+
*
|
|
313
|
+
* @param obj
|
|
314
|
+
* @return scalar value of object or unity (preempts poss division by zero)
|
|
315
|
+
*/
|
|
316
|
+
private static double jscalar(IRubyObject obj) {
|
|
317
|
+
if (obj instanceof RubyFloat rubyFloat) {
|
|
318
|
+
return rubyFloat.getValue();
|
|
319
|
+
}
|
|
320
|
+
if (obj instanceof RubyFixnum rubyFixnum) {
|
|
321
|
+
return rubyFixnum.getDoubleValue();
|
|
322
|
+
}
|
|
323
|
+
return 1.0;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Utility method
|
|
328
|
+
*
|
|
329
|
+
* @param obj
|
|
330
|
+
* @return parse float value of object or zero
|
|
331
|
+
*/
|
|
332
|
+
private static double jvalue(IRubyObject obj) {
|
|
333
|
+
if (obj instanceof RubyFloat rubyFloat) {
|
|
334
|
+
return rubyFloat.getValue();
|
|
335
|
+
}
|
|
336
|
+
if (obj instanceof RubyFixnum rubyFixnum) {
|
|
337
|
+
return rubyFixnum.getDoubleValue();
|
|
338
|
+
}
|
|
339
|
+
return 0;
|
|
340
|
+
}
|
|
341
|
+
|
|
311
342
|
/**
|
|
312
343
|
*
|
|
313
344
|
* @param context ThreadContext
|
|
@@ -318,8 +349,7 @@ public class Vec2 extends RubyObject {
|
|
|
318
349
|
|
|
319
350
|
public IRubyObject op_mul(ThreadContext context, IRubyObject other) {
|
|
320
351
|
Ruby runtime = context.runtime;
|
|
321
|
-
double scalar = (other
|
|
322
|
-
? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
|
352
|
+
double scalar = jscalar(other);
|
|
323
353
|
return Vec2.rbNew(context, this.getMetaClass(),
|
|
324
354
|
new IRubyObject[]{runtime.newFloat(jx * scalar),
|
|
325
355
|
runtime.newFloat(jy * scalar)});
|
|
@@ -335,8 +365,7 @@ public class Vec2 extends RubyObject {
|
|
|
335
365
|
|
|
336
366
|
public IRubyObject op_div(ThreadContext context, IRubyObject other) {
|
|
337
367
|
Ruby runtime = context.runtime;
|
|
338
|
-
double scalar = (other
|
|
339
|
-
? ((RubyFloat) other).getValue() : ((RubyFixnum) other).getDoubleValue();
|
|
368
|
+
double scalar = jscalar(other);
|
|
340
369
|
if (Math.abs(scalar) < Vec2.EPSILON) {
|
|
341
370
|
return this;
|
|
342
371
|
}
|
|
@@ -400,10 +429,8 @@ public class Vec2 extends RubyObject {
|
|
|
400
429
|
|
|
401
430
|
public IRubyObject set_mag(ThreadContext context, IRubyObject scalar, Block block) {
|
|
402
431
|
double new_mag = scalar.toJava(Double.class);
|
|
403
|
-
if (block.isGiven()) {
|
|
404
|
-
|
|
405
|
-
return this;
|
|
406
|
-
}
|
|
432
|
+
if (block.isGiven() && !block.yield(context, scalar).toJava(Boolean.class)) {
|
|
433
|
+
return this;
|
|
407
434
|
}
|
|
408
435
|
double current = 0;
|
|
409
436
|
if (Math.abs(jx) > EPSILON && Math.abs(jy) > EPSILON) {
|
|
@@ -489,8 +516,7 @@ public class Vec2 extends RubyObject {
|
|
|
489
516
|
@JRubyMethod(name = "from_angle", meta = true)
|
|
490
517
|
public static IRubyObject from_angle(ThreadContext context, IRubyObject klazz, IRubyObject scalar) {
|
|
491
518
|
Ruby runtime = context.runtime;
|
|
492
|
-
double angle = (scalar
|
|
493
|
-
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
|
519
|
+
double angle = jvalue(scalar);
|
|
494
520
|
return Vec2.rbNew(context, klazz, new IRubyObject[]{
|
|
495
521
|
runtime.newFloat(Math.cos(angle)),
|
|
496
522
|
runtime.newFloat(Math.sin(angle))});
|
|
@@ -520,10 +546,9 @@ public class Vec2 extends RubyObject {
|
|
|
520
546
|
*/
|
|
521
547
|
@JRubyMethod(name = "rotate!")
|
|
522
548
|
public IRubyObject rotate_bang(ThreadContext context, IRubyObject scalar) {
|
|
523
|
-
double theta = (scalar
|
|
524
|
-
|
|
525
|
-
double
|
|
526
|
-
double y = (jx * Math.sin(theta) + jy * Math.cos(theta));
|
|
549
|
+
double theta = jvalue(scalar);
|
|
550
|
+
double x = jx * Math.cos(theta) - jy * Math.sin(theta);
|
|
551
|
+
double y = jx * Math.sin(theta) + jy * Math.cos(theta);
|
|
527
552
|
jx = x;
|
|
528
553
|
jy = y;
|
|
529
554
|
return this;
|
|
@@ -538,8 +563,7 @@ public class Vec2 extends RubyObject {
|
|
|
538
563
|
@JRubyMethod(name = "rotate")
|
|
539
564
|
public IRubyObject rotate(ThreadContext context, IRubyObject scalar) {
|
|
540
565
|
Ruby runtime = context.runtime;
|
|
541
|
-
double theta = (scalar
|
|
542
|
-
? ((RubyFloat) scalar).getValue() : ((RubyFixnum) scalar).getDoubleValue();
|
|
566
|
+
double theta = jvalue(scalar);
|
|
543
567
|
IRubyObject[] ary = new IRubyObject[]{
|
|
544
568
|
runtime.newFloat(jx * Math.cos(theta) - jy * Math.sin(theta)),
|
|
545
569
|
runtime.newFloat(jx * Math.sin(theta) + jy * Math.cos(theta))};
|
|
@@ -559,9 +583,8 @@ public class Vec2 extends RubyObject {
|
|
|
559
583
|
throw runtime.newSyntaxError("Check syntax");
|
|
560
584
|
}
|
|
561
585
|
Vec2 vec = (Vec2) args[0].toJava(Vec2.class);
|
|
562
|
-
double scalar = (args[1]
|
|
563
|
-
|
|
564
|
-
assert (scalar >= 0 && scalar < 1.0) :
|
|
586
|
+
double scalar = jvalue(args[1]);
|
|
587
|
+
assert scalar >= 0 && scalar < 1.0 :
|
|
565
588
|
"Lerp value " + scalar + " out of range 0..1.0";
|
|
566
589
|
return Vec2.rbNew(context, this.getMetaClass(), new IRubyObject[]{
|
|
567
590
|
runtime.newFloat(jx + (vec.jx - jx) * scalar),
|
|
@@ -581,9 +604,8 @@ public class Vec2 extends RubyObject {
|
|
|
581
604
|
throw runtime.newSyntaxError("Check syntax");
|
|
582
605
|
}
|
|
583
606
|
Vec2 vec = (Vec2) args[0].toJava(Vec2.class);
|
|
584
|
-
double scalar = (args[1]
|
|
585
|
-
|
|
586
|
-
assert (scalar >= 0 && scalar < 1.0) :
|
|
607
|
+
double scalar = jvalue(args[1]);
|
|
608
|
+
assert scalar >= 0 && scalar < 1.0 :
|
|
587
609
|
"Lerp value " + scalar + " out of range 0..1.0";
|
|
588
610
|
jx += (vec.jx - jx) * scalar;
|
|
589
611
|
jy += (vec.jy - jy) * scalar;
|
|
@@ -601,8 +623,8 @@ public class Vec2 extends RubyObject {
|
|
|
601
623
|
public IRubyObject angleBetween(ThreadContext context, IRubyObject other) {
|
|
602
624
|
Vec2 vec = null;
|
|
603
625
|
Ruby runtime = context.runtime;
|
|
604
|
-
if (other instanceof Vec2) {
|
|
605
|
-
vec =
|
|
626
|
+
if (other instanceof Vec2 vector) {
|
|
627
|
+
vec = vector.toJava(Vec2.class);
|
|
606
628
|
} else {
|
|
607
629
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
608
630
|
}
|
|
@@ -620,8 +642,8 @@ public class Vec2 extends RubyObject {
|
|
|
620
642
|
public IRubyObject fastAngleBetween(ThreadContext context, IRubyObject other) {
|
|
621
643
|
Vec2 vec = null;
|
|
622
644
|
Ruby runtime = context.runtime;
|
|
623
|
-
if (other instanceof Vec2) {
|
|
624
|
-
vec =
|
|
645
|
+
if (other instanceof Vec2 vector) {
|
|
646
|
+
vec = vector.toJava(Vec2.class);
|
|
625
647
|
} else {
|
|
626
648
|
throw runtime.newTypeError("argument should be Vec2D");
|
|
627
649
|
}
|
|
@@ -742,12 +764,10 @@ public class Vec2 extends RubyObject {
|
|
|
742
764
|
if (obj == this) {
|
|
743
765
|
return true;
|
|
744
766
|
}
|
|
745
|
-
if (obj instanceof Vec2) {
|
|
746
|
-
final Vec2 other =
|
|
747
|
-
|
|
748
|
-
&&
|
|
749
|
-
return true;
|
|
750
|
-
}
|
|
767
|
+
if (obj instanceof Vec2 vec2) {
|
|
768
|
+
final Vec2 other = vec2;
|
|
769
|
+
return Double.compare(jx, (Double) other.jx) == 0
|
|
770
|
+
&& Double.compare(jy, (Double) other.jy) == 0;
|
|
751
771
|
}
|
|
752
772
|
return false;
|
|
753
773
|
}
|
|
@@ -764,10 +784,10 @@ public class Vec2 extends RubyObject {
|
|
|
764
784
|
if (other == this) {
|
|
765
785
|
return runtime.newBoolean(true);
|
|
766
786
|
}
|
|
767
|
-
if (other instanceof Vec2) {
|
|
768
|
-
Vec2 v =
|
|
769
|
-
if (
|
|
770
|
-
&&
|
|
787
|
+
if (other instanceof Vec2 vector) {
|
|
788
|
+
Vec2 v = vector.toJava(Vec2.class);
|
|
789
|
+
if (Double.compare(jx, (Double) v.jx) == 0
|
|
790
|
+
&& Double.compare(jy, (Double) v.jy) == 0) {
|
|
771
791
|
return runtime.newBoolean(true);
|
|
772
792
|
}
|
|
773
793
|
}
|
|
@@ -788,8 +808,8 @@ public class Vec2 extends RubyObject {
|
|
|
788
808
|
if (other == this) {
|
|
789
809
|
return runtime.newBoolean(true);
|
|
790
810
|
}
|
|
791
|
-
if (other instanceof Vec2) {
|
|
792
|
-
Vec2 v =
|
|
811
|
+
if (other instanceof Vec2 vector) {
|
|
812
|
+
Vec2 v = vector.toJava(Vec2.class);
|
|
793
813
|
double diff = jx - v.jx;
|
|
794
814
|
if ((diff < 0 ? -diff : diff) > Vec2.EPSILON) {
|
|
795
815
|
return runtime.newBoolean(false);
|