Ejemplo n.º 1
0
void SceneNode::RemoveChildNode(SceneNode *childNode)
{
	// do a recursive down to remove child
	if (childNode->HasChild())
	{
		for (vector<SceneNode*>::iterator i = childNode->childNodes.begin(); i != childNode->childNodes.end();)
		{
			SceneNode* temp = (*i);
			RemoveChildNode(temp);
			i = childNode->childNodes.begin();
		}
	}

	childNode->setActive(false);

	// there is a parent
	if (childNode->parentNode != NULL)
	{
		vector<SceneNode*> tempParentChild = childNode->parentNode->childNodes;

		for (unsigned i = 0; i < tempParentChild.size(); ++i)
		{
			if (tempParentChild[i] == childNode)
			{
				tempParentChild.erase(tempParentChild.begin() + i);
				break;
			}
		}

		childNode->parentNode->childNodes = tempParentChild;
	}
}
Ejemplo n.º 2
0
void USoundNodeRandom::PostLoad()
{
    Super::PostLoad();
    if (!GIsEditor && PreselectAtLevelLoad > 0)
    {
        while (ChildNodes.Num() > PreselectAtLevelLoad)
        {
            RemoveChildNode(FMath::Rand() % ChildNodes.Num());
        }
    }
}
Ejemplo n.º 3
0
BOOL RemoveNode(NodeList * FromList)
{
    if (!FromList)  return FALSE;
    if (FromList->itemParent)
    {
        DWORD k;
        for (k = 0; k < FromList->itemParent->AllocatedChilds; k++)
            if (&(FromList->itemParent->childNodes[k]) == FromList)
            {
                BOOL res = RemoveChildNode(FromList->itemParent, k);
                return res;
            }
    }
    do
    {
        RemoveChildNode(FromList, 0);
    } while (FromList->AllocatedChilds>0);
    mir_free_and_nil(FromList->childNodes);
    mir_free_and_nil(FromList);
    return TRUE;
}
Ejemplo n.º 4
0
void Node::Deinitialize() {
    OnDeinitialize();

    // clear all children
    while(mChildren.size() > 0) {
        RemoveChildNode(mChildren.begin()->first);
    }

    // clear all components
    while(mComponents.size() > 0) {
        RemoveComponent(mComponents.begin()->second->GetName());
    }
}
Ejemplo n.º 5
0
BOOL RemoveChildNode(NodeList * FromList, DWORD index)
{
    if (!FromList) return FALSE;
    if (FromList->AllocatedChilds <= index) return FALSE;
    NodeList *work = &(FromList->childNodes[index]);
    for (size_t i = 0; i < work->AllocatedChilds; i++)
        if (work->childNodes[i].AllocatedChilds)
            RemoveChildNode(work->childNodes, (DWORD)i);

    if (work->AllocatedChilds) {
        mir_free_and_nil(work->childNodes);
        work->AllocatedChilds = 0;
    }
    memmove(FromList->childNodes + index, FromList->childNodes + index + 1, sizeof(NodeList)*(FromList->AllocatedChilds - index - 1));
    FromList->AllocatedChilds--;
    return TRUE;
}
Ejemplo n.º 6
0
void Node::_UpdateAllChildren(double time_diff) {
    mIsUpdatingAfterChange = (time_diff == 0);

    for(auto iter = mChildren.begin(); iter != mChildren.end(); ++iter) {
        if(iter->second->mDeathMark) {
            //Kill it if the death mark is set.
            Node* node = iter->second;
            iter--;
            QString name = node->GetName();
            RemoveChildNode(name);
        }
        else {
            iter->second->OnUpdate(time_diff);
        }
    }

    mIsUpdatingAfterChange = false;
}
void USoundNodeRandom::PostLoad()
{
	Super::PostLoad();
	if (!GIsEditor && PreselectAtLevelLoad > 0)
	{
		while (ChildNodes.Num() > PreselectAtLevelLoad)
		{
			RemoveChildNode(FMath::Rand() % ChildNodes.Num());
		}
	}
#if WITH_EDITOR
	else if (GEditor != nullptr && (GEditor->bIsSimulatingInEditor || GEditor->PlayWorld != NULL))
	{
		UpdatePIEHiddenNodes();
	}
#endif //WITH_EDITOR

	FixWeightsArray();
	FixHasBeenUsedArray();
}
Ejemplo n.º 8
0
BOOL RemoveChildNode(NodeList * FromList, DWORD index)
{
	DWORD i;
	NodeList * work;
	if (!FromList) return FALSE;
	if (FromList->AllocatedChilds<=index) return FALSE;
	work=&(FromList->childNodes[index]);
	for(i=0; i<work->AllocatedChilds; i++)
	{
		if (work->childNodes[i].AllocatedChilds)
			RemoveChildNode(work->childNodes,i);
	}
	if (work->AllocatedChilds) 
	{
		mir_free(work->childNodes);
		work->AllocatedChilds=0;
	}
	//mir_free(work);
	memcpy(FromList->childNodes+index,FromList->childNodes+index+1,sizeof(NodeList)*(FromList->AllocatedChilds-index-1));
	FromList->AllocatedChilds--;
	return TRUE;
}
void MkCheckBoxControlNode::_SetCaption(const MkArray<MkHashStr>& textNode, const MkStr& caption)
{
	if (textNode.Empty() || (!MK_STATIC_RES.TextNodeExist(textNode)))
	{
		RemoveChildNode(CaptionNodeName);
		m_CaptionString.Clear();
		return;
	}

	// MkWindowTagNode 사용
	MkWindowTagNode* node = NULL;
	if (ChildExist(CaptionNodeName))
	{
		node = dynamic_cast<MkWindowTagNode*>(GetChildNode(CaptionNodeName));
	}
	else
	{
		node = MkWindowTagNode::CreateChildNode(this, CaptionNodeName);
		if (node != NULL)
		{
			node->SetAlignmentPivotIsWindowRect(true);
			node->SetAlignmentPosition(eRAP_RMostCenter);
			node->SetAlignmentOffset(MkFloat2(node->GetLengthOfBetweenIconAndText(), 0.f));
		}
	}

	if (node != NULL)
	{
		m_CaptionString = caption;
		if (caption.Empty())
		{
			node->SetTextName(textNode);
		}
		else
		{
			node->SetTextName(textNode, caption);
		}
	}
}
Ejemplo n.º 10
0
bool MkWindowThemedNode::_UpdateThemeComponent(void)
{
	m_UpdateCommand.Set(eUC_Region); // theme, component, shadow가 변경되면 region도 갱신되야 함

	const MkWindowThemeFormData* formData = MK_STATIC_RES.GetWindowThemeSet().GetFormData(m_ThemeName, m_ComponentType, m_CustomFormName);
	if ((formData != NULL) && formData->AttachForm(this))
	{
		if (m_UseShadow)
		{
			if (ChildExist(ShadowNodeName))
			{
				MkWindowThemedNode* shadowNode = dynamic_cast<MkWindowThemedNode*>(GetChildNode(ShadowNodeName));
				if (shadowNode != NULL)
				{
					shadowNode->SetThemeName(m_ThemeName);
				}
			}
			else
			{
				MkWindowThemedNode* shadowNode = CreateChildNode(this, ShadowNodeName);
				if (shadowNode != NULL)
				{
					shadowNode->SetLocalDepth(0.1f); // form panel들과 겹치는 것을 피하기 위해 0.1f만큼 뒤에 위치
					shadowNode->SetThemeName(m_ThemeName);
					shadowNode->SetComponentType(MkWindowThemeData::eCT_ShadowBox);
					shadowNode->SetFormState(MkWindowThemeFormData::eS_Default);
					shadowNode->SetAlignmentTargetIsWindowRect(false); // 자신과 shadow node의 client rect끼리 정렬
					shadowNode->SetAlignmentPosition(eRAP_LeftBottom); // client size를 동일하게 맞출 것이므로 아무거나 상관 없음
				}
			}
		}
		return true;
	}

	MkWindowThemeFormData::RemoveForm(this);
	RemoveChildNode(ShadowNodeName);
	return false;
}