BGE: rna update for Logic Bricks

Sensor and Controllers: small fixes and suggestion (comments) for future improvement - mainly to replace text properties to material, text or object datablocks.

Actuators done:
* IPO
* CAMERA

Actuators to be done:
All the others (their structure is in the file)

Adding NC_LOGIC

** If someone want to help on that:
Files used for actuator RNA:
- logic_window.c
- DNA_actuator_types.h

*** my first big RNA operation. critics/suggestions are welcome

**** padded some DNA variables that were not been used.
This commit is contained in:
Dalai Felinto
2010-02-05 23:50:33 +00:00
parent 29a6465ed4
commit 443d913f72
6 changed files with 387 additions and 9 deletions

View File

@@ -114,16 +114,16 @@ typedef struct bIpoActuator {
char name[32];
char frameProp[32]; /* Set this property to the actions current frame */
short pad1, cur, butsta, butend;
short pad1, pad2, pad3, pad4;
} bIpoActuator;
typedef struct bCameraActuator {
struct Object *ob;
float height, min, max;
float fac;
short flag, axis;
float visifac;
float pad;
short pad1, axis;
float pad2;
} bCameraActuator ;
typedef struct bConstraintActuator {

View File

@@ -98,6 +98,7 @@ typedef struct bDelaySensor {
typedef struct bCollisionSensor {
char name[32]; /* property name */
char materialName[32]; /* material */
// struct Material *ma; // XXX remove materialName
short damptimer, damp;
short mode; /* flag to choose material or property */
short pad2;
@@ -121,6 +122,7 @@ typedef struct bRaySensor {
float range;
char propname[32];
char matname[32];
//struct Material *ma; // XXX remove materialName
short mode;
short pad1;
int axisflag;

View File

@@ -30,18 +30,67 @@
#include "rna_internal.h"
#include "DNA_actuator_types.h"
#include "DNA_scene_types.h" // for MAXFRAMEF
#include "WM_types.h"
#ifdef RNA_RUNTIME
static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
{
bActuator *actuator= (bActuator*)ptr->data;
switch(actuator->type) {
case ACT_OBJECT:
return &RNA_ObjectActuator;
case ACT_IPO:
return &RNA_IpoActuator;
case ACT_CAMERA:
return &RNA_CameraActuator;
case ACT_SOUND:
return &RNA_SoundActuator;
case ACT_PROPERTY:
return &RNA_PropertyActuator;
case ACT_CONSTRAINT:
return &RNA_ConstraintActuator;
case ACT_EDIT_OBJECT:
return &RNA_EditObjectActuator;
case ACT_SCENE:
return &RNA_SceneActuator;
case ACT_RANDOM:
return &RNA_RandomActuator;
case ACT_MESSAGE:
return &RNA_MessageActuator;
case ACT_ACTION:
return &RNA_ActionActuator;
case ACT_GAME:
return &RNA_GameActuator;
case ACT_VISIBILITY:
return &RNA_VisibilityActuator;
case ACT_2DFILTER:
return &RNA_TwoDFilterActuator;
case ACT_PARENT:
return &RNA_ParentActuator;
case ACT_SHAPEACTION:
return &RNA_ShapeActionActuator;
case ACT_STATE:
return &RNA_StateActuator;
case ACT_ARMATURE:
return &RNA_ArmatureActuator;
default:
return &RNA_Actuator;
}
}
#else
void RNA_def_actuator(BlenderRNA *brna)
void rna_def_actuator(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem actuator_type_items[] ={
{ACT_OBJECT, "OBJECT", 0, "Object", ""},
{ACT_OBJECT, "OBJECT", 0, "Motion", ""},
{ACT_IPO, "IPO", 0, "IPO", ""},
{ACT_CAMERA, "CAMERA", 0, "Camera", ""},
{ACT_SOUND, "SOUND", 0, "Sound", ""},
@@ -51,7 +100,7 @@ void RNA_def_actuator(BlenderRNA *brna)
{ACT_SCENE, "SCENE", 0, "Scene", ""},
{ACT_RANDOM, "RANDOM", 0, "Random", ""},
{ACT_MESSAGE, "MESSAGE", 0, "Message", ""},
{ACT_ACTION, "ACTION", 0, "Action", ""},
{ACT_ACTION, "ACTION", 0, "Action", ""},
{ACT_GAME, "GAME", 0, "Game", ""},
{ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
{ACT_2DFILTER, "FILTER_2D", 0, "2D Filter", ""},
@@ -63,8 +112,8 @@ void RNA_def_actuator(BlenderRNA *brna)
srna= RNA_def_struct(brna, "Actuator", NULL);
RNA_def_struct_ui_text(srna, "Actuator", "Game engine logic brick to apply actions in the game engine.");
RNA_def_struct_sdna(srna, "bActuator");
RNA_def_struct_refine_func(srna, "rna_Actuator_refine");
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "");
@@ -77,5 +126,306 @@ void RNA_def_actuator(BlenderRNA *brna)
}
static void rna_def_object_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "ObjectActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Object Actuator", "Actuator to control the object movement.");
RNA_def_struct_sdna_from(srna, "bObjectActuator", "data");
//XXX
}
static void rna_def_ipo_actuator(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem prop_type_items[] ={
{ACT_IPO_PLAY, "PLAY", 0, "Play", ""},
{ACT_IPO_PINGPONG, "PINGPONG", 0, "Ping Pong", ""},
{ACT_IPO_FLIPPER, "FLIPPER", 0, "Flipper", ""},
{ACT_IPO_LOOP_STOP, "STOP", 0, "Loop Stop", ""},
{ACT_IPO_LOOP_END, "END", 0, "Loop End", ""},
// {ACT_IPO_KEY2KEY, "IPOCHILD", 0, "Key to Key", ""},
{ACT_IPO_FROM_PROP, "PROP", 0, "Property", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "IpoActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Ipo Actuator", "Actuator to animate the object.");
RNA_def_struct_sdna_from(srna, "bIpoActuator", "data");
prop= RNA_def_property(srna, "play_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, "Ipo Type", "Specify the way you want to play the animation.");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sta");
RNA_def_property_ui_range(prop, 1, MAXFRAMEF, 1, 1);
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_SCENE, NULL);
prop= RNA_def_property(srna, "end_frame", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "end");
RNA_def_property_ui_range(prop, 1, MAXFRAMEF, 1, 1);
RNA_def_property_ui_text(prop, "End Frame", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "prop", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Prop", "Use this property to define the Ipo position.");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "frame_prop", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "frameProp");
RNA_def_property_ui_text(prop, "FrameProp", "Assign the action's current frame number to this property");
/* booleans */
prop= RNA_def_property(srna, "ipo_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOFORCE);
RNA_def_property_ui_text(prop, "Force", "Apply Ipo as a global or local force depending on the local option (dynamic objects only)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//logic_window::change_ipo_actuator
prop= RNA_def_property(srna, "ipo_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOLOCAL);
RNA_def_property_ui_text(prop, "L", "Let the ipo acts in local coordinates, used in Force and Add mode.");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "ipo_child", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOCHILD);
RNA_def_property_ui_text(prop, "Child", "Update IPO on all children Objects as well");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "ipo_add", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOADD);
RNA_def_property_ui_text(prop, "Add", "Ipo is added to the current loc/rot/scale in global or local coordinate according to Local flag");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//logic_window::change_ipo_actuator
}
static void rna_def_camera_actuator(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem prop_axis_items[] ={
{(float)'x', "X", 0, "X", "Camera tries to get behind the X axis"},
{(float)'y', "Y", 0, "Y", "Camera tries to get behind the Y axis"},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "CameraActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Camera Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bCameraActuator", "data");
prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_pointer_sdna(prop, NULL, "ob");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Camera Object", "Look at this Object");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
/* floats */
prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
RNA_def_property_ui_text(prop, "Height", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
RNA_def_property_ui_text(prop, "Min", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
RNA_def_property_ui_text(prop, "Max", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* x/y */
// It could be changed to be a regular ENUM instead of this weird "(float)string enum"
prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "axis");
RNA_def_property_enum_items(prop, prop_axis_items);
RNA_def_property_ui_text(prop, "Axis", "Specify the axy the Camera will try to get behind.");
RNA_def_property_update(prop, NC_LOGIC, NULL);
}
static void rna_def_sound_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "SoundActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Sound Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bSoundActuator", "data");
//XXX
}
static void rna_def_property_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "PropertyActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Property Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bPropertyActuator", "data");
//XXX
}
static void rna_def_constraint_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "ConstraintActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Constraint Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bConstraintActuator", "data");
//XXX
}
static void rna_def_edit_object_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "EditObjectActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Edit Object Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bEditObjectActuator", "data");
//XXX
}
static void rna_def_scene_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "SceneActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Scene Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bSceneActuator", "data");
//XXX
}
static void rna_def_random_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "RandomActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Random Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bRandomActuator", "data");
//XXX
}
static void rna_def_message_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "MessageActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Message Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bMessageActuator", "data");
//XXX
}
static void rna_def_action_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "ActionActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Action Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bActionActuator", "data");
//XXX
}
static void rna_def_game_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "GameActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Game Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bGameActuator", "data");
//XXX
}
static void rna_def_visibility_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "VisibilityActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Visibility Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bVisibilityActuator", "data");
//XXX
}
static void rna_def_twodfilter_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "TwoDFilterActuator", "Actuator");
RNA_def_struct_ui_text(srna, "2D Filter Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bTwoDFilterActuator", "data");
//XXX
}
static void rna_def_parent_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "ParentActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Parent Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bParentActuator", "data");
//XXX
}
static void rna_def_shape_action_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "ShapeActionActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Shape Action Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bShapeActionActuator", "data");
//XXX
}
static void rna_def_state_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "StateActuator", "Actuator");
RNA_def_struct_ui_text(srna, "State Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bStateActuator", "data");
//XXX
}
static void rna_def_armature_actuator(BlenderRNA *brna)
{
StructRNA *srna;
srna= RNA_def_struct(brna, "ArmatureActuator", "Actuator");
RNA_def_struct_ui_text(srna, "Armature Actuator", "Actuator to ...");
RNA_def_struct_sdna_from(srna, "bArmatureActuator", "data");
//XXX
}
void RNA_def_actuator(BlenderRNA *brna)
{
rna_def_actuator(brna);
rna_def_object_actuator(brna); // to be done
rna_def_ipo_actuator(brna);
rna_def_camera_actuator(brna);
rna_def_sound_actuator(brna); // to be done
rna_def_property_actuator(brna); // to be done
rna_def_constraint_actuator(brna); // to be done
rna_def_edit_object_actuator(brna); // to be done
rna_def_scene_actuator(brna); // to be done
rna_def_random_actuator(brna); // to be done
rna_def_message_actuator(brna); // to be done
rna_def_action_actuator(brna); // to be done
rna_def_game_actuator(brna); // to be done
rna_def_visibility_actuator(brna); // to be done
rna_def_twodfilter_actuator(brna); // to be done
rna_def_parent_actuator(brna); // to be done
rna_def_shape_action_actuator(brna);// to be done
rna_def_state_actuator(brna); // to be done
rna_def_armature_actuator(brna); // to be done
}
#endif

