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; } }
void USoundNodeRandom::PostLoad() { Super::PostLoad(); if (!GIsEditor && PreselectAtLevelLoad > 0) { while (ChildNodes.Num() > PreselectAtLevelLoad) { RemoveChildNode(FMath::Rand() % ChildNodes.Num()); } } }
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; }
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()); } }
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; }
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(); }
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); } } }
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; }