BGE Logics UI: commit to receive some feedback from Matt

To test use debug mode > 0 (Ctrl+Alt+D)

* primarly the goal is to put all the bricks there, and then to worry about the proper layout
* sensor header added (need to be more compressed). Also checkbox will not work that well here in my opinion.
we need to see what can be used instead (icons?)
* sensors, and actuators in alphabetical order
* a lot of sensors using the rna (//XXXSENSOR in the ones not using it)

* the logic_window.c code for controller and actuator is there only to display the draw functions for controller and actuators. But the code it's a really bad copy of the sensor code, so it will be fixed later (Matt? :)

* I would love if the non-expanded mode were more compact, more like in 2.49 (the name non-editable).
but this is the kind of think we can worry in the end.
Also instead of "move up/move down" it would be nice to drag/drop the sensors/controllers/actuators

* to do: rna_actuators: to rename type to mode for the enum
This commit is contained in:
Dalai Felinto 2010-05-04 00:06:13 +00:00
parent e09c47a0da
commit 44c0f38e6c
9 changed files with 927 additions and 76 deletions

View File

@ -30,6 +30,8 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_sensor_types.h"
#include "DNA_controller_types.h"
#include "DNA_actuator_types.h"
#include "BLI_blenlib.h"
@ -59,6 +61,22 @@ static int edit_sensor_poll(bContext *C)
return 1;
}
static int edit_controller_poll(bContext *C)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "controller", &RNA_Controller);
if (ptr.data && ((ID*)ptr.id.data)->lib) return 0;
return 1;
}
static int edit_actuator_poll(bContext *C)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "actuator", &RNA_Actuator);
if (ptr.data && ((ID*)ptr.id.data)->lib) return 0;
return 1;
}
/* this is the nice py-api-compatible way to do it, like modifiers,
but not entirely working yet..
@ -104,8 +122,95 @@ static bSensor *edit_sensor_property_get(bContext *C, wmOperator *op, Object *ob
return sens;
}
*/
/*
static void edit_controller_properties(wmOperatorType *ot)
{
RNA_def_string(ot->srna, "controller", "", 32, "Controller", "Name of the controller to edit");
RNA_def_string(ot->srna, "object", "", 32, "Object", "Name of the object the controller belongs to");
}
/* ************* Remove Sensor Operator ************* */
static int edit_controller_invoke_properties(bContext *C, wmOperator *op)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "controller", &RNA_Controller);
if (RNA_property_is_set(op->ptr, "controller") && RNA_property_is_set(op->ptr, "object") )
return 1;
if (ptr.data) {
bController *cont = ptr.data;
Object *ob = ptr.id.data;
RNA_string_set(op->ptr, "controller", cont->name);
RNA_string_set(op->ptr, "object", ob->id.name+2);
return 1;
}
return 0;
}
static bController *edit_controller_property_get(bContext *C, wmOperator *op, Object *ob)
{
char controller_name[32];
char ob_name[32];
bController *cont;
RNA_string_get(op->ptr, "controller", controller_name);
RNA_string_get(op->ptr, "object", ob_name);
ob = BLI_findstring(&(CTX_data_main(C)->object), ob_name, offsetof(ID, name) + 2);
if (!ob)
return NULL;
cont = BLI_findstring(&(ob->controllers), controller_name, offsetof(bController, name));
return cont;
}
*/
/*
static void edit_actuator_properties(wmOperatorType *ot)
{
RNA_def_string(ot->srna, "actuator", "", 32, "Actuator", "Name of the actuator to edit");
RNA_def_string(ot->srna, "object", "", 32, "Object", "Name of the object the actuator belongs to");
}
static int edit_actuator_invoke_properties(bContext *C, wmOperator *op)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "actuator", &RNA_Actuator);
if (RNA_property_is_set(op->ptr, "actuator") && RNA_property_is_set(op->ptr, "object") )
return 1;
if (ptr.data) {
bActuator *act = ptr.data;
Object *ob = ptr.id.data;
RNA_string_set(op->ptr, "actuator",act->name);
RNA_string_set(op->ptr, "object", ob->id.name+2);
return 1;
}
return 0;
}
static bController *edit_actuator_property_get(bContext *C, wmOperator *op, Object *ob)
{
char actuator_name[32];
char ob_name[32];
bActuator *act;
RNA_string_get(op->ptr, "actuator", actuator_name);
RNA_string_get(op->ptr, "object", ob_name);
ob = BLI_findstring(&(CTX_data_main(C)->object), ob_name, offsetof(ID, name) + 2);
if (!ob)
return NULL;
cont = BLI_findstring(&(ob->actuators), actuator_name, offsetof(bActuator, name));
return act;
}
/* ************* Add/Remove Sensor Operator ************* */
static int sensor_remove_exec(bContext *C, wmOperator *op)
{
@ -189,8 +294,180 @@ void LOGIC_OT_sensor_add(wmOperatorType *ot)
prop= RNA_def_enum(ot->srna, "type", sensor_type_items, SENS_ALWAYS, "Type", "Type of sensor to add");
}
/* ************* Add/Remove Controller Operator ************* */
static int controller_remove_exec(bContext *C, wmOperator *op)
{
/* Object *ob;
bController *cont = edit_controller_property_get(C, op, ob); */
PointerRNA ptr = CTX_data_pointer_get_type(C, "controller", &RNA_Controller);
Object *ob= ptr.id.data;
bController *cont= ptr.data;
if (!cont)
return OPERATOR_CANCELLED;
BLI_remlink(&(ob->controllers), cont);
free_controller(cont);
WM_event_add_notifier(C, NC_LOGIC, NULL);
return OPERATOR_FINISHED;
}
/* commented along with above stuff
static int controller_remove_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
if (edit_controller_invoke_properties(C, op))
return controller_remove_exec(C, op);
else
return OPERATOR_CANCELLED;
}
*/
void LOGIC_OT_controller_remove(wmOperatorType *ot)
{
ot->name= "Remove Controller";
ot->description= "Remove a controller from the active object";
ot->idname= "LOGIC_OT_controller_remove";
//ot->invoke= controller_remove_invoke;
ot->exec= controller_remove_exec;
ot->poll= edit_controller_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
//edit_controller_properties(ot);
}
static int controller_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
bController *cont;
int type= RNA_enum_get(op->ptr, "type");
cont= new_controller(type);
BLI_addtail(&(ob->controllers), cont);
make_unique_prop_names(C, cont->name);
ob->scaflag |= OB_SHOWCONT;
WM_event_add_notifier(C, NC_LOGIC, NULL);
return OPERATOR_FINISHED;
}
void LOGIC_OT_controller_add(wmOperatorType *ot)
{
PropertyRNA *prop;
/* identifiers */
ot->name= "Add Controller";
ot->description = "Add a controller to the active object";
ot->idname= "LOGIC_OT_controller_add";
/* api callbacks */
ot->invoke= WM_menu_invoke;
ot->exec= controller_add_exec;
ot->poll= ED_operator_object_active_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
prop= RNA_def_enum(ot->srna, "type", controller_type_items, CONT_LOGIC_AND, "Type", "Type of controller to add");
}
/* ************* Add/Remove Actuator Operator ************* */
static int actuator_remove_exec(bContext *C, wmOperator *op)
{
/* Object *ob;
bActuator *cont = edit_actuator_property_get(C, op, ob); */
PointerRNA ptr = CTX_data_pointer_get_type(C, "actuator", &RNA_Actuator);
Object *ob= ptr.id.data;
bActuator *act= ptr.data;
if (!act)
return OPERATOR_CANCELLED;
BLI_remlink(&(ob->actuators), act);
free_actuator(act);
WM_event_add_notifier(C, NC_LOGIC, NULL);
return OPERATOR_FINISHED;
}
/* commented along with above stuff
static int actuator_remove_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
if (edit_actuator_invoke_properties(C, op))
return actuator_remove_exec(C, op);
else
return OPERATOR_CANCELLED;
}
*/
void LOGIC_OT_actuator_remove(wmOperatorType *ot)
{
ot->name= "Remove Actuator";
ot->description= "Remove a actuator from the active object";
ot->idname= "LOGIC_OT_actuator_remove";
//ot->invoke= actuator_remove_invoke;
ot->exec= actuator_remove_exec;
ot->poll= edit_actuator_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
//edit_controller_properties(ot);
}
static int actuator_add_exec(bContext *C, wmOperator *op)
{
Object *ob = ED_object_active_context(C);
bActuator *act;
int type= RNA_enum_get(op->ptr, "type");
act= new_actuator(type);
BLI_addtail(&(ob->actuators), act);
make_unique_prop_names(C, act->name);
ob->scaflag |= OB_SHOWCONT;
WM_event_add_notifier(C, NC_LOGIC, NULL);
return OPERATOR_FINISHED;
}
void LOGIC_OT_actuator_add(wmOperatorType *ot)
{
PropertyRNA *prop;
/* identifiers */
ot->name= "Add Actuator";
ot->description = "Add a actuator to the active object";
ot->idname= "LOGIC_OT_actuator_add";
/* api callbacks */
ot->invoke= WM_menu_invoke;
ot->exec= actuator_add_exec;
ot->poll= ED_operator_object_active_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
prop= RNA_def_enum(ot->srna, "type", actuator_type_items, CONT_LOGIC_AND, "Type", "Type of actuator to add");
}
void ED_operatortypes_logic(void)
{
WM_operatortype_append(LOGIC_OT_sensor_remove);
WM_operatortype_append(LOGIC_OT_sensor_add);
WM_operatortype_append(LOGIC_OT_controller_remove);
WM_operatortype_append(LOGIC_OT_controller_add);
WM_operatortype_append(LOGIC_OT_actuator_remove);
WM_operatortype_append(LOGIC_OT_actuator_add);
}

