Ejemplo n.º 1
0
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;
    }
}
Ejemplo n.º 2
0
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");
}