paint: add script_object_duplicate
This commit is contained in:
@@ -136,7 +136,7 @@ void tab_timeline_reset();
|
||||
void tab_timeline_prepare_save();
|
||||
void tab_timeline_finish_save();
|
||||
void tab_timeline_play();
|
||||
void tab_timeline_player_update();
|
||||
void tab_timeline_update();
|
||||
void tab_timeline_edit_script(i32 row, i32 frame);
|
||||
void tab_console_draw(ui_handle_t *htab);
|
||||
void tab_textures_draw(ui_handle_t *htab);
|
||||
@@ -453,6 +453,7 @@ config_t *script_get_config();
|
||||
project_t *script_get_project();
|
||||
object_t *script_get_object(char *s);
|
||||
object_t *script_shape_add(char *name);
|
||||
object_t *script_object_duplicate(object_t *o);
|
||||
void script_physics_set_shape(object_t *o, i32 shape);
|
||||
void script_physics_set_mass(object_t *o, f32 mass);
|
||||
void script_physics_apply_impulse(object_t *o, f32 x, f32 y, f32 z);
|
||||
@@ -524,6 +525,7 @@ void sim_update();
|
||||
void sim_play();
|
||||
void sim_stop();
|
||||
void sim_add_body(object_t *o, asim_shape_t shape, f32 mass);
|
||||
mesh_object_t *sim_duplicate_object(mesh_object_t *so);
|
||||
void sim_duplicate();
|
||||
void sim_delete();
|
||||
ui_node_link_t *parser_material_get_input_link(ui_node_socket_t *inp);
|
||||
|
||||
@@ -1232,6 +1232,7 @@ void minic_register_builtins() {
|
||||
R(script_get_project, "p()");
|
||||
R(script_get_object, "p(p s)");
|
||||
R(script_shape_add, "p(p name)");
|
||||
R(script_object_duplicate, "p(p o)");
|
||||
R(script_physics_set_shape, "v(p o,i shape)");
|
||||
R(script_physics_set_mass, "v(p o,f mass)");
|
||||
R(script_physics_apply_impulse, "v(p o,f x,f y,f z)");
|
||||
|
||||
@@ -619,6 +619,22 @@ object_t *script_shape_add(char *name) {
|
||||
return mo->base;
|
||||
}
|
||||
|
||||
object_t *script_object_duplicate(object_t *o) {
|
||||
if (o == NULL || !string_equals(o->ext_type, "mesh_object_t")) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gpu_texture_t *current;
|
||||
bool in_use;
|
||||
script_gpu_begin(¤t, &in_use);
|
||||
mesh_object_t *dup = sim_duplicate_object(o->ext);
|
||||
script_gpu_end(current, in_use);
|
||||
|
||||
g_context->ddirty = 2;
|
||||
ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2;
|
||||
return dup->base;
|
||||
}
|
||||
|
||||
static asim_body_t *script_physics_body(object_t *o) {
|
||||
return o != NULL && o->_ != NULL ? o->_->body : NULL;
|
||||
}
|
||||
|
||||
+8
-3
@@ -78,11 +78,10 @@ void sim_add_body(object_t *o, asim_shape_t shape, f32 mass) {
|
||||
asim_body_create(o, shape, mass);
|
||||
}
|
||||
|
||||
void sim_duplicate() {
|
||||
mesh_object_t *sim_duplicate_object(mesh_object_t *so) {
|
||||
// Mesh
|
||||
mesh_object_t *so = g_context->paint_object;
|
||||
if (so == NULL) {
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mesh_data_t *data = util_mesh_data_duplicate(so->data);
|
||||
@@ -112,6 +111,12 @@ void sim_duplicate() {
|
||||
if (pb != NULL) {
|
||||
asim_body_create(dup->base, pb->shape, pb->mass);
|
||||
}
|
||||
|
||||
return dup;
|
||||
}
|
||||
|
||||
void sim_duplicate() {
|
||||
sim_duplicate_object(g_context->paint_object);
|
||||
}
|
||||
|
||||
void sim_delete() {
|
||||
|
||||
Reference in New Issue
Block a user