View File

@ -3170,6 +3170,8 @@ static int is_sensor_linked(uiBlock *block, bSensor *sens)
/* never used, see CVS 1.120 for the code */
/* static uiBlock *freecamera_menu(void) */
/* Sensors code */
static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box, *row;
@ -3183,17 +3185,154 @@ static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr)
uiItemO(row, "", ICON_X, "LOGIC_OT_sensor_remove");
}
static void draw_sensor_touch(uiLayout *layout, PointerRNA *ptr)
static void draw_sensor_internal_header(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "material", 0, NULL, 0);
uiLayout *box, *row;
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
if (!RNA_boolean_get(ptr, "expanded"))
return;
row= uiLayoutRow(box, 0);
uiItemR(row, ptr, "pulse_true_level", 0, "", ICON_DOTSUP);
uiItemR(row, ptr, "pulse_false_level", 0, "", ICON_DOTSDOWN);
uiItemR(row, ptr, "frequency", 0, "", 0);
uiItemR(row, ptr, "level", 0, "", 0);
uiItemR(row, ptr, "tap", 0, "", 0);
uiItemR(row, ptr, "invert", 0, "", 0);
}
/* sensors in alphabetical order */
static void draw_sensor_actuator(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "actuator", 0, NULL, 0);
}
static void draw_sensor_armature(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "armature_type", 0, NULL, 0);
uiItemR(layout, ptr, "channel_name", 0, NULL, 0);
uiItemR(layout, ptr, "constraint_name", 0, NULL, 0);
uiItemR(layout, ptr, "value", 0, NULL, 0);
}
static void draw_sensor_collision(uiLayout *layout, PointerRNA *ptr)
{
//XXXSENSOR
/* // need to solve problems in rna_sensor.c
uiItemR(layout, ptr, "pulse", 0, NULL, 0);
uiItemR(layout, ptr, "collision_type", 0, NULL, 0);
switch (RNA_enum_get(ptr, "collision_type")) {
case SENS_COLLISION_PROPERTY:
uiItemR(layout, ptr, "property", 0, NULL, 0);
break;
case SENS_COLLISION_MATERIAL:
uiItemR(layout, ptr, "material", 0, NULL, 0);
break;
}
*/
}
static void draw_sensor_delay(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "delay", 0, NULL, 0);
uiItemR(layout, ptr, "duration", 0, NULL, 0);
uiItemR(layout, ptr, "repeat", 0, NULL, 0);
uiLayout *row;
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "delay", 0, NULL, 0);
uiItemR(row, ptr, "duration", 0, NULL, 0);
uiItemR(row, ptr, "repeat", 0, NULL, 0);
}
static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
{
//XXXSENSOR
}
static void draw_sensor_keyboard(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "key", 0, NULL, 0);
uiItemR(layout, ptr, "all_keys", 0, NULL, 0);
uiItemR(layout, ptr, "modifier_key", 0, NULL, 0);
uiItemR(layout, ptr, "second_modifier_key", 0, NULL, 0);
uiItemR(layout, ptr, "target", 0, NULL, 0);
uiItemR(layout, ptr, "log", 0, NULL, 0);
//XXXSENSOR
}
static void draw_sensor_message(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "subject", 0, NULL, 0);
}
static void draw_sensor_mouse(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "mouse_event", 0, NULL, 0);
}
static void draw_sensor_near(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *row;
uiItemR(layout, ptr, "property", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "distance", 0, NULL, 0);
uiItemR(row, ptr, "reset_distance", 0, NULL, 0);
}
static void draw_sensor_property(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *row;
uiItemR(layout, ptr, "evaluation_type", 0, NULL, 0);
uiItemR(layout, ptr, "property", 0, NULL, 0);
switch (RNA_enum_get(ptr, "evaluation_type")) {
case SENS_PROP_INTERVAL:
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "min_value", 0, NULL, 0);
uiItemR(row, ptr, "max_value", 0, NULL, 0);
break;
case SENS_PROP_EQUAL:
uiItemR(layout, ptr, "value", 0, NULL, 0);
break;
case SENS_PROP_NEQUAL:
uiItemR(layout, ptr, "value", 0, NULL, 0);
break;
case SENS_PROP_CHANGED:
break;
}
}
static void draw_sensor_radar(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *row;
uiItemR(layout, ptr, "property", 0, NULL, 0);
uiItemR(layout, ptr, "axis", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemR(layout, ptr, "angle", 0, NULL, 0);
uiItemR(layout, ptr, "distance", 0, NULL, 0);
}
static void draw_sensor_random(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "seed", 0, NULL, 0);
}
static void draw_sensor_ray(uiLayout *layout, PointerRNA *ptr)
{
//XXXSENSOR
}
static void draw_sensor_touch(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "material", 0, NULL, 0);
}
void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr)
@ -3204,15 +3343,175 @@ void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr)
return;
box = uiLayoutBox(layout);
draw_sensor_internal_header(box, ptr);
switch (RNA_enum_get(ptr, "type")) {
case SENS_ACTUATOR:
draw_sensor_actuator(box, ptr);
break;
case SENS_ALWAYS:
break;
case SENS_ARMATURE:
draw_sensor_armature(box, ptr);
break;
case SENS_COLLISION:
draw_sensor_collision(box, ptr);
break;
case SENS_DELAY:
draw_sensor_delay(box, ptr);
break;
case SENS_JOYSTICK:
draw_sensor_joystick(box, ptr);
break;
case SENS_KEYBOARD:
draw_sensor_keyboard(box, ptr);
break;
case SENS_MESSAGE:
draw_sensor_message(box, ptr);
break;
case SENS_MOUSE:
draw_sensor_mouse(box, ptr);
break;
case SENS_NEAR:
draw_sensor_near(box, ptr);
break;
case SENS_PROPERTY:
draw_sensor_property(box, ptr);
break;
case SENS_RADAR:
draw_sensor_radar(box, ptr);
break;
case SENS_RANDOM:
draw_sensor_random(box, ptr);
break;
case SENS_RAY:
draw_sensor_ray(box, ptr);
break;
case SENS_TOUCH:
draw_sensor_touch(box, ptr);
break;
case SENS_DELAY:
draw_sensor_delay(box, ptr);
}
}
/* Controller code */
static void draw_controller_header(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box, *row;
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
uiItemR(row, ptr, "priority", 0, "", 0);
uiItemO(row, "", ICON_X, "LOGIC_OT_controller_remove");
}
static void draw_controller_expression(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "expression", 0, NULL, 0);
}
static void draw_controller_python(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *row;
uiItemR(layout, ptr, "mode", 0, NULL, 0);
if (RNA_enum_get(ptr, "mode") == CONT_PY_SCRIPT) {
uiItemR(layout, ptr, "text", 0, NULL, 0);
}
else {
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "module", 0, NULL, 0);
uiItemR(row, ptr, "debug", 0, NULL, 0);
}
}
static void draw_controller_state(uiLayout *layout, PointerRNA *ptr)
{
}
void draw_brick_controller(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box;
if (!RNA_boolean_get(ptr, "expanded"))
return;
box = uiLayoutBox(layout);
draw_controller_state(box, ptr);
switch (RNA_enum_get(ptr, "type")) {
case CONT_LOGIC_AND:
break;
case CONT_LOGIC_OR:
break;
case CONT_EXPRESSION:
draw_controller_expression(box, ptr);
break;
case CONT_PYTHON:
draw_controller_python(box, ptr);
break;
case CONT_LOGIC_NAND:
break;
case CONT_LOGIC_NOR:
break;
case CONT_LOGIC_XOR:
break;
case CONT_LOGIC_XNOR:
break;
}
}
/* Actuator code */
static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box, *row;
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
uiItemO(row, "", ICON_X, "LOGIC_OT_actuator_remove");
}
static void draw_actuator_scene(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "mode", 0, NULL, 0);
uiItemR(layout, ptr, "camera", 0, NULL, 0);
uiItemR(layout, ptr, "scene", 0, NULL, 0);
}
static void draw_actuator_parent(uiLayout *layout, PointerRNA *ptr)
{
uiItemR(layout, ptr, "mode", 0, NULL, 0);
uiItemR(layout, ptr, "object", 0, NULL, 0);
uiItemR(layout, ptr, "compound", 0, NULL, 0);
uiItemR(layout, ptr, "ghost", 0, NULL, 0);
}
void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box;
if (!RNA_boolean_get(ptr, "expanded"))
return;
box = uiLayoutBox(layout);
switch (RNA_enum_get(ptr, "type")) {
case ACT_PARENT:
draw_actuator_parent(box, ptr);
break;
case ACT_SCENE:
draw_actuator_scene(box, ptr);
break;
}
}
@ -3269,6 +3568,112 @@ void logic_buttons(bContext *C, ARegion *ar)
/* ******************************* */
xco= 400; yco= 170; width= 300;
if (G.rt >0) { // new UI code to replace old one
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
row = uiLayoutRow(layout, 1);
uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco, 70, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
uiItemR(row, &logic_ptr, "controllers_show_selected_objects", 0, "Sel", 0);
uiItemR(row, &logic_ptr, "controllers_show_active_objects", 0, "Act", 0);
uiItemR(row, &logic_ptr, "controllers_show_linked_controller", 0, "Link", 0);
/* State part - ugly */
if(ob->scaflag & OB_SHOWCONT) {
unsigned int controller_state_mask = 0; /* store a bitmask for states that are used */
/* first show the state */
uiDefBlockBut(block, object_state_mask_menu, ob, "State", (short)(xco-10), (short)(yco-10), 36, UI_UNIT_Y, "Object state menu: store and retrieve initial state");
if (!ob->state)
ob->state = 1;
for (offset=0; offset<15; offset+=5) {
uiBlockBeginAlign(block);
for (stbit=0; stbit<5; stbit++) {
but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset), stbit+offset, "", (short)(xco+31+12*stbit+13*offset), yco, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset)));
uiButSetFunc(but, check_state_mask, but, &(ob->state));
}
for (stbit=0; stbit<5; stbit++) {
but = uiDefButBitI(block, controller_state_mask&(1<<(stbit+offset+15)) ? BUT_TOGDUAL:TOG, 1<<(stbit+offset+15), stbit+offset+15, "", (short)(xco+31+12*stbit+13*offset), yco-12, 12, 12, (int *)&(ob->state), 0, 0, 0, 0, get_state_name(ob, (short)(stbit+offset+15)));
uiButSetFunc(but, check_state_mask, but, &(ob->state));
}
}
uiBlockBeginAlign(block);
uiDefButBitS(block, TOG, OB_SETSTBIT, B_SET_STATE_BIT, "All",(short)(xco+226), yco-10, 22, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Set all state bits");
uiDefButBitS(block, TOG, OB_INITSTBIT, B_INIT_STATE_BIT, "Ini",(short)(xco+248), yco-10, 22, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Set the initial state");
uiDefButBitS(block, TOG, OB_DEBUGSTATE, 0, "D",(short)(xco+270), yco-10, 15, UI_UNIT_Y, &ob->scaflag, 0, 0, 0, 0, "Print state debug info");
uiBlockEndAlign(block);
yco-=35;
/* display only the controllers that match the current state */
offset = 0;
for (stbit=0; stbit<32; stbit++) {
if (!(ob->state & (1<<stbit)))
continue;
/* add a separation between controllers of different states */
if (offset) {
offset = 0;
yco -= 6;
}
//draw controller
}
}
// cont= ob->controllers.first;
/* draw individual controllers*/
row = uiLayoutRow(layout, 1);
uiDefButBitS(block, TOG, OB_SHOWCONT, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide controllers");
uiItemMenuEnumO(row, "LOGIC_OT_controller_add", "type", "Add Controller", 0);
for(a=0; a<count; a++) {
PointerRNA ptr;
uiLayout *split, *col;
ob= (Object *)idar[a];
if (!(ob->scavisflag & OB_VIS_CONT) || !(ob->scaflag & OB_SHOWCONT)) continue;
uiItemS(layout);
for(cont= ob->controllers.first; cont; cont=cont->next) {
RNA_pointer_create(&ob->id, &RNA_Controller, cont, &ptr);
// if (!(cont->state_mask & (1<<stbit)))
// continue;
/* this controller is visible, mark all its actuator */
for (iact=0; iact<cont->totlinks; iact++) {
act = cont->links[iact];
if (act)
act->flag |= ACT_VISIBLE;
}
split = uiLayoutSplit(layout, 0.95, 0);
col = uiLayoutColumn(split, 1);
uiLayoutSetContextPointer(col, "controller", &ptr);
/* should make UI template for controller header.. function will do for now */
draw_controller_header(col, &ptr);
/* draw the brick contents */
draw_brick_controller(col, &ptr);
/* put link button to the right */
col = uiLayoutColumn(split, 0);
/* use oldskool uiButtons for links for now */
but= uiDefIconBut(block, LINK, 0, ICON_LINK, (short)(xco+width+UI_UNIT_X), yco, UI_UNIT_X, UI_UNIT_Y, NULL, 0, 0, 0, 0, "");
uiSetButLink(but, NULL, (void ***)&(cont->links), &cont->totlinks, LINK_CONTROLLER, LINK_ACTUATOR);
}
}
uiBlockLayoutResolve(block, NULL, &yco); /* stores final height in yco */
} else { //G.rt == 0 // to be removed ... old code
uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco+35, 100, UI_UNIT_Y, "");
uiBlockBeginAlign(block);
@ -3405,12 +3810,12 @@ void logic_buttons(bContext *C, ARegion *ar)
yco-= 6;
}
}
/* ******************************* */
xco= 10; yco= 205; width= 320;
} //XXX endif G.rt == 0 // new UI code to replace old one
#if 0
/* ******************************* */
xco= 10; yco= 170; width= 300;
if (G.rt >0) { //XXX new UI code to replace old one
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
row = uiLayoutRow(layout, 1);
@ -3442,7 +3847,7 @@ void logic_buttons(bContext *C, ARegion *ar)
(sens->flag & SENS_PIN && slogic->scaflag & BUTS_SENS_STATE) || /* states can hide some sensors, pinned sensors ignore the visible state */
(is_sensor_linked(block, sens))
)
{
{ // gotta check if the current state is visible or not
uiLayout *split, *col;
split = uiLayoutSplit(layout, 0.95, 0);
@ -3464,9 +3869,8 @@ void logic_buttons(bContext *C, ARegion *ar)
}
}
uiBlockLayoutResolve(block, NULL, &yco); /* stores final height in yco */
#endif
} else { //XXX G.rt == 0 { // to be removed == new UI code to replace old one
#if 1
uiDefBlockBut(block, sensor_menu, NULL, "Sensors", xco-10, yco+35, 70, UI_UNIT_Y, "");
uiBlockBeginAlign(block);
@ -3548,12 +3952,71 @@ void logic_buttons(bContext *C, ARegion *ar)
yco-= 6;
}
}
#endif
} //XXX endif G.rt == 0 // new UI code to replace old one
/* ******************************* */
xco= 800; yco= 170; width= 300;
if (G.rt >0) { //XXX new UI code to replace old one
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, xco, yco, width, 20, U.uistyles.first);
row = uiLayoutRow(layout, 1);
uiDefBlockBut(block, sensor_menu, NULL, "Actuators", xco-10, yco, 70, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
uiItemR(row, &logic_ptr, "actuators_show_selected_objects", 0, "Sel", 0);
uiItemR(row, &logic_ptr, "actuators_show_active_objects", 0, "Act", 0);
uiItemR(row, &logic_ptr, "actuators_show_linked_controller", 0, "Link", 0);
uiItemR(row, &logic_ptr, "actuators_show_active_states", 0, "State", 0);
row = uiLayoutRow(layout, 1);
uiDefButBitS(block, TOG, OB_SHOWACT, B_REDR, ob->id.name+2,(short)(xco-10), yco, (short)(width-30), UI_UNIT_Y, &ob->scaflag, 0, 31, 0, 0, "Object name, click to show/hide actuators");
uiItemMenuEnumO(row, "LOGIC_OT_actuator_add", "type", "Add Actuator", 0);
for(a=0; a<count; a++) {
PointerRNA ptr;
ob= (Object *)idar[a];
if (!(ob->scavisflag & OB_VIS_ACT) || !(ob->scaflag & OB_SHOWACT)) continue;
uiItemS(layout);
for(act= ob->actuators.first; act; act=act->next) {
RNA_pointer_create(&ob->id, &RNA_Actuator, act, &ptr);
if ((slogic->scaflag & BUTS_ACT_STATE) ||
!(act->flag & ACT_LINKED) || /* always display actuators without links so that is can be edited */
(act->flag & ACT_VISIBLE) || /* this actuator has visible connection, display it */
(act->flag & ACT_PIN && slogic->scaflag & BUTS_ACT_STATE) /* states can hide some sensors, pinned sensors ignore the visible state */
)
{ // gotta check if the current state is visible or not
uiLayout *split, *col;
split = uiLayoutSplit(layout, 0.95, 0);
col = uiLayoutColumn(split, 1);
uiLayoutSetContextPointer(col, "actuator", &ptr);
/* should make UI template for actuator header.. function will do for now */
draw_actuator_header(col, &ptr);
/* draw the brick contents */
draw_brick_actuator(col, &ptr);
/* put link button to the right */
col = uiLayoutColumn(split, 0);
/* use oldskool uiButtons for links for now */
uiDefIconBut(block, INLINK, 0, ICON_INLINK,(short)(xco-19), ycoo, UI_UNIT_X, UI_UNIT_Y, act, LINK_ACTUATOR, 0, 0, 0, "");
}
}
}
uiBlockLayoutResolve(block, NULL, &yco); /* stores final height in yco */
} else { //XXX G.rt == 0 { // to be removed == new UI code to replace old one
uiDefBlockBut(block, actuator_menu, NULL, "Actuators", xco-10, yco+35, 90, UI_UNIT_Y, "");
uiBlockBeginAlign(block);
@ -3632,6 +4095,8 @@ void logic_buttons(bContext *C, ARegion *ar)
}
}
} //XXX endif G.rt == 0 // new UI code to replace old one
uiComposeLinks(block);
uiEndBlock(C, block);

