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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to