/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Contributor(s): Blender Foundation (2008). * * ***** END GPL LICENSE BLOCK ***** */ /** \file blender/makesrna/intern/rna_controller.c * \ingroup RNA */ #include #include "WM_types.h" #include "RNA_define.h" #include "rna_internal.h" #include "DNA_object_types.h" #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", ""}, {0, NULL, 0, NULL, NULL}}; #ifdef RNA_RUNTIME #include "BKE_sca.h" #include "DNA_actuator_types.h" static struct StructRNA* rna_Controller_refine(struct PointerRNA *ptr) { bController *controller = (bController*)ptr->data; switch (controller->type) { case CONT_LOGIC_AND: return &RNA_AndController; case CONT_LOGIC_OR: return &RNA_OrController; case CONT_LOGIC_NAND: return &RNA_NandController; case CONT_LOGIC_NOR: return &RNA_NorController; case CONT_LOGIC_XOR: return &RNA_XorController; case CONT_LOGIC_XNOR: return &RNA_XnorController; case CONT_EXPRESSION: return &RNA_ExpressionController; case CONT_PYTHON: return &RNA_PythonController; default: return &RNA_Controller; } } void rna_Constroller_name_set(PointerRNA *ptr, const char *value) { bController *cont = (bController *)ptr->data; BLI_strncpy_utf8(cont->name, value, sizeof(cont->name)); if (ptr->id.data) { Object *ob = (Object *)ptr->id.data; BLI_uniquename(&ob->controllers, cont, "Controller", '.', offsetof(bController, name), sizeof(cont->name)); } } static void rna_Controller_type_set(struct PointerRNA *ptr, int value) { bController *cont = (bController *)ptr->data; if (value != cont->type) { cont->type = value; init_controller(cont); } } static void rna_Controller_mode_set(struct PointerRNA *ptr, int value) { bController *cont = (bController *)ptr->data; bPythonCont *pycon = (bPythonCont *)cont->data; /* if mode changed and previous mode were Script */ if (value != pycon->mode && pycon->mode == CONT_PY_SCRIPT) { /* clear script to avoid it to get linked with the controller */ pycon->text = NULL; } pycon->mode = value; } static int rna_Controller_state_number_get(struct PointerRNA *ptr) { bController *cont = (bController *)ptr->data; int bit; for (bit = 0; bit<32; bit++) { if (cont->state_mask & (1<data; if (value < 1 || value > OB_MAX_STATES) return; cont->state_mask = (1 << (value - 1)); } static void rna_Controller_actuators_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) { bController *cont = (bController *)ptr->data; rna_iterator_array_begin(iter, cont->links, sizeof(bActuator *), (int)cont->totlinks, 0, NULL); } static int rna_Controller_actuators_length(PointerRNA *ptr) { bController *cont = (bController *)ptr->data; return (int) cont->totlinks; } #if 0 /* editable is set to false, comment for now. */ static void rna_Controller_state_get(PointerRNA *ptr, int *values) { bController *cont = (bController *)ptr->data; int i; memset(values, 0, sizeof(int)*OB_MAX_STATES); for (i = 0; istate_mask & (1<data; int i, tot = 0; /* ensure we always have some state selected */ for (i = 0; i1) return; for (i = 0; istate_mask |= (1<state_mask &= ~(1<