#include "ply-utils.h"
#include "script.h"
#include "script-object.h"
+#include "script-parse.h"
#include "script-execute.h"
#include "script-lib-image.h"
#include <assert.h>
+static script_return image_rotate (script_state* state, void* user_data)
+{
+ script_lib_image_data_t* data = user_data;
+ script_obj* script_obj_image = script_obj_hash_get_element (state->local, "image");
+ script_obj* script_obj_angle = script_obj_hash_get_element (state->local, "angle");
+ script_obj_deref(&script_obj_image);
+ script_obj* reply;
+ if (script_obj_image->type == SCRIPT_OBJ_TYPE_NATIVE &&
+ script_obj_image->data.native.class == data->class){
+ ply_image_t *image = script_obj_image->data.native.object_data;
+ ply_image_t *new_image = ply_image_rotate (image, ply_image_get_width (image)/2, ply_image_get_height (image)/2, script_obj_as_float (script_obj_angle));
+ reply = script_obj_new_native (new_image, data->class);
+ }
+ else
+ reply = script_obj_new_null ();
+ script_obj_unref(script_obj_image);
+ script_obj_unref(script_obj_angle);
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+}
+
+
+
script_lib_image_data_t* script_lib_image_setup(script_state *state, char* image_dir)
{
data->image_dir = strdup(image_dir);
script_add_native_function (state->global, "ImageNew", image_new, data, "filename", NULL);
+ script_add_native_function (state->global, "ImageRotate", image_rotate, data, "image", "angle", NULL);
script_add_native_function (state->global, "ImageGetWidth", image_get_width, data, "image", NULL);
script_add_native_function (state->global, "ImageGetHeight", image_get_height, data, "image", NULL);
SpriteSetX(sprite.native, sprite.x);
SpriteSetY(sprite.native, sprite.y);
SpriteSetZ(sprite.native, sprite.z);
+ SpriteSetImage(sprite.native, sprite.image);
}
return false;
}
+float script_obj_as_float (script_obj* obj)
+{ // If in then reply contents, otherwise reply 0
+ obj = script_obj_deref_direct(obj);
+ switch (obj->type){
+ case SCRIPT_OBJ_TYPE_INT:
+ return (float) obj->data.integer;
+ case SCRIPT_OBJ_TYPE_FLOAT:
+ return obj->data.floatpoint;
+ case SCRIPT_OBJ_TYPE_NULL:
+ return 0;
+ case SCRIPT_OBJ_TYPE_REF: // should have been de-reffed already
+ assert(0);
+ case SCRIPT_OBJ_TYPE_HASH:
+ case SCRIPT_OBJ_TYPE_FUNCTION:
+ case SCRIPT_OBJ_TYPE_NATIVE:
+ return 0;
+ case SCRIPT_OBJ_TYPE_STRING:
+ return 0;
+ }
+
+ assert(0); // Abort on uncaught
+ return false;
+}
+
bool script_obj_as_bool (script_obj* obj)
{ // False objects are NULL, 0, ""
obj = script_obj_deref_direct(obj);
script_obj* script_obj_new_ref (script_obj* sub_obj);
script_obj* script_obj_new_native (void* object_data, script_obj_native_class* class);
int script_obj_as_int (script_obj* obj);
+float script_obj_as_float (script_obj* obj);
bool script_obj_as_bool (script_obj* obj);
char* script_obj_as_string (script_obj* obj);
void script_obj_assign (script_obj* obj_a, script_obj* obj_b);
mystring = index;
if (index<10) mystring = "0" + index;
sprites[index] = SpriteNewWithImage("../spinfinity/throbber-" + mystring + ".png");
+ sprites[index].orig_image = sprites[index].image;
sprites[index].xd = 1 + index;
sprites[index].yd = 1 + index;
index = index + 1;
}
random = 1;
+count = 0;
fun update_logo_sprite (sprite){
image_width = ImageGetWidth (sprite.image);
sprite.x = sprite.x + sprite.xd;
sprite.y = sprite.y + sprite.yd;
-
+ sprite.image = ImageRotate(sprite.orig_image, count*0.1);
SpriteUpdate(sprite);
}
fun refresh (){
index = 0;
+ count++;
while (!(index>=30)){
update_logo_sprite (sprites[index]);
index++;