PROMPT CREATE OR REPLACE PACKAGE asset.asset_exporter CREATE OR REPLACE PACKAGE asset.ASSET_EXPORTER as function update_shader (p_pathname varchar2, p_filename varchar2, p_effect varchar2) return number; function update_mesh ( p_pathname varchar2, p_filename varchar2, p_type varchar2, p_num_polygons number, p_num_verts number, p_num_uv_sets number, p_extent_center_x float, p_extent_center_y float, p_extent_center_z float, p_extent_radius float, p_extent_box_min_x float, p_extent_box_min_y float, p_extent_box_min_z float, p_extent_box_max_x float, p_extent_box_max_y float, p_extent_box_max_z float, p_num_hardpoints number) return number; function update_texture (p_pathname varchar2, p_filename varchar2, p_texture_size number, p_depth number, p_num_mips number) return number; function update_lod (p_pathname varchar2, p_filename varchar2) return number; function update_component (p_pathname varchar2, p_filename varchar2) return number; function update_sprite (p_pathname varchar2, p_filename varchar2, p_radius float, p_center_x float, p_center_y float, p_center_z float) return number; function update_skeleton (p_pathname varchar2, p_filename varchar2, p_num_bones number) return number; function update_animation (p_pathname varchar2, p_filename varchar2, p_num_frames number, p_type varchar2, p_gender number) return number; function find_art_item(p_pathname varchar2, p_filename varchar2, p_type number) return number; procedure wipe_tree(p_appearance_id number); procedure add_tree_node(p_appearance_id number, p_item_id number, p_entry_index number, p_exit_index number, p_parent_entry number); procedure set_appearance_property(p_appearance_id number, p_name varchar2, p_value varchar2); procedure update_appearance(p_appearance_id number, p_author varchar2); procedure update_appearance2(p_appearance_id number, p_author varchar2, p_status number); end; / PROMPT CREATE OR REPLACE PACKAGE BODY asset.asset_exporter CREATE OR REPLACE PACKAGE BODY asset.ASSET_EXPORTER as function update_shader (p_pathname varchar2, p_filename varchar2, p_effect varchar2) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,1); update shaders set effect=p_effect where id=item_id; if sql%rowcount = 0 then insert into shaders (id,effect) values (item_id,p_effect); end if; return item_id; end; function update_mesh ( p_pathname varchar2, p_filename varchar2, p_type varchar2, p_num_polygons number, p_num_verts number, p_num_uv_sets number, p_extent_center_x float, p_extent_center_y float, p_extent_center_z float, p_extent_radius float, p_extent_box_min_x float, p_extent_box_min_y float, p_extent_box_min_z float, p_extent_box_max_x float, p_extent_box_max_y float, p_extent_box_max_z float, p_num_hardpoints number) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,2); update meshes set type=p_type, num_verts=p_num_verts, num_uv_sets=p_num_uv_sets, extent_center_x=p_extent_center_x, extent_center_y=p_extent_center_y, extent_center_z=p_extent_center_z, extent_radius=p_extent_radius, extent_box_min_x=p_extent_box_min_x, extent_box_min_y=p_extent_box_min_y, extent_box_min_z=p_extent_box_min_z, extent_box_max_x=p_extent_box_max_x, extent_box_max_y=p_extent_box_max_y, extent_box_max_z=p_extent_box_max_z where id=item_id; if sql%rowcount = 0 then insert into meshes (id,type,num_polygons,num_verts,num_uv_sets,extent_center_x,extent_center_y, extent_center_z,extent_radius,extent_box_min_x,extent_box_min_y,extent_box_min_z, extent_box_max_x,extent_box_max_y,extent_box_max_z) values (item_id,p_type,p_num_polygons,p_num_verts,p_num_uv_sets,p_extent_center_x,p_extent_center_y, p_extent_center_z,p_extent_radius,p_extent_box_min_x,p_extent_box_min_y,p_extent_box_min_z, p_extent_box_max_x,p_extent_box_max_y,p_extent_box_max_z); end if; return item_id; end; function update_texture (p_pathname varchar2, p_filename varchar2, p_texture_size number, p_depth number, p_num_mips number) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,3); update textures set texture_size=p_texture_size, depth=p_depth, num_mips=p_num_mips where id=item_id; if sql%rowcount = 0 then insert into textures (id,texture_size,depth,num_mips) values (item_id,p_texture_size,p_depth,p_num_mips); end if; return item_id; end; function update_lod (p_pathname varchar2, p_filename varchar2) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,4); insert into lods (id) select item_id from dual where not exists ( select * from lods where id=item_id); return item_id; end; function update_component (p_pathname varchar2, p_filename varchar2) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,5); insert into components (id) select item_id from dual where not exists ( select * from components where id=item_id); return item_id; end; function update_sprite (p_pathname varchar2, p_filename varchar2, p_radius float, p_center_x float, p_center_y float, p_center_z float) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,6); update sprites set radius=p_radius, center_x=p_center_x, center_y=p_center_y, center_z=p_center_z where id=item_id; if sql%rowcount = 0 then insert into sprites (id,radius,center_x,center_y,center_z) values (item_id, p_radius, p_center_x, p_center_y, p_center_z); end if; return item_id; end; function update_skeleton (p_pathname varchar2, p_filename varchar2, p_num_bones number) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,7); update skeletons set num_bones=p_num_bones where id=item_id; if sql%rowcount = 0 then insert into skeletons (id,num_bones) values (item_id, p_num_bones); end if; return item_id; end; function update_animation (p_pathname varchar2, p_filename varchar2, p_num_frames number, p_type varchar2, p_gender number) return number as item_id number; begin item_id := find_art_item(p_pathname, p_filename,8); update animations set num_frames=p_num_frames, type=p_type, gender=p_gender where id=item_id; if sql%rowcount = 0 then insert into animations (id, num_frames, type, gender) values (item_id, p_num_frames, p_type, p_gender); end if; return item_id; end; function find_art_item(p_pathname varchar2, p_filename varchar2, p_type number) return number as item_id number; begin select id into item_id from art_items where pathname = p_pathname and filename = p_filename; return item_id; exception when NO_DATA_FOUND then select art_item_ids.nextval into item_id from dual; insert into art_items (id, pathname, filename, type_id) values (item_id, p_pathname, p_filename, p_type); return item_id; end; procedure wipe_tree(p_appearance_id number) as begin delete from art_asset_tree where appearance_id=p_appearance_id; end; procedure add_tree_node(p_appearance_id number, p_item_id number, p_entry_index number, p_exit_index number, p_parent_entry number) as begin insert into art_asset_tree (appearance_id,parent_entry,entry_index,exit_index,item_id) values (p_appearance_id, p_parent_entry, p_entry_index, p_exit_index, p_item_id); end; procedure set_appearance_property(p_appearance_id number, p_name varchar2, p_value varchar2) as begin update appearance_properties set property_value=p_value where appearance_id = p_appearance_id and property_name = p_name; if sql%rowcount = 0 then insert into appearance_properties (appearance_id, property_name, property_value) values (p_appearance_id, p_name, p_value); end if; end; procedure update_appearance(p_appearance_id number, p_author varchar2) as begin update appearances set author=p_author, exported_date = sysdate where id = p_appearance_id; end; procedure update_appearance2(p_appearance_id number, p_author varchar2, p_status number) as begin update appearances set author=p_author, status_id=p_status, exported_date = sysdate where id = p_appearance_id; end; end; /