forked from bartvdbraak/blender
Logic Editor: removing usercount for existent datablocks
Using custom setfuncs to avoid increase/decrease of usercount. That way nothing stops you from removing a material that is used by a sensor, or a mesh, an action ... (this is how 2.49 works too) * also some general code cleaning/fix (adding static casts, replacing libaddr_us by lib_addr for dome text (I had no idea how user count worked back then)
This commit is contained in:
parent
0db16ff434
commit
8872cba7e9
@ -4213,8 +4213,7 @@ static void lib_link_scene(FileData *fd, Main *main)
|
||||
srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override);
|
||||
}
|
||||
/*Game Settings: Dome Warp Text*/
|
||||
// sce->r.dometext= newlibadr_us(fd, sce->id.lib, sce->r.dometext); // XXX deprecated since 2.5
|
||||
sce->gm.dome.warptext= newlibadr_us(fd, sce->id.lib, sce->gm.dome.warptext);
|
||||
sce->gm.dome.warptext= newlibadr(fd, sce->id.lib, sce->gm.dome.warptext);
|
||||
|
||||
sce->id.flag -= LIB_NEEDLINK;
|
||||
}
|
||||
|
@ -422,6 +422,23 @@ static void rna_Actuator_Armature_update(Main *bmain, Scene *scene, PointerRNA *
|
||||
constraint[0] = 0;
|
||||
}
|
||||
|
||||
/* note: the following set functions exists only to avoid id refcounting */
|
||||
static void rna_Actuator_editobject_mesh_set(PointerRNA *ptr, PointerRNA value)
|
||||
{
|
||||
bActuator *act = (bActuator *)ptr->data;
|
||||
bEditObjectActuator *eoa = (bEditObjectActuator *) act->data;
|
||||
|
||||
eoa->me = value.data;
|
||||
}
|
||||
|
||||
static void rna_Actuator_action_action_set(PointerRNA *ptr, PointerRNA value)
|
||||
{
|
||||
bActuator *act = (bActuator *)ptr->data;
|
||||
bActionActuator *aa = (bActionActuator *) act->data;
|
||||
|
||||
aa->me = value.data;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void rna_def_actuator(BlenderRNA *brna)
|
||||
@ -481,6 +498,8 @@ static void rna_def_action_actuator(BlenderRNA *brna)
|
||||
RNA_def_property_struct_type(prop, "Action");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Action", "");
|
||||
/* note: custom set function is ONLY to avoid rna setting a user for this. */
|
||||
RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL);
|
||||
RNA_def_property_update(prop, NC_LOGIC, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "continue_last_frame", PROP_BOOLEAN, PROP_NONE);
|
||||
@ -1222,6 +1241,8 @@ static void rna_def_edit_object_actuator(BlenderRNA *brna)
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "me");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Mesh", "Replace the existing, when left blank 'Phys' will remake the existing physics mesh");
|
||||
/* note: custom set function is ONLY to avoid rna setting a user for this. */
|
||||
RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_editobject_mesh_set", NULL);
|
||||
RNA_def_property_update(prop, NC_LOGIC, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "time", PROP_INT, PROP_NONE);
|
||||
@ -1688,6 +1709,8 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
|
||||
RNA_def_property_struct_type(prop, "Action");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Action", "");
|
||||
/* note: custom set function is ONLY to avoid rna setting a user for this. */
|
||||
RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL);
|
||||
RNA_def_property_update(prop, NC_LOGIC, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "continue_last_frame", PROP_BOOLEAN, PROP_NONE);
|
||||
|
@ -152,7 +152,7 @@ EnumPropertyItem *rna_Sensor_type_itemf(bContext *C, PointerRNA *ptr, int *free)
|
||||
static void rna_Sensor_keyboard_key_set(struct PointerRNA *ptr, int value)
|
||||
{
|
||||
bSensor *sens= (bSensor *)ptr->data;
|
||||
bKeyboardSensor *ks = sens->data;
|
||||
bKeyboardSensor *ks = (bKeyboardSensor *)sens->data;
|
||||
|
||||
if (ISKEYBOARD(value))
|
||||
ks->key = value;
|
||||
@ -161,7 +161,7 @@ static void rna_Sensor_keyboard_key_set(struct PointerRNA *ptr, int value)
|
||||
static void rna_Sensor_keyboard_modifier_set(struct PointerRNA *ptr, int value)
|
||||
{
|
||||
bSensor *sens= (bSensor *)ptr->data;
|
||||
bKeyboardSensor *ks = sens->data;
|
||||
bKeyboardSensor *ks = (bKeyboardSensor *)sens->data;
|
||||
|
||||
if (ISKEYBOARD(value))
|
||||
ks->qual = value;
|
||||
@ -170,7 +170,7 @@ static void rna_Sensor_keyboard_modifier_set(struct PointerRNA *ptr, int value)
|
||||
static void rna_Sensor_keyboard_modifier2_set(struct PointerRNA *ptr, int value)
|
||||
{
|
||||
bSensor *sens= (bSensor *)ptr->data;
|
||||
bKeyboardSensor *ks = sens->data;
|
||||
bKeyboardSensor *ks = (bKeyboardSensor *)sens->data;
|
||||
|
||||
if (ISKEYBOARD(value))
|
||||
ks->qual2 = value;
|
||||
@ -228,6 +228,14 @@ static void rna_Sensor_Armature_update(Main *bmain, Scene *scene, PointerRNA *pt
|
||||
constraint[0] = 0;
|
||||
}
|
||||
|
||||
/* note: the following set functions exists only to avoid id refcounting */
|
||||
static void rna_Sensor_touch_material_set(PointerRNA *ptr, PointerRNA value)
|
||||
{
|
||||
bSensor *sens = (bSensor *)ptr->data;
|
||||
bTouchSensor *ts = (bTouchSensor *) sens->data;
|
||||
|
||||
ts->ma = value.data;
|
||||
}
|
||||
#else
|
||||
|
||||
static void rna_def_sensor(BlenderRNA *brna)
|
||||
@ -365,6 +373,8 @@ static void rna_def_touch_sensor(BlenderRNA *brna)
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "ma");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "Material", "Only look for objects with this material");
|
||||
/* note: custom set function is ONLY to avoid rna setting a user for this. */
|
||||
RNA_def_property_pointer_funcs(prop, NULL, "rna_Sensor_touch_material_set", NULL);
|
||||
RNA_def_property_update(prop, NC_LOGIC, NULL);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user