[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28558] trunk/blender/source/blender: BGE Logics UI: commit to receive some feedback from Matt
Dalai Felinto
dfelinto at gmail.com
Tue May 4 02:06:15 CEST 2010
Revision: 28558
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28558
Author: dfelinto
Date: 2010-05-04 02:06:13 +0200 (Tue, 04 May 2010)
Log Message:
-----------
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
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_logic/logic_ops.c
trunk/blender/source/blender/editors/space_logic/logic_window.c
trunk/blender/source/blender/makesdna/DNA_controller_types.h
trunk/blender/source/blender/makesdna/DNA_sensor_types.h
trunk/blender/source/blender/makesrna/RNA_enum_types.h
trunk/blender/source/blender/makesrna/intern/rna_actuator.c
trunk/blender/source/blender/makesrna/intern/rna_controller.c
trunk/blender/source/blender/makesrna/intern/rna_sensor.c
trunk/blender/source/blender/makesrna/intern/rna_space.c
Modified: trunk/blender/source/blender/editors/space_logic/logic_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_ops.c 2010-05-03 22:17:05 UTC (rev 28557)
+++ trunk/blender/source/blender/editors/space_logic/logic_ops.c 2010-05-04 00:06:13 UTC (rev 28558)
@@ -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 @@
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,9 +122,96 @@
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)
{
/* Object *ob;
@@ -189,8 +294,180 @@
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);
}
Modified: trunk/blender/source/blender/editors/space_logic/logic_window.c
===================================================================
--- trunk/blender/source/blender/editors/space_logic/logic_window.c 2010-05-03 22:17:05 UTC (rev 28557)
+++ trunk/blender/source/blender/editors/space_logic/logic_window.c 2010-05-04 00:06:13 UTC (rev 28558)
@@ -3170,6 +3170,8 @@
/* 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,19 +3185,156 @@
uiItemO(row, "", ICON_X, "LOGIC_OT_sensor_remove");
}
+static void draw_sensor_internal_header(uiLayout *layout, PointerRNA *ptr)
+{
+ uiLayout *box, *row;
-static void draw_sensor_touch(uiLayout *layout, PointerRNA *ptr)
+ 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, "material", 0, NULL, 0);
+ 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);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list