|
@@ -452,18 +452,7 @@ void js_push_variantmap(duk_context* ctx, const VariantMap &vmap)
|
|
|
|
|
|
|
|
void js_push_variant(duk_context *ctx, const Variant& v)
|
|
void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
{
|
|
{
|
|
|
- VariantType type = v.GetType();
|
|
|
|
|
- RefCounted* ref;
|
|
|
|
|
- Vector2 vector2 = Vector2::ZERO;
|
|
|
|
|
- IntVector2 intVector2 = IntVector2::ZERO;
|
|
|
|
|
- Vector3 vector3 = Vector3::ZERO;
|
|
|
|
|
- Vector4 vector4 = Vector4::ZERO;
|
|
|
|
|
- Color color = Color::BLACK;
|
|
|
|
|
- Resource* resource = NULL;
|
|
|
|
|
- ResourceCache* cache = NULL;
|
|
|
|
|
- ResourceRef resourceRef;
|
|
|
|
|
-
|
|
|
|
|
- switch (type)
|
|
|
|
|
|
|
+ switch (v.GetType())
|
|
|
{
|
|
{
|
|
|
case VAR_NONE:
|
|
case VAR_NONE:
|
|
|
duk_push_undefined(ctx);
|
|
duk_push_undefined(ctx);
|
|
@@ -472,9 +461,10 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
case VAR_VOIDPTR:
|
|
case VAR_VOIDPTR:
|
|
|
duk_push_null(ctx);
|
|
duk_push_null(ctx);
|
|
|
break;
|
|
break;
|
|
|
- case VAR_PTR:
|
|
|
|
|
|
|
|
|
|
- ref = v.GetPtr();
|
|
|
|
|
|
|
+ case VAR_PTR:
|
|
|
|
|
+ {
|
|
|
|
|
+ RefCounted* ref = v.GetPtr();
|
|
|
|
|
|
|
|
// if we're null or don't have any refs, return null
|
|
// if we're null or don't have any refs, return null
|
|
|
if (!ref || !ref->Refs())
|
|
if (!ref || !ref->Refs())
|
|
@@ -485,7 +475,7 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
|
|
|
|
|
// check that class is supported
|
|
// check that class is supported
|
|
|
duk_push_heap_stash(ctx);
|
|
duk_push_heap_stash(ctx);
|
|
|
- duk_push_pointer(ctx, (void*) ref->GetClassID());
|
|
|
|
|
|
|
+ duk_push_pointer(ctx, (void*)ref->GetClassID());
|
|
|
duk_get_prop(ctx, -2);
|
|
duk_get_prop(ctx, -2);
|
|
|
|
|
|
|
|
if (!duk_is_object(ctx, -1))
|
|
if (!duk_is_object(ctx, -1))
|
|
@@ -499,54 +489,67 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
js_push_class_object_instance(ctx, ref);
|
|
js_push_class_object_instance(ctx, ref);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
|
|
|
case VAR_RESOURCEREF:
|
|
case VAR_RESOURCEREF:
|
|
|
- resourceRef = v.GetResourceRef();
|
|
|
|
|
- cache = JSVM::GetJSVM(ctx)->GetContext()->GetSubsystem<ResourceCache>();
|
|
|
|
|
- resource = cache->GetResource(resourceRef.type_, resourceRef.name_);
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const ResourceRef& resourceRef(v.GetResourceRef());
|
|
|
|
|
+ ResourceCache* cache = JSVM::GetJSVM(ctx)->GetContext()->GetSubsystem<ResourceCache>();
|
|
|
|
|
+ Resource* resource = cache->GetResource(resourceRef.type_, resourceRef.name_);
|
|
|
js_push_class_object_instance(ctx, resource);
|
|
js_push_class_object_instance(ctx, resource);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
|
|
|
case VAR_BOOL:
|
|
case VAR_BOOL:
|
|
|
duk_push_boolean(ctx, v.GetBool() ? 1 : 0);
|
|
duk_push_boolean(ctx, v.GetBool() ? 1 : 0);
|
|
|
break;
|
|
break;
|
|
|
|
|
+
|
|
|
case VAR_INT:
|
|
case VAR_INT:
|
|
|
duk_push_number(ctx, v.GetInt());
|
|
duk_push_number(ctx, v.GetInt());
|
|
|
break;
|
|
break;
|
|
|
|
|
+
|
|
|
case VAR_FLOAT:
|
|
case VAR_FLOAT:
|
|
|
duk_push_number(ctx, v.GetFloat());
|
|
duk_push_number(ctx, v.GetFloat());
|
|
|
break;
|
|
break;
|
|
|
|
|
+
|
|
|
case VAR_STRING:
|
|
case VAR_STRING:
|
|
|
- duk_push_string(ctx, v.GetString().CString());
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const String& string(v.GetString());
|
|
|
|
|
+ duk_push_lstring(ctx, string.CString(), string.Length());
|
|
|
|
|
+ } break;
|
|
|
|
|
+
|
|
|
case VAR_BUFFER:
|
|
case VAR_BUFFER:
|
|
|
{
|
|
{
|
|
|
const PODVector<unsigned char>& buffer(v.GetBuffer()); // The braces are to scope this reference.
|
|
const PODVector<unsigned char>& buffer(v.GetBuffer()); // The braces are to scope this reference.
|
|
|
duk_push_fixed_buffer(ctx, buffer.Size());
|
|
duk_push_fixed_buffer(ctx, buffer.Size());
|
|
|
duk_push_buffer_object(ctx, -1, 0, buffer.Size(), DUK_BUFOBJ_UINT8ARRAY);
|
|
duk_push_buffer_object(ctx, -1, 0, buffer.Size(), DUK_BUFOBJ_UINT8ARRAY);
|
|
|
duk_replace(ctx, -2);
|
|
duk_replace(ctx, -2);
|
|
|
- unsigned char* data((unsigned char*)duk_require_buffer_data(ctx, -1, (duk_size_t*)nullptr));
|
|
|
|
|
|
|
+ unsigned char* data = (unsigned char*)duk_require_buffer_data(ctx, -1, (duk_size_t*)nullptr);
|
|
|
memcpy(data, buffer.Buffer(), buffer.Size());
|
|
memcpy(data, buffer.Buffer(), buffer.Size());
|
|
|
} break;
|
|
} break;
|
|
|
|
|
+
|
|
|
case VAR_VECTOR2:
|
|
case VAR_VECTOR2:
|
|
|
- vector2 = v.GetVector2();
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const Vector2& vector2(v.GetVector2());
|
|
|
duk_push_array(ctx);
|
|
duk_push_array(ctx);
|
|
|
duk_push_number(ctx, vector2.x_);
|
|
duk_push_number(ctx, vector2.x_);
|
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
|
duk_push_number(ctx, vector2.y_);
|
|
duk_push_number(ctx, vector2.y_);
|
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
+
|
|
|
case VAR_INTVECTOR2:
|
|
case VAR_INTVECTOR2:
|
|
|
- intVector2 = v.GetIntVector2();
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const IntVector2& intVector2(v.GetIntVector2());
|
|
|
duk_push_array(ctx);
|
|
duk_push_array(ctx);
|
|
|
duk_push_number(ctx, intVector2.x_);
|
|
duk_push_number(ctx, intVector2.x_);
|
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
|
duk_push_number(ctx, intVector2.y_);
|
|
duk_push_number(ctx, intVector2.y_);
|
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
+
|
|
|
case VAR_VECTOR3:
|
|
case VAR_VECTOR3:
|
|
|
- vector3 = v.GetVector3();
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const Vector3& vector3(v.GetVector3());
|
|
|
duk_push_array(ctx);
|
|
duk_push_array(ctx);
|
|
|
duk_push_number(ctx, vector3.x_);
|
|
duk_push_number(ctx, vector3.x_);
|
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
@@ -554,9 +557,11 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
|
duk_push_number(ctx, vector3.z_);
|
|
duk_push_number(ctx, vector3.z_);
|
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
+
|
|
|
case VAR_QUATERNION:
|
|
case VAR_QUATERNION:
|
|
|
- vector3 = v.GetQuaternion().EulerAngles();
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const Vector3& vector3(v.GetQuaternion().EulerAngles());
|
|
|
duk_push_array(ctx);
|
|
duk_push_array(ctx);
|
|
|
duk_push_number(ctx, vector3.x_);
|
|
duk_push_number(ctx, vector3.x_);
|
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
@@ -564,9 +569,11 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
duk_put_prop_index(ctx, -2, 1);
|
|
|
duk_push_number(ctx, vector3.z_);
|
|
duk_push_number(ctx, vector3.z_);
|
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
+
|
|
|
case VAR_COLOR:
|
|
case VAR_COLOR:
|
|
|
- color = v.GetColor();
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const Color& color(v.GetColor());
|
|
|
duk_push_array(ctx);
|
|
duk_push_array(ctx);
|
|
|
duk_push_number(ctx, color.r_);
|
|
duk_push_number(ctx, color.r_);
|
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
@@ -576,9 +583,11 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
|
duk_push_number(ctx, color.a_);
|
|
duk_push_number(ctx, color.a_);
|
|
|
duk_put_prop_index(ctx, -2, 3);
|
|
duk_put_prop_index(ctx, -2, 3);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
+
|
|
|
case VAR_VECTOR4:
|
|
case VAR_VECTOR4:
|
|
|
- vector4 = v.GetVector4();
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ const Vector4& vector4(v.GetVector4());
|
|
|
duk_push_array(ctx);
|
|
duk_push_array(ctx);
|
|
|
duk_push_number(ctx, vector4.x_);
|
|
duk_push_number(ctx, vector4.x_);
|
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
duk_put_prop_index(ctx, -2, 0);
|
|
@@ -588,7 +597,7 @@ void js_push_variant(duk_context *ctx, const Variant& v)
|
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
duk_put_prop_index(ctx, -2, 2);
|
|
|
duk_push_number(ctx, vector4.w_);
|
|
duk_push_number(ctx, vector4.w_);
|
|
|
duk_put_prop_index(ctx, -2, 3);
|
|
duk_put_prop_index(ctx, -2, 3);
|
|
|
- break;
|
|
|
|
|
|
|
+ } break;
|
|
|
|
|
|
|
|
default:
|
|
default:
|
|
|
duk_push_undefined(ctx);
|
|
duk_push_undefined(ctx);
|