Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / gameengine / GameLogic / SCA_ILogicBrick.h
index 4dcc4f8..5067985 100644 (file)
@@ -1,15 +1,12 @@
 /**
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** 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. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * 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
@@ -27,7 +24,7 @@
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  */
 #ifndef __KX_ILOGICBRICK
 #define __KX_ILOGICBRICK
 #include "Value.h"
 #include "SCA_IObject.h"
 #include "BoolValue.h"
+#include "GEN_Map.h"
+#include "GEN_HashedPtr.h"
+
 class SCA_ILogicBrick : public CValue
 {
        Py_Header;
+protected:
        SCA_IObject*            m_gameobj;
        int                                     m_Execute_Priority;
        int                                     m_Execute_Ueber_Priority;
@@ -47,46 +48,93 @@ class SCA_ILogicBrick : public CValue
        STR_String                      m_text;
        STR_String                      m_name;
        //unsigned long         m_drawcolor;
-protected:
        void RegisterEvent(CValue* eventval);
        void RemoveEvent();
        CValue* GetEvent();
 
 public:
-       SCA_ILogicBrick(SCA_IObject* gameobj,PyTypeObject* T );
+       SCA_ILogicBrick(SCA_IObject* gameobj);
        virtual ~SCA_ILogicBrick();
 
        void SetExecutePriority(int execute_Priority);
        void SetUeberExecutePriority(int execute_Priority);
 
-       SCA_IObject*    GetParent();
+       SCA_IObject*    GetParent() { return m_gameobj; }
+
        virtual void    ReParent(SCA_IObject* parent);
+       virtual void    Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map);
+       virtual void Delete() { Release(); }
 
        // act as a BoolValue (with value IsPositiveTrigger)
        virtual CValue* Calc(VALUE_OPERATOR op, CValue *val);
        virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
 
        virtual const STR_String &      GetText();
-       virtual float           GetNumber();
-       virtual STR_String      GetName();
-       virtual void            SetName(STR_String name);
-       virtual void            ReplicaSetName(STR_String name);
+       virtual double          GetNumber();
+       virtual STR_String&     GetName();
+       virtual void            SetName(const char *);
                
-       bool                            IsActive();
-       void                            SetActive(bool active) ;
+       bool                            IsActive()
+       {
+               return m_bActive;
+       }
+
+       void                            SetActive(bool active)
+       {
+               m_bActive=active;
+       }
+
+       // insert in a QList at position corresponding to m_Execute_Priority
+       void                        InsertActiveQList(SG_QList& head)
+       {
+               SG_QList::iterator<SCA_ILogicBrick> it(head);
+               for(it.begin(); !it.end() && m_Execute_Priority > (*it)->m_Execute_Priority; ++it);
+               it.add_back(this);
+       }
+
+       // insert in a QList at position corresponding to m_Execute_Priority
+       // inside a longer list that contains elements of other objects. 
+       // Sorting is done only between the elements of the same object.
+       // head is the head of the combined list
+       // current points to the first element of the object in the list, NULL if none yet
+       void                        InsertSelfActiveQList(SG_QList& head, SG_QList** current)
+       {
+               if (!*current)
+               {
+                       // first element can be put anywhere
+                       head.QAddBack(this);
+                       *current = this;
+                       return;
+               }
+               // note: we assume current points actually to one o our element, skip the tests
+               SG_QList::iterator<SCA_ILogicBrick> it(head,*current);
+               if (m_Execute_Priority <= (*it)->m_Execute_Priority)
+               {
+                       // this element comes before the first
+                       *current = this;
+               }
+               else
+               {
+                       for(++it; !it.end() && (*it)->m_gameobj == m_gameobj &&  m_Execute_Priority > (*it)->m_Execute_Priority; ++it);
+               }
+               it.add_back(this);
+       }
 
        virtual bool            LessComparedTo(SCA_ILogicBrick* other);
-       
-       virtual PyObject*  _getattr(char *attr);
 
        static class SCA_LogicManager*  m_sCurrentLogicManager;
 
 
        // python methods
 
-       KX_PYMETHOD(SCA_ILogicBrick,GetOwner);
-       KX_PYMETHOD(SCA_ILogicBrick,SetExecutePriority);
-       KX_PYMETHOD(SCA_ILogicBrick,GetExecutePriority);
+       KX_PYMETHOD_NOARGS(SCA_ILogicBrick,GetOwner);
+       KX_PYMETHOD_VARARGS(SCA_ILogicBrick,SetExecutePriority);
+       KX_PYMETHOD_NOARGS(SCA_ILogicBrick,GetExecutePriority);
+       
+       static PyObject*        pyattr_get_owner(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+       // check that attribute is a property
+       static int CheckProperty(void *self, const PyAttributeDef *attrdef);
 
        enum KX_BOOL_TYPE {
                KX_BOOL_NODEF = 0,