Logo Search packages:      
Sourcecode: blender version File versions

KX_SCA_ReplaceMeshActuator.cpp

//
// Replace the mesh for this actuator's parent
//
// $Id: KX_SCA_ReplaceMeshActuator.cpp,v 1.8 2004/10/16 11:41:48 kester Exp $
//
// ***** BEGIN GPL/BL DUAL 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.
//
// 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
// All rights reserved.
//
// The Original Code is: all of this file.
//
// Contributor(s): none yet.
//
// ***** END GPL/BL DUAL LICENSE BLOCK *****

//
// Previously existed as:

// \source\gameengine\GameLogic\SCA_ReplaceMeshActuator.cpp

// Please look here for revision history.

#include "KX_SCA_ReplaceMeshActuator.h"

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

/* ------------------------------------------------------------------------- */
/* Python functions                                                          */
/* ------------------------------------------------------------------------- */

/* Integration hooks ------------------------------------------------------- */

      PyTypeObject 

KX_SCA_ReplaceMeshActuator::

Type = {
      PyObject_HEAD_INIT(&PyType_Type)
      0,
      "KX_SCA_ReplaceMeshActuator",
      sizeof(KX_SCA_ReplaceMeshActuator),
      0,
      PyDestructor,
      0,
      __getattr,
      __setattr,
      0, 
      __repr,
      0, 
      0,
      0,
      0,
      0
};

PyParentObject KX_SCA_ReplaceMeshActuator::Parents[] = {
      &SCA_IActuator::Type,
      &SCA_ILogicBrick::Type,
      &CValue::Type,
      NULL
};



PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = {
  {"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_VARARGS, SetMesh_doc},
  KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, getMesh),
  {NULL,NULL} //Sentinel
};



PyObject* KX_SCA_ReplaceMeshActuator::_getattr(const STR_String& attr)
{
  _getattr_up(SCA_IActuator);
}



/* 1. setMesh */
char KX_SCA_ReplaceMeshActuator::SetMesh_doc[] = 
      "setMesh(name)\n"
      "\t- name: string\n"
      "\tSet the mesh that will be substituted for the current one.\n";

PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self,
                                                        PyObject* args, 
                                                        PyObject* kwds)
{
      char* meshname;
      
      if (!PyArg_ParseTuple(args, "s", &meshname))
      {
            return NULL;      
      }

      void* mesh = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
      
      if (mesh) {
            m_mesh= (class RAS_MeshObject*)mesh;
            Py_Return;
      }
      
      return NULL;
}

KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh,
"getMesh() -> string\n"
"Returns the name of the mesh to be substituted.\n"
)
{
      if (!m_mesh)
            Py_Return;

      return PyString_FromString(const_cast<char *>(m_mesh->GetName().ReadPtr()));
}

/* ------------------------------------------------------------------------- */
/* Native functions                                                          */
/* ------------------------------------------------------------------------- */

KX_SCA_ReplaceMeshActuator::KX_SCA_ReplaceMeshActuator(SCA_IObject *gameobj,
                                                                                 class RAS_MeshObject *mesh,
                                                                                 SCA_IScene* scene,
                                                                                 PyTypeObject* T) : 

      SCA_IActuator(gameobj, T),
      m_mesh(mesh),
      m_scene(scene)
{
} /* End of constructor */



KX_SCA_ReplaceMeshActuator::~KX_SCA_ReplaceMeshActuator()
{ 
      // there's nothing to be done here, really....
} /* end of destructor */



bool KX_SCA_ReplaceMeshActuator::Update()
{
      bool result = false;    
      bool bNegativeEvent = IsNegativeEvent();
      RemoveAllEvents();

      if (bNegativeEvent)
            return false; // do nothing on negative events

      if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh);

      return false;
}



CValue* KX_SCA_ReplaceMeshActuator::GetReplica()
{
      KX_SCA_ReplaceMeshActuator* replica = 
            new KX_SCA_ReplaceMeshActuator(*this);

      if (replica == NULL)
            return NULL;

      replica->ProcessReplica();

      // this will copy properties and so on...
      CValue::AddDataToReplica(replica);

      return replica;
};

/* eof */

Generated by  Doxygen 1.6.0   Back to index