Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/verse/dist/vs_node_object.c')
-rw-r--r--extern/verse/dist/vs_node_object.c837
1 files changed, 0 insertions, 837 deletions
diff --git a/extern/verse/dist/vs_node_object.c b/extern/verse/dist/vs_node_object.c
deleted file mode 100644
index d269a8ddb99..00000000000
--- a/extern/verse/dist/vs_node_object.c
+++ /dev/null
@@ -1,837 +0,0 @@
-/*
-**
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "v_cmd_gen.h"
-
-#if !defined V_GENERATE_FUNC_MODE
-
-#include "verse.h"
-#include "v_util.h"
-#include "vs_server.h"
-
-extern void verse_send_o_link_set(VNodeID node_id, uint16 link_id, VNodeID link, const char *name, uint32 target_id);
-extern void verse_send_o_link_destroy(VNodeID node_id, uint16 link_id);
-
-typedef struct {
- VNodeID link;
- char name[16];
- uint32 target_id;
- /* Animation parameters. */
- uint32 time_s;
- uint32 time_f;
- uint32 dimensions;
- real64 pos[4];
- real64 speed[4];
- real64 accel[4];
- real64 scale[4];
- real64 scale_speed[4];
-} VSLink;
-
-typedef struct {
- char name[16];
- uint8 param_count;
- VNOParamType *param_types;
- char *param_names;
-} VSMethod;
-
-typedef struct {
- char name[VN_O_METHOD_GROUP_NAME_SIZE];
- VSMethod *methods;
- unsigned int method_count;
- VSSubscriptionList *subscribers;
-} VSMethodGroup;
-
-typedef struct {
- real64 position[3];
- VNQuat64 rotation;
- real64 scale[3];
-/* VSSubscriptionList *subscribers;*/
-} VSTransform;
-
-typedef struct {
- VSNodeHead head;
- VSTransform transform;
- VSSubscriptionList *trans_sub64;
- VSSubscriptionList *trans_sub32;
- real64 light[3];
- VSMethodGroup *groups;
- uint16 group_count;
- VSLink *links;
- uint16 link_count;
- boolean hidden;
-} VSNodeObject;
-
-VSNodeObject * vs_o_create_node(unsigned int owner)
-{
- VSNodeObject *node;
- unsigned int i, j;
- char name[48];
- node = malloc(sizeof *node);
- vs_add_new_node(&node->head, V_NT_OBJECT);
- sprintf(name, "Object_Node_%u", node->head.id);
- create_node_head(&node->head, name, owner);
- node->trans_sub64 = vs_create_subscription_list();
- node->trans_sub32 = vs_create_subscription_list();
- node->transform.position[0] = node->transform.position[1] = node->transform.position[2] = 0;
- node->transform.rotation.x = node->transform.rotation.y = node->transform.rotation.z = 0.0;
- node->transform.rotation.w = 1.0;
- node->transform.scale[0] = node->transform.scale[1] = node->transform.scale[2] = 1.0;
- node->light[0] = node->light[1] = node->light[2] = V_REAL64_MAX;
- node->groups = malloc((sizeof *node->groups) * 16);
- node->group_count = 16;
- for(i = 0; i < 16; i++)
- {
- node->groups[i].name[0] = 0;
- node->groups[i].methods = NULL;
- node->groups[i].method_count = 0;
- node->groups[i].subscribers = NULL;
- }
-
- node->link_count = 16;
- node->links = malloc((sizeof *node->links) * node->link_count);
- for(i = 0; i < node->link_count; i++)
- {
- node->links[i].link = -1;
- node->links[i].name[0] = 0;
- node->links[i].target_id = -1;
- node->links[i].dimensions = 0;
- for(j = 0; j < 4; j++)
- {
- node->links[i].pos[j] = 0.0;
- node->links[i].speed[j] = 0.0;
- node->links[i].accel[j] = 0.0;
- node->links[i].scale[j] = 0.0;
- node->links[i].scale_speed[j] = 0.0;
- }
- }
- node->hidden = FALSE;
- return node;
-}
-
-void vs_o_destroy_node(VSNodeObject *node)
-{
- unsigned int i, j;
- destroy_node_head(&node->head);
- for(i = 0; i < node->group_count; i++)
- {
- if(node->groups[i].name[0] != 0)
- {
- for(j = 0; j < node->groups[i].method_count; j++)
- {
- if(node->groups[i].methods[j].name[0] != 0 && node->groups[i].methods[j].param_count != 0)
- {
- free(node->groups[i].methods[j].param_types);
- free(node->groups[i].methods[j].param_names);
- }
- }
- if(node->groups[i].methods != NULL)
- free(node->groups[i].methods);
- }
- }
- free(node->groups);
- free(node);
-}
-
-void vs_o_subscribe(VSNodeObject *node)
-{
- unsigned int i;
- for(i = 0; i < node->link_count; i++)
- {
- const VSLink *lnk = node->links + i;
-
- if(lnk->name[0] != 0)
- {
- verse_send_o_link_set(node->head.id, i, lnk->link, lnk->name, lnk->target_id);
- if(lnk->dimensions != 0)
- {
- verse_send_o_anim_run(node->head.id, i, lnk->time_s, lnk->time_f, lnk->dimensions,
- lnk->pos, lnk->speed, lnk->accel,
- lnk->scale, lnk->scale_speed);
- }
- }
- }
- if(node->light[0] != V_REAL64_MAX || node->light[1] != V_REAL64_MAX || node->light[2] != V_REAL64_MAX)
- verse_send_o_light_set(node->head.id, node->light[0], node->light[1], node->light[2]);
- for(i = 0; i < node->group_count; i++)
- {
- if(node->groups[i].name[0] != 0)
- verse_send_o_method_group_create(node->head.id, i, node->groups[i].name);
- }
- if(node->hidden)
- verse_send_o_hide(node->head.id, TRUE);
-}
-
-void vs_o_unsubscribe(VSNodeObject *node)
-{
- unsigned int i;
- for(i = 0; i < node->group_count; i++)
- if(node->groups[i].name[0] != 0)
- vs_remove_subscriptor(node->groups[i].subscribers);
- vs_remove_subscriptor(node->trans_sub64);
- vs_remove_subscriptor(node->trans_sub32);
-}
-
-static void callback_send_o_transform_pos_real32(void *user, VNodeID node_id, uint32 time_s, uint32 time_f, real32 *pos, real32 *speed, real32 *accelerate, real32 *drag_normal, real32 drag)
-{
- VSNodeObject *node;
- unsigned int i, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->transform.position[0] = pos[0];
- node->transform.position[1] = pos[1];
- node->transform.position[2] = pos[2];
-
- if((count = vs_get_subscript_count(node->trans_sub64)) > 0) /* Anyone listening at 64 bits? */
- {
- real64 spd[3], acc[3], drn[3], *pspd = NULL, *pacc = NULL, *pdrn = NULL;
-
- pspd = (speed != NULL) ? spd : NULL;
- pacc = (accelerate != NULL) ? acc : NULL;
- pdrn = (drag_normal != NULL) ? drn : NULL;
- /* Convert non-position values to 64-bit. */
- for(i = 0; i < 3; i++)
- {
- if(speed != NULL)
- spd[i] = speed[i];
- if(accelerate != NULL)
- acc[i] = accelerate[i];
- if(drag_normal != NULL)
- drn[i] = drag_normal[i];
- }
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub64, i);
- verse_send_o_transform_pos_real64(node_id, time_s, time_f, node->transform.position, pspd, pacc, pdrn, drag);
- }
- }
- count = vs_get_subscript_count(node->trans_sub32);
- for(i = 0; i < count; i++)
- {
-
- vs_set_subscript_session(node->trans_sub32, i);
- verse_send_o_transform_pos_real32(node_id, time_s, time_f, pos, speed, accelerate, drag_normal, drag);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_transform_rot_real32(void *user, VNodeID node_id, uint32 time_s, uint32 time_f, const VNQuat32 *rot,
- const VNQuat32 *speed, const VNQuat32 *accelerate, const VNQuat32 *drag_normal, real32 drag)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->transform.rotation.x = rot->x;
- node->transform.rotation.y = rot->y;
- node->transform.rotation.z = rot->z;
- node->transform.rotation.w = rot->w;
- if((count = vs_get_subscript_count(node->trans_sub64)) > 0)
- {
- VNQuat64 spd, acc, drn, *p[3];
-
- /* Convert 32-bit quaternions to 64-bit. Converter handles NULLs, has nice return semantics. */
- p[0] = v_quat64_from_quat32(&spd, speed);
- p[1] = v_quat64_from_quat32(&acc, accelerate);
- p[2] = v_quat64_from_quat32(&drn, drag_normal);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub64, i);
- verse_send_o_transform_rot_real64(node_id, time_s, time_f, &node->transform.rotation, p[0], p[1], p[2], drag);
- }
- }
- count = vs_get_subscript_count(node->trans_sub32);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub32, i);
- verse_send_o_transform_rot_real32(node_id, time_s, time_f, rot, speed, accelerate, drag_normal, drag);
- }
- vs_reset_subscript_session();
-}
-
-
-static void callback_send_o_transform_scale_real32(void *user, VNodeID node_id, real32 scale_x, real32 scale_y, real32 scale_z)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->transform.scale[0] = scale_x;
- node->transform.scale[1] = scale_y;
- node->transform.scale[2] = scale_z;
- count = vs_get_subscript_count(node->trans_sub64);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub64, i);
- verse_send_o_transform_scale_real64(node_id, scale_x, scale_y, scale_z);
- }
- count = vs_get_subscript_count(node->trans_sub32);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub32, i);
- verse_send_o_transform_scale_real32(node_id, scale_x, scale_y, scale_z);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_transform_pos_real64(void *user, VNodeID node_id, uint32 time_s, uint32 time_f, const real64 *pos,
- const real64 *speed, const real64 *accelerate, const real64 *drag_normal, real64 drag)
-{
- VSNodeObject *node;
- unsigned int i, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->transform.position[0] = pos[0];
- node->transform.position[1] = pos[1];
- node->transform.position[2] = pos[2];
- count = vs_get_subscript_count(node->trans_sub64);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub64, i);
- verse_send_o_transform_pos_real64(node_id, time_s, time_f, node->transform.position, speed, accelerate, drag_normal, drag);
- }
- if((count = vs_get_subscript_count(node->trans_sub32)) > 0) /* Anyone listening at 32 bits? */
- {
- real32 ps[3], spd[3], acc[3], drn[3], *p[] = { NULL, NULL, NULL };
-
- ps[0] = pos[0];
- ps[1] = pos[1];
- ps[2] = pos[2];
- if(speed != NULL)
- {
- p[0] = spd;
- spd[0] = speed[0];
- spd[1] = speed[1];
- spd[2] = speed[2];
- }
- else
- p[0] = NULL;
- if(accelerate != NULL)
- {
- p[1] = acc;
- acc[0] = accelerate[0];
- acc[1] = accelerate[1];
- acc[2] = accelerate[2];
- }
- else
- p[1] = NULL;
- if(drag_normal != NULL)
- {
- p[1] = drn;
- drn[0] = drag_normal[0];
- drn[1] = drag_normal[1];
- drn[2] = drag_normal[2];
- }
- else
- p[2] = NULL;
-
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub32, i);
- verse_send_o_transform_pos_real32(node_id, time_s, time_f, ps, p[0], p[1], p[2], (real32) drag);
- }
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_transform_rot_real64(void *user, VNodeID node_id, uint32 time_s, uint32 time_f, const VNQuat64 *rot,
- const VNQuat64 *speed, const VNQuat64 *accelerate, const VNQuat64 *drag_normal, real64 drag)
-{
- VSNodeObject *node;
- unsigned int i, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->transform.rotation = *rot;
- count = vs_get_subscript_count(node->trans_sub64);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub64, i);
- verse_send_o_transform_rot_real64(node_id, time_s, time_f, &node->transform.rotation, speed, accelerate, drag_normal, drag);
- }
- if((count = vs_get_subscript_count(node->trans_sub32)) > 0) /* Anyone listening at 32 bits? */
- {
- VNQuat32 rt, spd, acc, drn, *p[3];
-
- v_quat32_from_quat64(&rt, rot);
- p[0] = v_quat32_from_quat64(&spd, speed);
- p[1] = v_quat32_from_quat64(&acc, accelerate);
- p[2] = v_quat32_from_quat64(&drn, drag_normal);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub32, i);
- verse_send_o_transform_rot_real32(node_id, time_s, time_f, &rt, p[0], p[1], p[2], (real32) drag);
- }
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_transform_scale_real64(void *user, VNodeID node_id, real64 scale_x, real64 scale_y, real64 scale_z)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->transform.scale[0] = scale_x;
- node->transform.scale[1] = scale_y;
- node->transform.scale[2] = scale_z;
- count = vs_get_subscript_count(node->trans_sub64);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub64, i);
- verse_send_o_transform_scale_real64(node_id, scale_x, scale_y, scale_z);
- }
- count = vs_get_subscript_count(node->trans_sub32);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->trans_sub32, i);
- verse_send_o_transform_scale_real32(node_id, (real32) scale_x, (real32) scale_y, (real32) scale_z);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_transform_subscribe(void *user, VNodeID node_id, VNRealFormat type)
-{
- VSNodeObject *node;
- uint32 time_s, time_f;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- verse_session_get_time(&time_s, &time_f);
- if(type == VN_FORMAT_REAL32)
- {
- real32 tpos[3];
- VNQuat32 rot;
-
- vs_add_new_subscriptor(node->trans_sub32);
- tpos[0] = node->transform.position[0];
- tpos[1] = node->transform.position[1];
- tpos[2] = node->transform.position[2];
- verse_send_o_transform_pos_real32(node_id, time_s, time_f, tpos, NULL, NULL, NULL, 0.0f);
- v_quat32_from_quat64(&rot, &node->transform.rotation);
- verse_send_o_transform_rot_real32(node_id, time_s, time_f, &rot, NULL, NULL, NULL, 0.0f);
- verse_send_o_transform_scale_real32(node_id, (real32) node->transform.scale[0], (real32) node->transform.scale[1], (real32) node->transform.scale[2]);
- }
- else
- {
- vs_add_new_subscriptor(node->trans_sub64);
- verse_send_o_transform_pos_real64(node_id, time_s, time_f, node->transform.position, NULL, NULL, NULL, 0);
- verse_send_o_transform_rot_real64(node_id, time_s, time_f, &node->transform.rotation, NULL, NULL, NULL, 0);
- verse_send_o_transform_scale_real64(node_id, node->transform.scale[0], node->transform.scale[1], node->transform.scale[2]);
- }
-}
-
-static void callback_send_o_transform_unsubscribe(void *user, VNodeID node_id, VNRealFormat type)
-{
- VSNodeObject *node;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- if(type == VN_FORMAT_REAL32)
- vs_remove_subscriptor(node->trans_sub32);
- else
- vs_remove_subscriptor(node->trans_sub64);
-}
-
-static void callback_send_o_light_set(void *user, VNodeID node_id, real64 light_r, real64 light_g, real64 light_b)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- node->light[0] = light_r;
- node->light[1] = light_g;
- node->light[2] = light_b;
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_light_set(node_id, light_r, light_g, light_b);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_link_set(void *user, VNodeID node_id, uint16 link_id, VNodeID link, const char *name, uint32 target_id)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
-
- if(node == NULL)
- return;
-
- if(name[0] == 0)
- return;
- if(vs_get_node_head(link) == 0)
- link = 0;
-
- if(link_id >= node->link_count || node->links[link_id].name[0] == 0)
- {
- for(link_id = 0; link_id < node->link_count && node->links[link_id].name[0] != 0; link_id++);
-
- if(link_id == node->link_count)
- {
- i = node->link_count;
- node->link_count += 16;
- node->links = realloc(node->links, (sizeof *node->links) * node->link_count);
- for(; i < node->link_count; i++)
- {
- node->links[i].name[0] = 0;
- node->links[i].dimensions = 0;
- }
- }
- }
-
- node->links[link_id].link = link;
- for(i = 0; i < 15 && name[i] != 0; i++)
- node->links[link_id].name[i] = name[i];
- node->links[link_id].name[i] = 0;
- node->links[link_id].target_id = target_id;
-
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_link_set(node_id, link_id, link, name, target_id);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_link_destroy(void *user, VNodeID node_id, uint16 link_id)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
-
- if(link_id >= node->link_count || node->links[link_id].name[0] == 0)
- return;
-
- node->links[link_id].name[0] = 0;
-
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_link_destroy(node_id, link_id);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_method_group_create(void *user, VNodeID node_id, uint16 group_id, char *name)
-{
- VSNodeObject *node;
- unsigned int i, j, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
-
- for(i = 0; i < node->group_count; i++)
- {
- for(j = 0; node->groups[i].name[j] == name[j] && node->groups[i].name[j] != 0; j++);
- if(node->groups[i].name[j] == name[j])
- return;
- }
- if(group_id >= node->group_count || node->groups[group_id].name[0] == 0)
- {
- for(group_id = 0; group_id < node->group_count && node->groups[group_id].name[0] != 0; group_id++)
- if(group_id == node->group_count)
- {
- node->groups = realloc(node->groups, sizeof(*node->groups) * (node->group_count + 16));
- for(i = node->group_count; i < node->group_count + 16u; i++)
- {
- node->groups[i].name[0] = 0;
- node->groups[i].methods = NULL;
- node->groups[i].method_count = 0;
- }
- node->group_count += 16;
- }
- node->groups[group_id].subscribers = vs_create_subscription_list();
- }
- for(i = 0; i < 15 && name[i] != 0; i++)
- node->groups[group_id].name[i] = name[i];
- node->groups[group_id].name[i] = 0;
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_method_group_create(node_id, group_id, name);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_method_group_destroy(void *user, VNodeID node_id, uint16 group_id)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
-
- if(group_id >= node->group_count || node->groups[group_id].name[0] == 0)
- return;
- node->groups[group_id].name[0] = 0;
- for(i = 0; i < node->groups[group_id].method_count; i++)
- {
- if(node->groups[group_id].methods[i].name[0] != 0 && node->groups[group_id].methods[i].param_count > 0)
- {
- free(node->groups[group_id].methods[i].param_names);
- free(node->groups[group_id].methods[i].param_types);
- }
- }
- free(node->groups[group_id].methods);
- node->groups[group_id].methods = NULL;
- node->groups[group_id].method_count = 0;
- vs_destroy_subscription_list(node->groups[group_id].subscribers);
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_method_group_destroy(node_id, group_id);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_method_group_subscribe(void *user, VNodeID node_id, uint16 group_id)
-{
- VSNodeObject *node;
- unsigned int i, j;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
- if(group_id < node->group_count && node->groups[group_id].name[0] != 0)
- vs_add_new_subscriptor(node->groups[group_id].subscribers);
- for(i = 0; i < node->groups[group_id].method_count; i++)
- {
- if(node->groups[group_id].methods[i].name[0] != 0)
- {
- char *names[255];
- for(j = 0; j < node->groups[group_id].methods[i].param_count; j++)
- names[j] = &node->groups[group_id].methods[i].param_names[j * 16];
- verse_send_o_method_create(node_id, group_id, i, node->groups[group_id].methods[i].name, node->groups[group_id].methods[i].param_count, node->groups[group_id].methods[i].param_types, (const char **) names);
- }
- }
-}
-
-static void callback_send_o_method_group_unsubscribe(void *user, VNodeID node_id, uint16 group_id)
-{
- VSNodeObject *node;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
- if(group_id < node->group_count && node->groups[group_id].name[0] != 0)
- vs_remove_subscriptor(node->groups[group_id].subscribers);
-}
-
-static void callback_send_o_method_create(void *user, VNodeID node_id, uint16 group_id, uint16 method_id, char *name, uint8 param_count, VNOParamType *param_types, char * *param_names)
-{
- VSNodeObject *node;
- unsigned int i, j, count;
- VSMethodGroup *group;
-
- node = (VSNodeObject *) vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
- if(group_id >= node->group_count || node->groups[group_id].name[0] == 0)
- return;
- group = &node->groups[group_id];
- for(i = 0; i < group->method_count; i++)
- {
- if(i != method_id)
- {
- for(j = 0; group->methods[i].name[j] == name[j] && group->methods[i].name[j] != 0; j++);
- if(group->methods[i].name[j] == name[j])
- return;
- }
- }
- if(method_id < group->method_count && group->methods[method_id].name[0] != 0)
- {
- for(i = 0; i < 16; i++)
- group->methods[method_id].name[i] = name[i];
- if(group->methods[method_id].param_count != 0)
- {
- free(group->methods[method_id].param_names);
- free(group->methods[method_id].param_types);
- }
- }else
- {
- for(method_id = 0; method_id < group->method_count && group->methods[method_id].name[0] != 0; method_id++);
- if(method_id == group->method_count)
- {
- group->methods = realloc(group->methods, sizeof(*group->methods) * (group->method_count + 16));
- for(i = group->method_count; i < group->method_count + 16; i++)
- group->methods[i].name[0] = 0;
- group->method_count += 16;
- }
- }
- for(i = 0; i < VN_O_METHOD_NAME_SIZE && name[i] != 0; i++)
- group->methods[method_id].name[i] = name[i];
- group->methods[method_id].name[i] = '\0';
- group->methods[method_id].param_count = param_count;
- if(param_count > 0)
- {
- group->methods[method_id].param_types = malloc((sizeof *group->methods[method_id].param_types) * param_count);
- group->methods[method_id].param_names = malloc((sizeof *group->methods[method_id].param_names) * param_count * 16);
- }
- for(i = 0; i < param_count; i++)
- {
- group->methods[method_id].param_types[i] = param_types[i];
- for(j = 0; j < 15 && param_names[i][j] != 0; j++)
- group->methods[method_id].param_names[i * 16 + j] = param_names[i][j];
- group->methods[method_id].param_names[i * 16 + j] = 0;
- }
- count = vs_get_subscript_count(node->groups[group_id].subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->groups[group_id].subscribers, i);
- verse_send_o_method_create(node_id, group_id, method_id, name, param_count, param_types, (const char **) param_names);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_method_destroy(void *user, VNodeID node_id, uint16 group_id, uint16 method_id)
-{
- VSNodeObject *node;
- unsigned int i, count;
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
- if(group_id >= node->group_count || node->groups[group_id].name[0] == 0 || method_id >= node->groups[group_id].method_count || node->groups[group_id].methods[method_id].name[0] == 0)
- return;
-
- node->groups[group_id].methods[method_id].name[0] = 0;
- if(node->groups[group_id].methods[method_id].param_count != 0)
- {
- free(node->groups[group_id].methods[method_id].param_names);
- free(node->groups[group_id].methods[method_id].param_types);
- }
- count = vs_get_subscript_count(node->groups[group_id].subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->groups[group_id].subscribers, i);
- verse_send_o_method_destroy(node_id, group_id, method_id);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_method_call(void *user, VNodeID node_id, uint16 group_id, uint16 method_id, VNodeID sender, void *params)
-{
- VNOParam unpacked_params[255];
- void *data;
- VSNodeObject *node;
- unsigned int i, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || vs_get_node(node_id, V_NT_OBJECT) == NULL)
- return;
-
- if(group_id >= node->group_count || node->groups[group_id].name[0] == 0 || method_id >= node->groups[group_id].method_count || node->groups[group_id].methods[method_id].name[0] == 0)
- return;
- if(!verse_method_call_unpack(params, node->groups[group_id].methods[method_id].param_count, node->groups[group_id].methods[method_id].param_types, unpacked_params))
- return;
- sender = vs_get_avatar();
- count = vs_get_subscript_count(node->groups[group_id].subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->groups[group_id].subscribers, i);
- data = verse_method_call_pack(node->groups[group_id].methods[method_id].param_count, node->groups[group_id].methods[method_id].param_types, unpacked_params);
- if(data != NULL)
- verse_send_o_method_call(node_id, group_id, method_id, sender, data);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_anim_run(void *user, VNodeID node_id, uint16 link_id, uint32 time_s, uint32 time_f, uint8 dimensions, real64 *pos,
- real64 *speed, real64 *accel, real64 *scale, real64 *scale_speed)
-{
- VSNodeObject *node;
- unsigned int i, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL)
- return;
- if(link_id >= node->link_count || node->links[link_id].name[0] == 0)
- return;
- if(NULL == vs_get_node(node->links[link_id].link, V_NT_CURVE))
- return;
- node->links[link_id].time_s = time_s;
- node->links[link_id].time_f = time_f;
- node->links[link_id].dimensions = dimensions;
- for(i = 0; i < dimensions && i < 4; i++)
- {
- node->links[link_id].pos[i] = pos[i];
- node->links[link_id].speed[i] = speed[i];
- node->links[link_id].accel[i] = accel[i];
- node->links[link_id].scale[i] = scale[i];
- node->links[link_id].scale_speed[i] = scale_speed[i];
- }
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_anim_run(node_id, link_id, time_s, time_f, dimensions, pos, speed, accel, scale, scale_speed);
- }
- vs_reset_subscript_session();
-}
-
-static void callback_send_o_hide(void *user, VNodeID node_id, uint8 hidden)
-{
- VSNodeObject *node;
- unsigned int i, count;
-
- node = (VSNodeObject *)vs_get_node(node_id, V_NT_OBJECT);
- if(node == NULL || hidden == node->hidden)
- return;
- node->hidden = hidden;
- count = vs_get_subscript_count(node->head.subscribers);
- for(i = 0; i < count; i++)
- {
- vs_set_subscript_session(node->head.subscribers, i);
- verse_send_o_hide(node_id, hidden);
- }
- vs_reset_subscript_session();
-}
-
-void vs_o_callback_init(void)
-{
-
- verse_callback_set(verse_send_o_transform_pos_real32, callback_send_o_transform_pos_real32, NULL);
- verse_callback_set(verse_send_o_transform_rot_real32, callback_send_o_transform_rot_real32, NULL);
- verse_callback_set(verse_send_o_transform_scale_real32, callback_send_o_transform_scale_real32, NULL);
- verse_callback_set(verse_send_o_transform_pos_real64, callback_send_o_transform_pos_real64, NULL);
- verse_callback_set(verse_send_o_transform_rot_real64, callback_send_o_transform_rot_real64, NULL);
- verse_callback_set(verse_send_o_transform_scale_real64, callback_send_o_transform_scale_real64, NULL);
- verse_callback_set(verse_send_o_transform_subscribe, callback_send_o_transform_subscribe, NULL);
- verse_callback_set(verse_send_o_transform_unsubscribe, callback_send_o_transform_unsubscribe, NULL);
- verse_callback_set(verse_send_o_link_set, callback_send_o_link_set, NULL);
- verse_callback_set(verse_send_o_light_set, callback_send_o_light_set, NULL);
- verse_callback_set(verse_send_o_link_set, callback_send_o_link_set, NULL);
- verse_callback_set(verse_send_o_link_destroy, callback_send_o_link_destroy, NULL);
- verse_callback_set(verse_send_o_method_group_create, callback_send_o_method_group_create, NULL);
- verse_callback_set(verse_send_o_method_group_destroy, callback_send_o_method_group_destroy, NULL);
- verse_callback_set(verse_send_o_method_group_subscribe, callback_send_o_method_group_subscribe, NULL);
- verse_callback_set(verse_send_o_method_group_unsubscribe, callback_send_o_method_group_unsubscribe, NULL);
- verse_callback_set(verse_send_o_method_create, callback_send_o_method_create, NULL);
- verse_callback_set(verse_send_o_method_destroy, callback_send_o_method_destroy, NULL);
- verse_callback_set(verse_send_o_method_call, callback_send_o_method_call, NULL);
- verse_callback_set(verse_send_o_anim_run, callback_send_o_anim_run, NULL);
- verse_callback_set(verse_send_o_hide, callback_send_o_hide, NULL);
-}
-
-#endif