mirror of
https://github.com/quelsolaar/MergeSource
synced 2025-02-08 11:08:41 -05:00
315 lines
17 KiB
C
315 lines
17 KiB
C
/*
|
|
* This is the header for the Enough library. Enough is a storage API written on top of Verse;
|
|
* it saves application authors from having to do the work of defining and managing data structures
|
|
* to hold a "mirror" of a Verse host's contents. Note that Enough does not contain any functions
|
|
* for sending data to the host, use the plain Verse API for that.
|
|
*/
|
|
|
|
#if !defined(ENOUGH_H)
|
|
#define ENOUGH_H
|
|
#include "verse.h"
|
|
#include "forge.h"
|
|
#include "e_types.h"
|
|
|
|
#define E_CDC_COUNT 16
|
|
|
|
typedef enum{
|
|
E_CDC_CREATE,
|
|
E_CDC_STRUCT,
|
|
E_CDC_DATA,
|
|
E_CDC_DESTROY
|
|
}ECustomDataCommand;
|
|
|
|
/* verse connection ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
extern void enough_init(void);
|
|
|
|
extern uint e_vc_connect(const char *server_address, const char *name, const char *pass, const uint8 *host_id);
|
|
extern boolean e_vc_check_connected(void);
|
|
extern boolean e_vc_check_connected_slot(uint connection);
|
|
extern boolean e_vc_check_accepted_slot(uint connection);
|
|
extern char * e_vc_check_rejected_slot(uint connection);
|
|
|
|
extern void e_vc_disconnect(uint connection);
|
|
extern void e_vc_disconnect_all(void);
|
|
extern void e_vc_set_current_active_connection(uint connection);
|
|
extern void e_vc_connection_update(uint connection, uint time);
|
|
extern void e_vc_set_auto_subscribe(VNodeType type, boolean set);
|
|
|
|
/* verse node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
typedef void ENode;
|
|
|
|
extern ENode * e_ns_get_node(uint connection, uint node_id);
|
|
extern ENode * e_ns_get_node_next(uint id, uint connection, VNodeType type);
|
|
extern ENode * e_ns_get_node_avatar(uint connection);
|
|
extern ENode * e_ns_get_node_link(const ENode *parent, uint node_id);
|
|
|
|
extern uint e_ns_get_node_count(uint connection, VNodeType type);
|
|
extern boolean e_search_node(ENode *node, char *search);
|
|
|
|
extern uint e_ns_get_node_id(const ENode *node);
|
|
extern VNodeType e_ns_get_node_type(const ENode *node);
|
|
extern VNodeOwner e_ns_get_node_owner(const ENode *node);
|
|
extern char * e_ns_get_node_name(ENode *node);
|
|
extern uint e_ns_get_node_connection(const ENode *node);
|
|
|
|
extern uint e_ns_get_node_version_struct(const ENode *node);
|
|
extern uint e_ns_get_node_version_data(const ENode *node);
|
|
extern void e_ns_update_node_version_struct(ENode *node);
|
|
extern void e_ns_update_node_version_data(ENode *node);
|
|
extern uint e_ns_get_global_version(uint connection, VNodeType type);
|
|
|
|
extern void e_ns_set_custom_data(ENode *node, uint slot, void *data);
|
|
extern void e_ns_set_custom_func(uint slot, VNodeType type, void (*func)(ENode *node, ECustomDataCommand command));
|
|
extern void * e_ns_get_custom_data(ENode *node, uint slot);
|
|
|
|
extern ENode * e_ns_get_node_selected(uint connection, VNodeType type);
|
|
extern void e_ns_set_node_selected(uint connection, uint id, VNodeType type);
|
|
extern uint e_ns_get_node_selected_id(uint connection, VNodeType type);
|
|
extern void e_ns_set_node_create_func(void (* func)(uint connection, uint id, VNodeType type, void *user), void *user);
|
|
|
|
extern char * e_ns_get_tag_group(const ENode *node, uint16 group_id);
|
|
extern uint16 e_ns_get_next_tag_group(const ENode *node, uint16 group_id);
|
|
extern uint16 e_ns_get_next_tag(const ENode *node, uint16 group_id, uint16 tag_id);
|
|
extern char * e_ns_get_tag_name(const ENode *node, uint16 group_id, uint16 tag_id);
|
|
extern VNTagType e_ns_get_tag_type(const ENode *node, uint16 group_id, uint16 tag_id);
|
|
extern VNTag * e_ns_get_tag(const ENode *node, uint16 group_id, uint16 tag_id);
|
|
|
|
extern void e_ns_get_tag_by_name(const ENode *node, char *name, uint16 *group_id, uint16 *tag_id);
|
|
extern VNTag *e_ns_get_tag_by_type(const ENode *node, char *name, VNTagType type, uint16 *group_id, uint16 *tag_id);
|
|
extern uint16 e_ns_get_group_by_name(const ENode *node, char *group_name);
|
|
extern VNTag *e_ns_get_tag_by_name_and_group(const ENode *node, char *group_name, char *tag_name, uint16 *group_id, uint16 *tag_id, VNTagType *tag_type);
|
|
extern VNTag *e_ns_get_tag_by_type_and_group(const ENode *node, char *group_name, char *tag_name, VNTagType type, uint16 *group_id, uint16 *tag_id);
|
|
|
|
extern void e_matrix_to_quaternionsf(float *matrix, VNQuat32 *quaternion);
|
|
extern void e_matrix_to_quaternionsd(double *matrix, VNQuat64 *quaternion);
|
|
extern void e_quaternions_to_matrixf(float *matrix, VNQuat32 *quaternion);
|
|
extern void e_quaternions_to_matrixd(double *matrix, VNQuat64 *quaternion);
|
|
|
|
/* object node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
typedef void EObjLink;
|
|
|
|
extern void e_nso_get_pos(ENode *node, double *pos, double *speed, double *accelerate, double *drag_normal, double *drag, uint32 *time);
|
|
extern void e_nso_get_rot(ENode *node, VNQuat64 *rot, VNQuat64 *speed, VNQuat64 *accelerate, VNQuat64 *drag_normal, double *drag, uint32 *time);
|
|
extern void e_nso_get_pos_time(ENode *node, double *pos, uint32 time_s, uint32 time_f);
|
|
extern void e_nso_get_rot_time(ENode *node, VNQuat64 *rot, uint32 time_s, uint32 time_f);
|
|
extern void e_nso_get_scale(ENode *node, double *scale);
|
|
extern void e_nso_get_rot_matrix(ENode *node, double *matrix, uint32 time_s, uint32 time_f);
|
|
extern void e_nso_get_matrix(ENode *node, double *matrix, uint32 time_s, uint32 time_f);
|
|
|
|
extern void e_nso_get_light(ENode *node, double *light);
|
|
|
|
extern EObjLink * e_nso_get_link(ENode *node, uint16 id);
|
|
extern EObjLink * e_nso_get_next_link(ENode *node, uint16 id);
|
|
extern uint16 e_nso_get_link_id(EObjLink *link);
|
|
extern VNodeID e_nso_get_link_node(EObjLink *link);
|
|
extern char * e_nso_get_link_name(EObjLink *link);
|
|
extern uint32 e_nso_get_link_target_id(EObjLink *link);
|
|
|
|
extern void e_nso_get_anim_time(EObjLink *link, uint32 *time_s, uint32 *time_f);
|
|
|
|
extern void e_nso_get_anim_pos(EObjLink *link, double *pos);
|
|
extern void e_nso_get_anim_speed(EObjLink *link, double *speed);
|
|
extern void e_nso_get_anim_accel(EObjLink *link, double *accel);
|
|
extern void e_nso_get_anim_scale(EObjLink *link, double *scale);
|
|
extern void e_nso_get_anim_scale_speed(EObjLink *link, double *scale_speed);
|
|
extern boolean e_nso_get_anim_active(EObjLink *link);
|
|
extern void e_nso_get_anim_evaluate_pos(EObjLink *link, double *pos, uint32 time_s, uint32 time_f);
|
|
extern void e_nso_get_anim_evaluate_scale(EObjLink *link, double *scale, uint32 time_s, uint32 time_f);
|
|
|
|
|
|
extern char * e_nso_get_method_group(ENode *node, uint16 group_id);
|
|
extern uint16 e_nso_get_next_method_group(ENode *node, uint16 group_id);
|
|
extern char * e_nso_get_method(ENode *node, uint16 group_id, uint16 method_id);
|
|
extern uint16 e_nso_get_next_method(ENode *node, uint16 group_id, uint16 method_id);
|
|
extern uint e_nso_get_method_param_count(ENode *node, uint16 group_id, uint16 method_id);
|
|
extern char ** e_nso_get_method_param_names(ENode *node, uint16 group_id, uint16 method_id);
|
|
extern VNOParamType * e_nso_get_method_param_types(ENode *node, uint16 group_id, uint16 method_id);
|
|
|
|
extern boolean e_nso_get_hide(ENode *node);
|
|
/*
|
|
extern double e_nso_evaluate_anim_handle_single(EOAnimhandle *handle, uint seconds, uint fractions);
|
|
extern double e_nso_evaluate_anim_handle_mult(double *output, EOAnimhandle *handle, uint seconds, uint fractions);
|
|
*/
|
|
/* geometry node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
typedef void EGeoLayer;
|
|
|
|
extern EGeoLayer * e_nsg_get_layer_by_name(ENode *g_node, const char *name);
|
|
extern EGeoLayer * e_nsg_get_layer_by_id(ENode *g_node, uint layer_id);
|
|
extern EGeoLayer * e_nsg_get_layer_by_type(ENode *g_node, VNGLayerType type, const char *name);
|
|
extern EGeoLayer * e_nsg_get_layer_by_fragment(ENode *g_node, const char *name);
|
|
extern EGeoLayer * e_nsg_get_layer_next(ENode *g_node, uint layer_id);
|
|
|
|
extern EGeoLayer * e_nsg_get_layer_crease_vertex_layer(ENode *g_node);
|
|
extern char * e_nsg_get_layer_crease_vertex_name(ENode *g_node);
|
|
extern uint32 e_nsg_get_layer_crease_vertex_value(ENode *g_node);
|
|
|
|
extern EGeoLayer * e_nsg_get_layer_crease_edge_layer(ENode *g_node);
|
|
extern char * e_nsg_get_layer_crease_edge_name(ENode *g_node);
|
|
extern uint32 e_nsg_get_layer_crease_edge_value(ENode *g_node);
|
|
|
|
extern void * e_nsg_get_layer_data(ENode *g_node, EGeoLayer *layer);
|
|
extern VNGLayerType e_nsg_get_layer_type(EGeoLayer *layer);
|
|
extern uint e_nsg_get_layer_id(EGeoLayer *layer);
|
|
extern uint e_nsg_get_layer_version(EGeoLayer *layer);
|
|
extern uint e_nsg_get_vertex_length(ENode *g_node);
|
|
extern uint e_nsg_get_polygon_length(ENode *g_node);
|
|
extern char * e_nsg_get_layer_name(EGeoLayer *layer);
|
|
|
|
extern void e_nsg_get_center(ENode *node, egreal *center);
|
|
extern void e_nsg_get_bounding_box(ENode *node, egreal *high_x, egreal *low_x, egreal *high_y, egreal *low_y, egreal *high_z, egreal *low_z);
|
|
extern egreal e_nsg_get_size(ENode *node);
|
|
|
|
|
|
extern uint e_nsg_find_empty_vertex_slot(ENode *node, uint start);
|
|
extern uint e_nsg_find_empty_polygon_slot(ENode *node, uint start);
|
|
|
|
extern uint16 e_nsg_get_bone_by_weight(ENode *g_node, const char *name);
|
|
extern uint16 e_nsg_get_bone_next(ENode *g_node, uint16 bone_id);
|
|
|
|
extern char * e_nsg_get_bone_weight(ENode *g_node, uint16 bone_id);
|
|
extern char * e_nsg_get_bone_reference(ENode *g_node, uint16 bone_id);
|
|
extern uint16 e_nsg_get_bone_parent(ENode *g_node, uint16 bone_id);
|
|
extern void e_nsg_get_bone_pos32(ENode *g_node, uint16 bone_id, float *pos);
|
|
extern void e_nsg_get_bone_pos64(ENode *g_node, uint16 bone_id, double *pos);
|
|
extern void e_nsg_get_bone_rot32(ENode *g_node, uint16 bone_id, VNQuat32 *rot);
|
|
extern void e_nsg_get_bone_rot64(ENode *g_node, uint16 bone_id, VNQuat64 *rot);
|
|
|
|
extern char * e_nsg_get_bone_pos_label(ENode *g_node, uint16 bone_id);
|
|
extern char * e_nsg_get_bone_rot_label(ENode *g_node, uint16 bone_id);
|
|
extern char * e_nsg_get_bone_scale_label(ENode *g_node, uint16 bone_id);
|
|
|
|
/*
|
|
extern void e_nsg_get_bone_matrix32(ENode *o_node, ENode *g_node, uint16 bone_id, float *matrix);
|
|
extern void e_nsg_get_bone_matrix64(ENode *o_node, ENode *g_node, uint16 bone_id, double *matrix);
|
|
*/
|
|
|
|
|
|
/* material node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
extern VNMFragmentID e_nsm_get_fragment_next(ENode *node, VNMFragmentID id);
|
|
extern VMatFrag * e_nsm_get_fragment(ENode *node, VNMFragmentID id);
|
|
extern VNMFragmentType e_nsm_get_fragment_type(ENode *node, VNMFragmentID id);
|
|
|
|
extern VNMFragmentID e_nsm_get_fragment_color_front(ENode *node);
|
|
extern VNMFragmentID e_nsm_get_fragment_color_back(ENode *node);
|
|
extern VNMFragmentID e_nsm_get_fragment_color_particles(ENode *node);
|
|
extern VNMFragmentID e_nsm_get_fragment_color_displacement(ENode *node);
|
|
extern VNMFragmentID e_nsm_find_empty_slot(ENode *node, VNMFragmentID id);
|
|
|
|
extern uint e_nsm_get_fragment_count(ENode *node);
|
|
extern uint e_nsm_get_fragment_version(ENode *node, VNMFragmentID id);
|
|
|
|
extern void e_nsm_set_custom_data(ENode *node, VNMFragmentID frag, uint slot, void *data);
|
|
extern void e_nsm_set_custom_func(uint slot, void (*func)(ENode *node, VNMFragmentID frag, ECustomDataCommand command));
|
|
extern void * e_nsm_get_custom_data(ENode *node, VNMFragmentID frag, uint slot);
|
|
|
|
/* loop protection */
|
|
|
|
extern boolean e_nsm_enter_fragment(ENode *node, VNMFragmentID id);
|
|
extern void e_nsm_leave_fragment(ENode *node, VNMFragmentID id);
|
|
|
|
|
|
/* bitmap node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
typedef void EBitLayer;
|
|
|
|
extern EBitLayer * e_nsb_get_layer_by_name(ENode *node, const char *name);
|
|
extern EBitLayer * e_nsb_get_layer_by_id(ENode *node, uint layer_id);
|
|
extern EBitLayer * e_nsb_get_layer_by_type(ENode *node, VNBLayerType type, const char *name);
|
|
extern EBitLayer * e_nsb_get_layer_next(ENode *node, uint layer_id);
|
|
|
|
extern void * e_nsb_get_layer_data(ENode *node, EBitLayer *layer);
|
|
extern uint e_nsb_get_layer_id(EBitLayer *layer);
|
|
extern char * e_nsb_get_layer_name(EBitLayer *layer);
|
|
extern VNBLayerType e_nsb_get_layer_type(EBitLayer *layer);
|
|
extern uint e_nsb_get_layer_version(EBitLayer *layer);
|
|
|
|
extern void e_nsb_fill_buffer_uint8(ENode *node, EBitLayer *layer, uint8 *buffer, uint stride);
|
|
extern void e_nsb_fill_buffer_uint16(ENode *node, EBitLayer *layer, uint16 *buffer, uint stride);
|
|
extern void e_nsb_fill_buffer_float(ENode *node, EBitLayer *layer, float *buffer, uint stride);
|
|
extern void e_nsb_fill_buffer_double(ENode *node, EBitLayer *layer, double *buffer, uint stride);
|
|
|
|
extern void e_nsb_image_set_float(ENode *node, EBitLayer *layer, float *buffer, uint stride);
|
|
|
|
typedef void EBMHandle;
|
|
|
|
extern ebreal e_nsb_get_aspect(ENode *node);
|
|
extern void e_nsb_get_size(ENode *node, uint *x, uint *y, uint *z);
|
|
extern EBMHandle *e_nsb_get_image_handle(VNodeID node_id, const char *layer_r, const char *layer_g, const char *layer_b);
|
|
extern EBMHandle *e_nsb_get_empty_handle(void);
|
|
extern void e_nsb_evaluate_image_handle_tile(EBMHandle *handle, ebreal *output, ebreal u, ebreal v, ebreal w);
|
|
extern void e_nsb_evaluate_image_handle_clamp(EBMHandle *handle, ebreal *output, ebreal u, ebreal v, ebreal w);
|
|
extern void e_nsb_destroy_image_handle(EBMHandle *handle);
|
|
|
|
/* curve node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
typedef void ECurve;
|
|
|
|
extern ECurve * e_nsc_get_curve_by_name(ENode *c_node, const char *name);
|
|
extern ECurve * e_nsc_get_curve_by_id(ENode *c_node, uint curve_id);
|
|
extern ECurve * e_nsc_get_curve_next(ENode *c_node, uint curve_id);
|
|
|
|
extern char * e_nsc_get_curve_name(ECurve *curve);
|
|
extern uint e_nsc_get_curve_id(ECurve *curve);
|
|
extern uint e_nsc_get_curve_length(ECurve *curve);
|
|
extern uint e_nsc_get_curve_dimensions(ECurve *curve);
|
|
extern uint e_nsc_get_curve_point_count(ECurve *curve);
|
|
|
|
extern uint e_nsc_get_point_next(ECurve *curve, uint point_id);
|
|
extern uint e_nsc_get_point_order(ECurve *curve, uint point_nr);
|
|
extern uint e_nsc_get_point_pos(ECurve *curve, uint point_id);
|
|
|
|
extern void e_nsc_get_point(ECurve *curve, uint point_id, real64 *pre_value, uint32 *pre_pos, real64 *value, real64 *pos, real64 *post_value, uint32 *post_pos);
|
|
extern void e_nsc_get_point_double(ECurve *curve, uint point_id, real64 *pre_value, real64 *pre_pos, real64 *value, real64 *pos, real64 *post_value, real64 *post_pos);
|
|
extern void e_nsc_get_segment(ECurve *curve, uint segment_nr, uint axis, real64 *point_0, real64 *point_1, real64 *point_2, real64 *point_3);
|
|
|
|
extern double e_nsc_evaluate_curve(ECurve *curve, double *output, double pos);
|
|
|
|
extern void e_nsc_send_c_key_set(ENode *node, ECurve *curve, uint32 key_id, real64 *pre_value, real64 *pre_pos, real64 *value, real64 *pos, real64 *post_value, real64 *post_pos);
|
|
|
|
/* Text node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
typedef void ETextBuffer;
|
|
|
|
extern char * e_nst_get_language(ENode *t_node);
|
|
extern ETextBuffer * e_nst_get_buffer_by_name(ENode *node, char *name);
|
|
extern ETextBuffer * e_nst_get_buffer_by_id(ENode *node, uint buffer_id);
|
|
extern ETextBuffer * e_nst_get_buffer_next(ENode *node, uint buffer_id);
|
|
extern char * e_nst_get_buffer_data(ENode *node, ETextBuffer *buffer);
|
|
extern uint e_nst_get_buffer_data_length(ENode *node, ETextBuffer *buffer);
|
|
extern uint e_nst_get_buffer_id(ETextBuffer *buffer);
|
|
extern char * e_nst_get_buffer_name(ETextBuffer *buffer);
|
|
extern uint e_nst_get_buffer_version(ETextBuffer *buffer);
|
|
|
|
|
|
/* Audio node storage ----------------------------------------------------------------------------------------------------------------*/
|
|
|
|
typedef void EAudioBuffer;
|
|
typedef void EAudioStream;
|
|
|
|
extern EAudioBuffer * e_nsa_get_buffer_by_name(ENode *node, char *name);
|
|
extern EAudioBuffer * e_nsa_get_buffer_by_id(ENode *node, uint buffer_id);
|
|
extern EAudioBuffer * e_nsa_get_buffer_next(ENode *node, uint buffer_id);
|
|
extern char * e_nsa_get_buffer_data(ENode *node, EAudioBuffer *buffer);
|
|
extern uint e_nsa_get_buffer_data_length(ENode *node, EAudioBuffer *buffer);
|
|
extern uint e_nsa_get_buffer_id(EAudioBuffer *buffer);
|
|
extern char * e_nsa_get_buffer_name(EAudioBuffer *buffer);
|
|
extern VNABlockType e_nsa_get_buffer_type(EAudioBuffer *buffer);
|
|
extern double e_nsa_get_buffer_frequency(EAudioBuffer *buffer);
|
|
extern uint e_nsa_get_buffer_version(EAudioBuffer *buffer);
|
|
|
|
extern EAudioStream * e_nsa_get_stream_by_name(ENode *node, char *name);
|
|
extern EAudioStream * e_nsa_get_stream_by_id(ENode *node, uint stream_id);
|
|
extern EAudioStream * e_nsa_get_stream_next(ENode *node, uint stream_id);
|
|
extern uint e_nsa_get_stream_id(EAudioStream *stream);
|
|
extern char * e_nsa_get_stream_name(EAudioStream *stream);
|
|
extern uint e_nsa_get_stream_version(EAudioStream *stream);
|
|
|
|
#endif
|