View File

@@ -108,10 +108,18 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Python Controller", "Controller executing a python script.");
prop= RNA_def_property(srna, "text", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "ID");
RNA_def_property_struct_type(prop, "Text");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Text", "Text datablock with the python script.");
prop= RNA_def_property(srna, "module", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Module", "Module name and function to run e.g. \"someModule.main\". Internal texts and external python files can be used");
RNA_def_struct_name_property(srna, prop);
prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_PY_DEBUG);
RNA_def_property_ui_text(prop, "D", "Continuously reload the module from disk for editing external modules without restarting.");
/* Other Controllers */
srna= RNA_def_struct(brna, "AndController", "Controller");
RNA_def_struct_ui_text(srna, "And Controller", "Controller passing on events based on a logical AND operation.");

View File

@@ -199,6 +199,7 @@ static void rna_def_touch_sensor(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "bTouchSensor", "data");
prop= RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
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 floors with this material.");
@@ -324,6 +325,7 @@ static void rna_def_actuator_sensor(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Actuator Sensor", "Sensor to detect state modifications of actuators.");
RNA_def_struct_sdna_from(srna, "bActuatorSensor", "data");
// XXX if eventually have Logics using RNA 100%, we could use the actuator datablock isntead of its name
prop= RNA_def_property(srna, "actuator", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Actuator", "Actuator name, actuator active state modifications will be detected.");
@@ -372,6 +374,13 @@ static void rna_def_collision_sensor(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "materialName");
RNA_def_property_ui_text(prop, "Material Name", "Only look for Objects with this material.");
/*
prop= RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);
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);
@@ -456,6 +465,14 @@ static void rna_def_ray_sensor(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "matname");
RNA_def_property_ui_text(prop, "Material", "Only look for Objects with this material.");
/*
prop= RNA_def_property(srna, "material", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);
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, "ray_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, prop_type_items);

View File

@@ -144,6 +144,7 @@ typedef struct wmNotifier {
#define NC_GEOM (16<<24)
#define NC_NODE (17<<24)
#define NC_ID (18<<24)
#define NC_LOGIC (19<<24)
/* data type, 256 entries is enough, it can overlap */
#define NOTE_DATA 0x00FF0000