View File

@ -84,5 +84,9 @@ typedef struct bController {
/* pyctrl->flag */
#define CONT_PY_DEBUG 1
/* pyctrl->mode */
#define CONT_PY_SCRIPT 0
#define CONT_PY_MODULE 1
#endif

View File

@ -261,6 +261,7 @@ typedef struct bJoystickSensor {
* and have a proper default value for this thing.
* */
/* #define SENS_COLLISION_PROPERTY 0 */
#define SENS_COLLISION_PROPERTY 0 // uncommenting to use with RNA/UI. will check if it's working/fix it later - dfelinto
#define SENS_COLLISION_MATERIAL 1
#define SENS_COLLISION_PULSE 2
/* ray specific mode */

View File

@ -77,6 +77,10 @@ extern EnumPropertyItem object_type_curve_items[];
extern EnumPropertyItem sensor_type_items[];
extern EnumPropertyItem controller_type_items[];
extern EnumPropertyItem actuator_type_items[];
extern EnumPropertyItem space_type_items[];
extern EnumPropertyItem keymap_propvalue_items[];

View File

@ -33,8 +33,31 @@
#include "WM_types.h"
EnumPropertyItem actuator_type_items[] ={
{ACT_ACTION, "ACTION", 0, "Action", ""},
{ACT_ARMATURE, "ARMATURE", 0, "Armature", ""},
{ACT_CAMERA, "CAMERA", 0, "Camera", ""},
{ACT_CONSTRAINT, "CONSTRAINT", 0, "Constraint", ""},
{ACT_EDIT_OBJECT, "EDIT_OBJECT", 0, "Edit Object", ""},
{ACT_2DFILTER, "FILTER_2D", 0, "2D Filter", ""},
{ACT_GAME, "GAME", 0, "Game", ""},
{ACT_IPO, "IPO", 0, "IPO", ""},
{ACT_MESSAGE, "MESSAGE", 0, "Message", ""},
{ACT_OBJECT, "OBJECT", 0, "Motion", ""},
{ACT_PARENT, "PARENT", 0, "Parent", ""},
{ACT_PROPERTY, "PROPERTY", 0, "Property", ""},
{ACT_RANDOM, "RANDOM", 0, "Random", ""},
{ACT_SCENE, "SCENE", 0, "Scene", ""},
{ACT_SHAPEACTION, "SHAPE_ACTION", 0, "Shape Action", ""},
{ACT_SOUND, "SOUND", 0, "Sound", ""},
{ACT_STATE, "STATE", 0, "State", ""},
{ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
#include "BKE_sca.h"
static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
{
bActuator *actuator= (bActuator*)ptr->data;
@ -79,6 +102,13 @@ static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
}
}
static void rna_Actuator_type_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
bActuator *act= (bActuator *)ptr->data;
init_actuator(act);
}
#else
void rna_def_actuator(BlenderRNA *brna)
@ -86,27 +116,6 @@ void rna_def_actuator(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem actuator_type_items[] ={
{ACT_OBJECT, "OBJECT", 0, "Motion", ""},
{ACT_IPO, "IPO", 0, "IPO", ""},
{ACT_CAMERA, "CAMERA", 0, "Camera", ""},
{ACT_SOUND, "SOUND", 0, "Sound", ""},
{ACT_PROPERTY, "PROPERTY", 0, "Property", ""},
{ACT_CONSTRAINT, "CONSTRAINT", 0, "Constraint", ""},
{ACT_EDIT_OBJECT, "EDIT_OBJECT", 0, "Edit Object", ""},
{ACT_SCENE, "SCENE", 0, "Scene", ""},
{ACT_RANDOM, "RANDOM", 0, "Random", ""},
{ACT_MESSAGE, "MESSAGE", 0, "Message", ""},
{ACT_ACTION, "ACTION", 0, "Action", ""},
{ACT_GAME, "GAME", 0, "Game", ""},
{ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
{ACT_2DFILTER, "FILTER_2D", 0, "2D Filter", ""},
{ACT_PARENT, "PARENT", 0, "Parent", ""},
{ACT_SHAPEACTION, "SHAPE_ACTION", 0, "Shape Action", ""},
{ACT_STATE, "STATE", 0, "State", ""},
{ACT_ARMATURE, "ARMATURE", 0, "Armature", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "Actuator", NULL);
RNA_def_struct_ui_text(srna, "Actuator", "Actuator to apply actions in the game engine");
RNA_def_struct_sdna(srna, "bActuator");
@ -115,12 +124,18 @@ void rna_def_actuator(BlenderRNA *brna)
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "");
/* type is not editable, would need to do proper data free/alloc */
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_items(prop, actuator_type_items);
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, 0, "rna_Actuator_type_update");
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set actuator expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
}
static void rna_def_object_actuator(BlenderRNA *brna)
@ -688,7 +703,8 @@ static void rna_def_scene_actuator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Scene Actuator", "Actuator to ..");
RNA_def_struct_sdna_from(srna, "bSceneActuator", "data");
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Scene", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@ -1021,7 +1037,8 @@ static void rna_def_parent_actuator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Parent Actuator", "");
RNA_def_struct_sdna_from(srna, "bParentActuator", "data");
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Scene", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);

View File

@ -30,8 +30,21 @@
#include "DNA_controller_types.h"
EnumPropertyItem controller_type_items[] ={
{CONT_LOGIC_AND, "LOGIC_AND", 0, "And", "Logic And"},
{CONT_LOGIC_OR, "LOGIC_OR", 0, "Or", "Logic Or"},
{CONT_LOGIC_NAND, "LOGIC_NAND", 0, "Nand", "Logic Nand"},
{CONT_LOGIC_NOR, "LOGIC_NOR", 0, "Nor", "Logic Nor"},
{CONT_LOGIC_XOR, "LOGIC_XOR", 0, "Xor", "Logic Xor"},
{CONT_LOGIC_XNOR, "LOGIC_XNOR", 0, "Xnor", "Logic Xnor"},
{CONT_EXPRESSION, "EXPRESSION", 0, "Expression", ""},
{CONT_PYTHON, "PYTHON", 0, "Python Script", ""},
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
#include "BKE_sca.h"
static struct StructRNA* rna_Controller_refine(struct PointerRNA *ptr)
{
bController *controller= (bController*)ptr->data;
@ -58,21 +71,23 @@ static struct StructRNA* rna_Controller_refine(struct PointerRNA *ptr)
}
}
static void rna_Controller_type_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
bController *cont= (bController *)ptr->data;
init_controller(cont);
}
#else
void RNA_def_controller(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem controller_type_items[] ={
{CONT_LOGIC_AND, "LOGIC_AND", 0, "Logic And", ""},
{CONT_LOGIC_OR, "LOGIC_OR", 0, "Logic Or", ""},
{CONT_LOGIC_NAND, "LOGIC_NAND", 0, "Logic Nand", ""},
{CONT_LOGIC_NOR, "LOGIC_NOR", 0, "Logic Nor", ""},
{CONT_LOGIC_XOR, "LOGIC_XOR", 0, "Logic Xor", ""},
{CONT_LOGIC_XNOR, "LOGIC_XNOR", 0, "Logic Xnor", ""},
{CONT_EXPRESSION, "EXPRESSION", 0, "Expression", ""},
{CONT_PYTHON, "PYTHON", 0, "Python Script", ""},
static EnumPropertyItem python_controller_modes[] ={
{CONT_PY_SCRIPT, "SCRIPT", 0, "Script", ""},
{CONT_PY_MODULE, "MODULE", 0, "Module", ""},
{0, NULL, 0, NULL, NULL}};
/* Controller */
@ -85,12 +100,23 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Name", "");
RNA_def_struct_name_property(srna, prop);
/* type is not editable, would need to do proper data free/alloc */
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_enum_items(prop, controller_type_items);
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, 0, "rna_Controller_type_update");
prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set controller expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
prop= RNA_def_property(srna, "priority", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_PRIO);
RNA_def_property_ui_text(prop, "Priority", "Mark controller for execution before all non-marked controllers (good for startup scripts)");
RNA_def_property_ui_icon(prop, ICON_BOOKMARKS, 1);
/* Expression Controller */
srna= RNA_def_struct(brna, "ExpressionController", "Controller");
RNA_def_struct_sdna_from(srna, "bExpressionCont", "data");
@ -106,6 +132,10 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "bPythonCont", "data");
RNA_def_struct_ui_text(srna, "Python Controller", "Controller executing a python script");
prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, python_controller_modes);
RNA_def_property_ui_text(prop, "Execution Method", "Python script type (textblock or module - faster)");
prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Text");
RNA_def_property_flag(prop, PROP_EDITABLE);

