Beispiel #1
0
Magic3D::XMLElement* Magic3D::Object::save(XMLElement* root)
{
    if (root)
    {
        saveString(root, M3D_OBJECT_XML_NAME,        getName());
        saveString(root, M3D_OBJECT_XML_SCRIPT,      getScript());
        saveString(root, M3D_OBJECT_XML_PARENT,      getParent() ? getParent()->getName().c_str() : M3D_XML_NULL);
        saveString(root, M3D_OBJECT_XML_PARENT_BONE, getParentBone() ? getParentBone()->getName().c_str() : M3D_XML_NULL);

        saveBool(root,   M3D_OBJECT_XML_PARENT_POSITION, isParentPosition());
        saveBool(root,   M3D_OBJECT_XML_PARENT_ROTATION, isParentRotation());
        saveBool(root,   M3D_OBJECT_XML_PARENT_SCALE, isParentScale());

        saveInt(root,    M3D_OBJECT_XML_RENDER,    getRender());
        saveInt(root,    M3D_OBJECT_XML_TYPE,      getType());
        saveInt(root,    M3D_OBJECT_XML_FLAG,      getFlag());
        saveInt(root,    M3D_OBJECT_XML_BILLBOARD, getBillboard());

        saveBool(root,   M3D_OBJECT_XML_ENABLED,  isEnabled());
        saveBool(root,   M3D_OBJECT_XML_VISIBLE,  isVisible());
        saveBool(root,   M3D_OBJECT_XML_ZORDER,   isZOrder());
        saveBool(root,   M3D_OBJECT_XML_PICK,     isPickable());

        saveVector3(root, M3D_OBJECT_XML_POSITION, getPosition());
        saveVector4(root, M3D_OBJECT_XML_ROTATION, Vector4(getRotation()));
        saveVector3(root, M3D_OBJECT_XML_SCALE,    getScale());

        saveBool(root,    M3D_OBJECT_XML_SCRIPTED,  isScripted());

        std::vector<Mesh*>::const_iterator it_m = meshes.begin();
        while (it_m != meshes.end())
        {
            Mesh* mesh = *it_m++;

            XMLElement* meshtXML = root->GetDocument()->NewElement( M3D_MESH_XML );
            meshtXML->SetAttribute("materials", (int)mesh->getMaterials()->size());
            root->LinkEndChild( meshtXML );

            mesh->save(meshtXML);
        }

        PhysicsObject::save(root);
    }
    return root;
}
Beispiel #2
0
bool Magic3D::Object::update()
{
    if (Scene::getInstance()->getUniqueUpdateFlag() != uniqueUpdate)
    {
        uniqueUpdate = Scene::getInstance()->getUniqueUpdateFlag();

        bool needTransformOld = needTransform;

        if (isEnabled())
        {
            if (isScripted())
            {
                std::string function_AI("AI");
                Script::getInstance()->execute(function_AI, 0, getName());
            }

            if (AI)
            {
                AI->AI();
            }

            updateTweens();
        }

        if (needTransform || (getRigidBody() && Physics::getInstance()->isPlaying() &&  getRigidBody()->getActivationState() != ISLAND_SLEEPING) || (getParent() && getParent()->isInFrustum()))
        {
            if (needTransform && !needTransformOld)
            {
                resetPhysics();
            }
            needTransform = false;
            updateMatrix();
        }
    }

    return true;
}
Beispiel #3
0
Magic3D::Object::~Object()
{
    std::vector<Object*>::const_iterator it_o = children.begin();
    while (it_o != children.end())
    {
        (*it_o++)->setParent(NULL, false);
    }
    children.clear();

    std::vector<ObjectInstance*>::const_iterator it_i = instances.begin();
    while (it_i != instances.end())
    {
        (*it_i++)->setInstance(NULL, false);
    }
    instances.clear();

    if (getParent())
    {
        setParent(NULL);
    }

    if (Script::getInstance())
    {
        if (isScripted())
        {
            setScripted(false);
        }
    }

    if (AI)
    {
        delete AI;
        AI = NULL;
    }

    clearMeshes();
}
Beispiel #4
0
 void Character::touch() {
     // Let the script handle that      
     if (isScripted()) {
         Director::getInstance()->getScriptingEngine()->executeFunction(getName() + "_touch");            
     }
 }