paint: add script_object_duplicate

This commit is contained in:
luboslenco
2026-08-11 14:52:06 +02:00
parent ab69127efb
commit 1e1ff42188
4 changed files with 28 additions and 4 deletions
+3 -1
View File
@@ -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);
+1
View File
@@ -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)");
+16
View File
@@ -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(&current, &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
View File
@@ -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() {