diff --git a/doc/includes/references.h b/doc/includes/references.h index af3b7481..6483a62e 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -1179,7 +1179,7 @@ struct mjpPlugin_ { void (*copy)(mjData* dest, const mjModel* m, const mjData* src, int instance); // called when an mjData is being reset (required) - void (*reset)(const mjModel* m, mjData* d, int instance); + void (*reset)(const mjModel* m, double* plugin_state, void* plugin_data, int instance); // called when the plugin needs to update its outputs (required) void (*compute)(const mjModel* m, mjData* d, int instance, int capability_bit); diff --git a/include/mujoco/mjplugin.h b/include/mujoco/mjplugin.h index f6c8a3fd..8f9ade3b 100644 --- a/include/mujoco/mjplugin.h +++ b/include/mujoco/mjplugin.h @@ -52,7 +52,7 @@ struct mjpPlugin_ { void (*copy)(mjData* dest, const mjModel* m, const mjData* src, int instance); // called when an mjData is being reset (required) - void (*reset)(const mjModel* m, mjData* d, int instance); + void (*reset)(const mjModel* m, double* plugin_state, void* plugin_data, int instance); // called when the plugin needs to update its outputs (required) void (*compute)(const mjModel* m, mjData* d, int instance, int capability_bit); diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index cb7d61c6..38307b54 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -1149,7 +1149,8 @@ static void _resetData(const mjModel* m, mjData* d, unsigned char debug_value) { d->plugin[i] = m->plugin[i]; const mjpPlugin* plugin = mjp_getPluginAtSlot(m->plugin[i]); if (plugin->reset) { - plugin->reset(m, d, i); + plugin->reset(m, &d->plugin_state[m->plugin_stateadr[i]], + (void*)(d->plugin_data[i]), i); } } } diff --git a/test/engine/engine_plugin_test.cc b/test/engine/engine_plugin_test.cc index 0f48da76..76bebe44 100644 --- a/test/engine/engine_plugin_test.cc +++ b/test/engine/engine_plugin_test.cc @@ -224,8 +224,9 @@ int RegisterSensorPlugin() { TestSensor::DestroyCount()++; }; - plugin.reset = +[](const mjModel* m, mjData* d, int instance) { - auto sensor = reinterpret_cast(d->plugin_data[instance]); + plugin.reset = +[](const mjModel* m, double* plugin_state, void* plugin_data, + int instance) { + auto sensor = reinterpret_cast(plugin_data); sensor->Reset(); }; plugin.compute = +[](const mjModel* m, mjData* d, int instance, int type) { @@ -266,8 +267,9 @@ int RegisterActuatorPlugin() { TestActuator::DestroyCount()++; }; - plugin.reset = +[](const mjModel* m, mjData* d, int instance) { - auto actuator = reinterpret_cast(d->plugin_data[instance]); + plugin.reset = +[](const mjModel* m, double* plugin_state, void* plugin_data, + int instance) { + auto actuator = reinterpret_cast(plugin_data); actuator->Reset(); }; plugin.compute = +[](const mjModel* m, mjData* d, int instance, int type) { @@ -306,8 +308,9 @@ int RegisterPassivePlugin() { d->plugin_data[instance] = 0; }; - plugin.reset = +[](const mjModel* m, mjData* d, int instance) { - auto passive = reinterpret_cast(d->plugin_data[instance]); + plugin.reset = +[](const mjModel* m, double* plugin_state, void* plugin_data, + int instance) { + auto passive = reinterpret_cast(plugin_data); passive->Reset(); }; plugin.compute = +[](const mjModel* m, mjData* d, int instance, int type) {