View File

@ -31,21 +31,21 @@
#include "DNA_sensor_types.h"
EnumPropertyItem sensor_type_items[] ={
{SENS_ACTUATOR, "ACTUATOR", 0, "Actuator", ""},
{SENS_ALWAYS, "ALWAYS", 0, "Always", ""},
{SENS_TOUCH, "TOUCH", 0, "Touch", ""},
{SENS_NEAR, "NEAR", 0, "Near", ""},
{SENS_KEYBOARD, "KEYBOARD", 0, "Keyboard", ""},
{SENS_PROPERTY, "PROPERTY", 0, "Property", ""},
{SENS_MOUSE, "MOUSE", 0, "Mouse", ""},
{SENS_ARMATURE, "ARMATURE", 0, "Armature", ""},
{SENS_COLLISION, "COLLISION", 0, "Collision", ""},
{SENS_DELAY, "DELAY", 0, "Delay", ""},
{SENS_JOYSTICK, "JOYSTICK", 0, "Joystick", ""},
{SENS_KEYBOARD, "KEYBOARD", 0, "Keyboard", ""},
{SENS_MESSAGE, "MESSAGE", 0, "Message", ""},
{SENS_MOUSE, "MOUSE", 0, "Mouse", ""},
{SENS_NEAR, "NEAR", 0, "Near", ""},
{SENS_PROPERTY, "PROPERTY", 0, "Property", ""},
{SENS_RADAR, "RADAR", 0, "Radar", ""},
{SENS_RANDOM, "RANDOM", 0, "Random", ""},
{SENS_RAY, "RAY", 0, "Ray", ""},
{SENS_MESSAGE, "MESSAGE", 0, "Message", ""},
{SENS_JOYSTICK, "JOYSTICK", 0, "joystick", ""},
{SENS_ACTUATOR, "ACTUATOR", 0, "Actuator", ""},
{SENS_DELAY, "DELAY", 0, "Delay", ""},
{SENS_ARMATURE, "ARMATURE", 0, "Armature", ""},
{SENS_TOUCH, "TOUCH", 0, "Touch", ""},
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
@ -140,10 +140,14 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "pulse", SENS_NEG_PULSE_MODE);
RNA_def_property_ui_text(prop, "Pulse False Level", "Activate FALSE level triggering (pulse mode)");
prop= RNA_def_property(srna, "frequence", PROP_INT, PROP_NONE);
prop= RNA_def_property(srna, "frequency", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "freq");
RNA_def_property_ui_text(prop, "Frequency", "Delay between repeated pulses(in logic tics, 0=no delay)");
RNA_def_property_range(prop, 0, 10000);
prop= RNA_def_property(srna, "tap", PROP_BOOLEAN, PROP_NONE);\
RNA_def_property_boolean_sdna(prop, NULL, "tap", 1);
RNA_def_property_ui_text(prop, "Tap", "Trigger controllers only for an instant, even while the sensor remains true");
}
static void rna_def_always_sensor(BlenderRNA *brna)
@ -228,7 +232,7 @@ static void rna_def_keyboard_sensor(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Keyboard Sensor", "Sensor to detect keyboard events");
RNA_def_struct_sdna_from(srna, "bKeyboardSensor", "data");
prop= RNA_def_property(srna, "key", PROP_INT, PROP_NONE);
prop= RNA_def_property(srna, "key", PROP_INT, PROP_NONE);//XXX need to use another input template
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* need better range or enum check */
RNA_def_property_ui_text(prop, "Key", "Input key code");
RNA_def_property_range(prop, 0, 255);
@ -251,7 +255,7 @@ static void rna_def_keyboard_sensor(BlenderRNA *brna)
prop= RNA_def_property(srna, "log", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "toggleName");
RNA_def_property_ui_text(prop, "Log", "Property that receive the keystrokes in case a string is logged");
RNA_def_property_ui_text(prop, "Log Toggle", "Property that receive the keystrokes in case a string is logged");
prop= RNA_def_property(srna, "all_keys", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", 1);
@ -312,7 +316,7 @@ static void rna_def_armature_sensor(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Armature Sensor", "Sensor to detect values and changes in values of IK solver");
RNA_def_struct_sdna_from(srna, "bArmatureSensor", "data");
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
prop= RNA_def_property(srna, "armature_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Test Type", "Type of value and test");
@ -372,18 +376,33 @@ static void rna_def_collision_sensor(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem prop_type_items[] ={
{0, "PROPERTY", 0, "Property", ""},
{1, "MATERIAL", 0, "Material", ""},
// {SENS_COLLISION_PULSE, "PULSE", 0, "Property", ""},
{SENS_COLLISION_PROPERTY, "PROPERTY", 0, "Property", ""},
{SENS_COLLISION_MATERIAL, "MATERIAL", 0, "Material", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "CollisionSensor", "Sensor");
RNA_def_struct_ui_text(srna, "Collision Sensor", "Sensor to detect objects colliding with the current object, with more settings than the Touch sensor");
RNA_def_struct_sdna_from(srna, "bCollisionSensor", "data");
prop= RNA_def_property(srna, "collision_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Collision Type", "Toggle collision on material or property");
/*
//XXX bad, ugly. pulse in 2.49 is part of the same "enum" of collision type
//to investigate: is pulse exclusive? or it works with mat/prop?
prop= RNA_def_property(srna, "pulse", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "mode");
RNA_def_property_ui_text(prop, "Property Name", "changes to the set of colliding objects generates pulse");
*/
prop= RNA_def_property(srna, "property", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Property Name", "Only look for Objects with this property");
//XXX to make a setFunction to create a lookup with all materials in Blend File (not only this object mat.)
prop= RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "materialName");
RNA_def_property_ui_text(prop, "Material Name", "Only look for Objects with this material");
@ -395,10 +414,6 @@ static void rna_def_collision_sensor(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ma");
RNA_def_property_ui_text(prop, "Material", "Only look for Objects with this material");
*/
prop= RNA_def_property(srna, "collision_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Collision Type", "Toggle collision on material or property");
}
static void rna_def_radar_sensor(BlenderRNA *brna)

View File

@ -2111,7 +2111,8 @@ static void rna_def_space_logic(BlenderRNA *brna)
srna= RNA_def_struct(brna, "SpaceLogicEditor", "Space");
RNA_def_struct_sdna(srna, "SpaceLogic");
RNA_def_struct_ui_text(srna, "Space Logic Editor", "Logic editor space data");
/* sensors */
prop= RNA_def_property(srna, "sensors_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show sensors of all selected objects");
@ -2126,12 +2127,49 @@ static void rna_def_space_logic(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to the controller");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "sensors_show_active_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only sensors connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* controllers */
prop= RNA_def_property(srna, "controllers_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show controllers of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "controllers_show_active_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show controllers of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "controllers_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to sensor/actuator");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* actuators */
prop= RNA_def_property(srna, "actuators_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show actuators of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "actuators_show_active_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show actuators of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "actuators_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Actuator", "Show linked objects to the actuator");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "actuators_show_active_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only actuators connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
}
void RNA_def_space(BlenderRNA *brna)