Ejemplo n.º 1
0
void DisplayManager::addDisplay(Node *display, int index)
{
    DecorativeDisplay *decoDisplay = NULL;

    if(index >= 0 && (unsigned int)index < _decoDisplayList->count())
    {
        decoDisplay = (DecorativeDisplay *)_decoDisplayList->getObjectAtIndex(index);
    }
    else
    {
        decoDisplay = DecorativeDisplay::create();
        _decoDisplayList->addObject(decoDisplay);
    }

    DisplayData *displayData = NULL;
    if (Skin *skin = dynamic_cast<Skin *>(display))
    {
        skin->setBone(_bone);
        displayData = SpriteDisplayData::create();

        DisplayFactory::initSpriteDisplay(_bone, decoDisplay, skin->getDisplayName().c_str(), skin);

        if (SpriteDisplayData *spriteDisplayData = (SpriteDisplayData *)decoDisplay->getDisplayData())
        {
            skin->setSkinData(spriteDisplayData->skinData);
        }
        else
        {
            BaseData baseData;
            skin->setSkinData(baseData);
        }
    }
    else if (dynamic_cast<ParticleSystemQuad *>(display))
    {
        displayData = ParticleDisplayData::create();
    }
    else if(Armature *armature = dynamic_cast<Armature *>(display))
    {
        displayData = ArmatureDisplayData::create();
        armature->setParentBone(_bone);
    }
    else
    {
        displayData = DisplayData::create();
    }

    decoDisplay->setDisplay(display);
    decoDisplay->setDisplayData(displayData);

    //! if changed display index is current display index, then change current display to the new display
    if(index == _displayIndex)
    {
        _displayIndex = -1;
        changeDisplayByIndex(index, false);
    }
}
Ejemplo n.º 2
0
void DisplayManager::addDisplay(Node *display, int index)
{
    DecorativeDisplay *decoDisplay = nullptr;

    if( (index >= 0) && (index < _decoDisplayList.size()) )
    {
        decoDisplay = _decoDisplayList.at(index);
    }
    else
    {
        decoDisplay = DecorativeDisplay::create();
        _decoDisplayList.pushBack(decoDisplay);
    }

    DisplayData *displayData = nullptr;
    if (Skin *skin = dynamic_cast<Skin *>(display))
    {
        skin->setBone(_bone);
        displayData = SpriteDisplayData::create();

        DisplayFactory::initSpriteDisplay(_bone, decoDisplay, skin->getDisplayName().c_str(), skin);

        if (SpriteDisplayData *spriteDisplayData = (SpriteDisplayData *)decoDisplay->getDisplayData())
        {
            skin->setSkinData(spriteDisplayData->skinData);
            ((SpriteDisplayData *)displayData)->skinData = spriteDisplayData->skinData;
        }
        else
        {
            bool find = false;

            for (long i = _decoDisplayList.size()-2; i>=0; i--)
            {
                DecorativeDisplay *dd = _decoDisplayList.at(i);
                SpriteDisplayData *sdd = static_cast<SpriteDisplayData*>(dd->getDisplayData());
                if (sdd)
                {
                    find = true;
                    skin->setSkinData(sdd->skinData);
                    static_cast<SpriteDisplayData*>(displayData)->skinData = sdd->skinData;
                    break;
                }
            }

            if (!find)
            {
                BaseData baseData;
                skin->setSkinData(baseData);
            }
        }
    }
    else if (dynamic_cast<ParticleSystemQuad *>(display))
    {
        displayData = ParticleDisplayData::create();

        display->removeFromParent();
        display->cleanup();
        
        Armature *armature = _bone->getArmature();
        if (armature)
        {
            display->setParent(armature);
        }
    }
    else if(Armature *armature = dynamic_cast<Armature *>(display))
    {
        displayData = ArmatureDisplayData::create();
        displayData->displayName = armature->getName();
        armature->setParentBone(_bone);
    }
    else
    {
        displayData = DisplayData::create();
    }

    decoDisplay->setDisplay(display);
    decoDisplay->setDisplayData(displayData);

    //! if changed display index is current display index, then change current display to the new display
    if(index == _displayIndex)
    {
        _displayIndex = -1;
        changeDisplayWithIndex(index, false);
    }
}