void JTModelRemove(JTModel *Self, DefNode *Node) { VNode *view; DefNode *Parent = Node->Parent; Vec *vec = Parent->Children; VecRemove(vec, Node); view = Node->tnode.NextView; while (view) { JTreeRemView(view->Tree, view); view = view->NextView; } }
void State::Update(sf::RenderWindow& Window){ StateDB(2,"Top of Loop"); if(AddingObjects.size()){ StateDB(2,"Adding Objects"); while(AddingObjects.size()){ StateDB(3,"Added Object!"); auto it=AddingObjects.end()-1; auto obj=*it; StateObjects.push_back(obj); if(obj->Coll())CollidingObjects.push_back(obj); AddingObjects.erase(it); } sort(StateObjects.begin(),StateObjects.end(),[](Object* o,Object* oo){return o->Layer<oo->Layer;}); } StateDB(2,"Collision Cells"); std::map<pairf,vector<Object*>> ColCels; for(auto& it:CollidingObjects){ std::set<pairf> mycells=GetColPtMap(it,CellSize); for(auto& it2:mycells){ ColCels[it2].push_back(it); } ColCels[GetCell(it->Loc,CellSize)].push_back(it); } ///Collide Objects StateDB(2,"Collision Assignment"); for(auto& it:ColCels){ vector<Object*>* Objs=&it.second; for(unsigned int a=0;a<Objs->size()-1;a++){ Object* A=(*Objs)[a]; if(A->Coll()) for(unsigned int b=a+1;b<Objs->size();b++){ Object* B=(*Objs)[b]; if(B->Coll()){ if(!(A->Type==B->Type)||(A->SelfCol&&B->SelfCol)){ if(A->GetCol(B)){ A->ColObjects.insert(B); } } } } } it.second.clear(); } ColCels.clear(); StateDB(2,"Process Events"); ///Events for(sf::Event& Event:Game->GameEvents){ StateDB(3,"Event Checked!"); for(GameEvent& it:Events){ StateDB(5,"Game Events"); if(Event.Type==it.myEvent.Type){ if(Event.Type==sf::Event::KeyReleased||Event.Type==sf::Event::KeyPressed){ Event::KeyEvent& k=Event.Key,K=it.myEvent.Key; if(k.Code==K.Code&&k.Shift==K.Shift&&k.Alt==K.Alt&&k.Control==K.Control)it.Action(); }else if(Event.Type==Event::MouseButtonPressed||Event.Type==Event::MouseButtonReleased){ if(Event.MouseButton.Button==it.myEvent.MouseButton.Button)it.Action(); }else{ it.Action(); } } } } ///End Events ///Draw/Update Objects StateDB(2,"Draw and Update Objects"); for(auto& it:StateObjects){ if(it->ColObjects.size()){ StateDB(4,"Object Colliding"); for(auto& col:it->ColObjects){ it->Collision(col); col->Collision(it); } it->ColObjects.clear(); } StateDB(3,"Object Updated: "+it->myType); it->Update(); StateDB(3,"Object Drawn: "+it->myType); it->Draw(Window); } ///Remove Objects if(RemovingObjects.size()){ StateDB(2,"Removing Objects"); while(RemovingObjects.size()){ StateDB(2,"Object Removed"); auto end=RemovingObjects.end()-1; Object* O=(*end); O->Uninit(); VecRemove(O,StateObjects); if(O->Coll())VecRemove(O,CollidingObjects); if(Events.size()){ StateDB(2,"Event Removed"); unsigned int index=0; while(index<Events.size()){ GameEvent& E=Events[index]; if(E.Owner==O){ Events.erase(Events.begin()+index); } else index++; } } RemovingObjects.erase(end); StateDB(2,"Object Deleted"); O->~Object(); StateDB(2,"End of Deletion"); } } StateDB(2,"Bottom of Loop"); }