ToyPaletteNode.cpp 2.68 KB
//
//  ToyPaletteNode.cpp
//  SteveMaggieCpp
//
//  Created by Katarzyna Kalinowska-Górska on 17.05.2017.
//
//

#include <stdio.h>
#include "ToyPaletteNode.h"

ToyPaletteNode* ToyPaletteNode::create()
{
    ToyPaletteNode * node = new (std::nothrow) ToyPaletteNode();
    if(node && node->init())
    {
        node->autorelease();
        return node;
    }
    CC_SAFE_DELETE(node);
    return nullptr;
}

bool ToyPaletteNode::init()
{
    if(!ToyPlainNode::init()){
        return false;
    }
    
    _onPaletteStateChangedCallback = [](ToyPaletteNode*, ToyPaletteComponentSprite*, bool, bool){};
    
    return true;
}
    
void ToyPaletteNode::setOnPaletteStateChangedCallback(std::function<void(ToyPaletteNode*, ToyPaletteComponentSprite*, bool, bool)> callback)
{
    _onPaletteStateChangedCallback = callback;
}

void ToyPaletteNode::clearOnPaletteStateChangedCallback()
{
    _onPaletteStateChangedCallback = [](ToyPaletteNode*, ToyPaletteComponentSprite*, bool, bool){};
}
    
ToyPaletteComponentSprite* ToyPaletteNode::getChosenComponent()
{
    auto children = this->getChildren();
    for(const auto& child : children){
        
        auto childToyLayoutObject = dynamic_cast<ToyLayoutObject*>(child);
        if(childToyLayoutObject->className == "PaletteComponentSprite"){
            auto childComponentSprite = dynamic_cast<ToyPaletteComponentSprite*>(childToyLayoutObject);
            if(childComponentSprite->isChosen()){
                return childComponentSprite;
            }
        }
    }

    return nullptr;
}

void ToyPaletteNode::paletteComponentStateChanged(ToyPaletteComponentSprite* paletteComponentSprite, bool componentChosen, bool componentPressed)
{
    if(componentPressed){
        auto children = this->getChildren();
        for(int i = 0; i < children.size(); ++i){
            auto child = dynamic_cast<ToyLayoutObject*>(children.at(i));
            if(child->className == "PaletteComponentSprite" && child != paletteComponentSprite){
                auto childComponentSprite = dynamic_cast<ToyPaletteComponentSprite*>(child);
                childComponentSprite->setChosen(false, true, true, false);
            }
        }
    }
    
    _onPaletteStateChangedCallback(this, paletteComponentSprite, componentChosen, componentPressed);
}

void ToyPaletteNode::callFunctionByName(std::string methodName, const rapidjson::Value* arguments, ActionParseDelegate* parseDelegate, std::function<void()> callback)
{
    if(methodName == "setOpacity"){
        if((*arguments).IsArray()){
            this->setOpacity((*arguments).GetArray()[0].GetInt());
        }
    }
    else if(methodName == "clearOnPaletteStateChangedCallback"){
        this->clearOnPaletteStateChangedCallback();
    }
}