@@ -738,6 +738,204 @@ void QuickJSBuiltinBinder::bind_builtin_propties_manually() {
738
738
2 );
739
739
}
740
740
741
+ { // Transform2D
742
+ binder->get_builtin_binder ().register_method (
743
+ Variant::TRANSFORM2D,
744
+ " xform" ,
745
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
746
+ ERR_FAIL_COND_V (argc < 1 , (JS_ThrowTypeError (ctx, " Argument expected for Transform2D.xform" )));
747
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
748
+ Transform2D *ptr = bind->getTransform2D ();
749
+ if (QuickJSBinder::validate_type (ctx, Variant::VECTOR2, argv[0 ])) {
750
+ Vector2 ret = ptr->xform (Vector2 (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
751
+ return QuickJSBinder::variant_to_var (ctx, ret);
752
+ } else if (QuickJSBinder::validate_type (ctx, Variant::RECT2, argv[0 ])) {
753
+ Rect2 ret = ptr->xform (Rect2 (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
754
+ return QuickJSBinder::variant_to_var (ctx, ret);
755
+ } else if (QuickJSBinder::validate_type (ctx, Variant::POOL_VECTOR2_ARRAY, argv[0 ])) {
756
+ PoolVector2Array ret = ptr->xform (PoolVector2Array (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
757
+ return QuickJSBinder::variant_to_var (ctx, ret);
758
+ }
759
+ ERR_FAIL_V (JS_ThrowTypeError (ctx, " Vector2, Rect2 or PoolVector2Array expected for argument #0 of Transform2D.xform" ));
760
+ },
761
+ 1 );
762
+ binder->get_builtin_binder ().register_method (
763
+ Variant::TRANSFORM2D,
764
+ " xform_inv" ,
765
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
766
+ ERR_FAIL_COND_V (argc < 1 , (JS_ThrowTypeError (ctx, " Argument expected for Transform2D.xform_inv" )));
767
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
768
+ Transform2D *ptr = bind->getTransform2D ();
769
+ if (QuickJSBinder::validate_type (ctx, Variant::VECTOR2, argv[0 ])) {
770
+ Vector2 ret = ptr->xform_inv (Vector2 (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
771
+ return QuickJSBinder::variant_to_var (ctx, ret);
772
+ } else if (QuickJSBinder::validate_type (ctx, Variant::RECT2, argv[0 ])) {
773
+ Rect2 ret = ptr->xform_inv (Rect2 (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
774
+ return QuickJSBinder::variant_to_var (ctx, ret);
775
+ } else if (QuickJSBinder::validate_type (ctx, Variant::POOL_VECTOR2_ARRAY, argv[0 ])) {
776
+ PoolVector2Array ret = ptr->xform_inv (PoolVector2Array (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
777
+ return QuickJSBinder::variant_to_var (ctx, ret);
778
+ }
779
+ ERR_FAIL_V (JS_ThrowTypeError (ctx, " Vector2, Rect2 or PoolVector2Array expected for argument #0 of Transform2D.xform_inv" ));
780
+ },
781
+ 1 );
782
+ }
783
+
784
+ { // Basis
785
+ binder->get_builtin_binder ().register_method (
786
+ Variant::BASIS,
787
+ " is_equal_approx" ,
788
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
789
+ ERR_FAIL_COND_V (argc < 1 , (JS_ThrowTypeError (ctx, " Argument expected for Basis.is_equal_approx" )));
790
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
791
+ Basis *ptr = bind->getBasis ();
792
+ #ifdef DEBUG_METHODS_ENABLED
793
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::BASIS, argv[0 ]), (JS_ThrowTypeError (ctx, " Basis expected for Basis.is_equal_approx" )));
794
+ #endif
795
+ ECMAScriptGCHandler *argv_bind = BINDING_DATA_FROM_JS (ctx, argv[0 ]);
796
+ bool ret = ptr->is_equal_approx (*argv_bind->getBasis ());
797
+ return QuickJSBinder::to_js_bool (ctx, ret);
798
+ },
799
+ 1 );
800
+ }
801
+
802
+ { // AABB
803
+ JSCFunctionMagic *getter = [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic) -> JSValue {
804
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
805
+ const AABB *ptr = bind->getAABB ();
806
+ switch (magic) {
807
+ case 0 :
808
+ return QuickJSBinder::variant_to_var (ctx, ptr->size + ptr->position );
809
+ }
810
+ return JS_UNDEFINED;
811
+ };
812
+ JSCFunctionMagic *setter = [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic) -> JSValue {
813
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
814
+ AABB *ptr = bind->getAABB ();
815
+ switch (magic) {
816
+ case 0 :
817
+ #ifdef DEBUG_METHODS_ENABLED
818
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[0 ]), (JS_ThrowTypeError (ctx, " Vector3 expected for AABB.end" )));
819
+ #endif
820
+ ptr->size = Vector3 (QuickJSBinder::var_to_variant (ctx, argv[0 ])) - ptr->position ;
821
+ break ;
822
+ }
823
+ return JS_DupValue (ctx, argv[0 ]);
824
+ };
825
+ binder->get_builtin_binder ().register_property (Variant::AABB, " end" , getter, setter, 0 );
826
+ }
827
+
828
+ { // Plane
829
+ binder->get_builtin_binder ().register_method (
830
+ Variant::PLANE,
831
+ " intersect_3" ,
832
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
833
+ ERR_FAIL_COND_V (argc < 2 , (JS_ThrowTypeError (ctx, " Two arguments expected for Plane.intersect_3" )));
834
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
835
+ Plane *ptr = bind->getPlane ();
836
+ #ifdef DEBUG_METHODS_ENABLED
837
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::PLANE, argv[0 ]), (JS_ThrowTypeError (ctx, " Plane expected for arguments #0 Plane.intersect_3" )));
838
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::PLANE, argv[1 ]), (JS_ThrowTypeError (ctx, " Plane expected for arguments #1 Plane.intersect_3" )));
839
+ #endif
840
+ Vector3 ret;
841
+ ECMAScriptGCHandler *argv0_bind = BINDING_DATA_FROM_JS (ctx, argv[0 ]);
842
+ ECMAScriptGCHandler *argv1_bind = BINDING_DATA_FROM_JS (ctx, argv[1 ]);
843
+ if (ptr->intersect_3 (*argv0_bind->getPlane (), *argv1_bind->getPlane (), &ret)) {
844
+ return QuickJSBinder::variant_to_var (ctx, ret);
845
+ }
846
+ return JS_NULL;
847
+ },
848
+ 2 );
849
+ binder->get_builtin_binder ().register_method (
850
+ Variant::PLANE,
851
+ " intersects_ray" ,
852
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
853
+ ERR_FAIL_COND_V (argc < 2 , (JS_ThrowTypeError (ctx, " Two arguments expected for Plane.intersects_ray" )));
854
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
855
+ Plane *ptr = bind->getPlane ();
856
+ #ifdef DEBUG_METHODS_ENABLED
857
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[0 ]), (JS_ThrowTypeError (ctx, " Vector3 expected for arguments #0 Plane.intersects_ray" )));
858
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[1 ]), (JS_ThrowTypeError (ctx, " Vector3 expected for arguments #1 Plane.intersects_ray" )));
859
+ #endif
860
+ Vector3 ret;
861
+ ECMAScriptGCHandler *argv0_bind = BINDING_DATA_FROM_JS (ctx, argv[0 ]);
862
+ ECMAScriptGCHandler *argv1_bind = BINDING_DATA_FROM_JS (ctx, argv[1 ]);
863
+ if (ptr->intersects_ray (*argv0_bind->getVector3 (), *argv1_bind->getVector3 (), &ret)) {
864
+ return QuickJSBinder::variant_to_var (ctx, ret);
865
+ }
866
+ return JS_NULL;
867
+ },
868
+ 2 );
869
+ binder->get_builtin_binder ().register_method (
870
+ Variant::PLANE,
871
+ " intersects_segment" ,
872
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
873
+ ERR_FAIL_COND_V (argc < 2 , (JS_ThrowTypeError (ctx, " Two arguments expected for Plane.intersects_segment" )));
874
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
875
+ Plane *ptr = bind->getPlane ();
876
+ #ifdef DEBUG_METHODS_ENABLED
877
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[0 ]), (JS_ThrowTypeError (ctx, " Vector3 expected for arguments #0 Plane.intersects_segment" )));
878
+ ERR_FAIL_COND_V (!QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[1 ]), (JS_ThrowTypeError (ctx, " Vector3 expected for arguments #1 Plane.intersects_segment" )));
879
+ #endif
880
+ Vector3 ret;
881
+ ECMAScriptGCHandler *argv0_bind = BINDING_DATA_FROM_JS (ctx, argv[0 ]);
882
+ ECMAScriptGCHandler *argv1_bind = BINDING_DATA_FROM_JS (ctx, argv[1 ]);
883
+ if (ptr->intersects_segment (*argv0_bind->getVector3 (), *argv1_bind->getVector3 (), &ret)) {
884
+ return QuickJSBinder::variant_to_var (ctx, ret);
885
+ }
886
+ return JS_NULL;
887
+ },
888
+ 2 );
889
+ }
890
+ { // Transform
891
+ binder->get_builtin_binder ().register_method (
892
+ Variant::TRANSFORM,
893
+ " xform" ,
894
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
895
+ ERR_FAIL_COND_V (argc < 1 , (JS_ThrowTypeError (ctx, " Argument expected for Transform.xform" )));
896
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
897
+ Transform *ptr = bind->getTransform ();
898
+ if (QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[0 ])) {
899
+ Vector3 ret = ptr->xform (Vector3 (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
900
+ return QuickJSBinder::variant_to_var (ctx, ret);
901
+ } else if (QuickJSBinder::validate_type (ctx, Variant::PLANE, argv[0 ])) {
902
+ Plane ret = ptr->xform (Plane (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
903
+ return QuickJSBinder::variant_to_var (ctx, ret);
904
+ } else if (QuickJSBinder::validate_type (ctx, Variant::AABB, argv[0 ])) {
905
+ AABB ret = ptr->xform (AABB (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
906
+ return QuickJSBinder::variant_to_var (ctx, ret);
907
+ } else if (QuickJSBinder::validate_type (ctx, Variant::POOL_VECTOR3_ARRAY, argv[0 ])) {
908
+ PoolVector3Array ret = ptr->xform (PoolVector3Array (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
909
+ return QuickJSBinder::variant_to_var (ctx, ret);
910
+ }
911
+ ERR_FAIL_V (JS_ThrowTypeError (ctx, " Vector3, Plane, AABB or PoolVector3Array expected for argument #0 of Transform.xform" ));
912
+ },
913
+ 1 );
914
+ binder->get_builtin_binder ().register_method (
915
+ Variant::TRANSFORM,
916
+ " xform_inv" ,
917
+ [](JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) {
918
+ ERR_FAIL_COND_V (argc < 1 , (JS_ThrowTypeError (ctx, " Argument expected for Transform.xform_inv" )));
919
+ ECMAScriptGCHandler *bind = BINDING_DATA_FROM_JS (ctx, this_val);
920
+ Transform *ptr = bind->getTransform ();
921
+ if (QuickJSBinder::validate_type (ctx, Variant::VECTOR3, argv[0 ])) {
922
+ Vector3 ret = ptr->xform_inv (Vector3 (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
923
+ return QuickJSBinder::variant_to_var (ctx, ret);
924
+ } else if (QuickJSBinder::validate_type (ctx, Variant::PLANE, argv[0 ])) {
925
+ Plane ret = ptr->xform_inv (Plane (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
926
+ return QuickJSBinder::variant_to_var (ctx, ret);
927
+ } else if (QuickJSBinder::validate_type (ctx, Variant::AABB, argv[0 ])) {
928
+ AABB ret = ptr->xform_inv (AABB (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
929
+ return QuickJSBinder::variant_to_var (ctx, ret);
930
+ } else if (QuickJSBinder::validate_type (ctx, Variant::POOL_VECTOR3_ARRAY, argv[0 ])) {
931
+ PoolVector3Array ret = ptr->xform_inv (PoolVector3Array (QuickJSBinder::var_to_variant (ctx, argv[0 ])));
932
+ return QuickJSBinder::variant_to_var (ctx, ret);
933
+ }
934
+ ERR_FAIL_V (JS_ThrowTypeError (ctx, " Vector3, Plane, AABB or PoolVector3Array expected for argument #0 of Transform.xform_inv" ));
935
+ },
936
+ 1 );
937
+ }
938
+
741
939
{ // PoolByteArray
742
940
// PoolByteArray.prototype.compress
743
941
binder->get_builtin_binder ().register_method (
0 commit comments