nuclear@2: #include nuclear@1: #include nuclear@5: #include "gobj.h" nuclear@1: nuclear@1: GameObject::GameObject() nuclear@1: { nuclear@1: sorted = true; nuclear@1: } nuclear@1: nuclear@1: GameObject::~GameObject() nuclear@1: { nuclear@1: for(size_t i=0; iget_name(); nuclear@1: nuclear@1: if(comp_by_name.find(name) != comp_by_name.end()) { nuclear@1: fprintf(stderr, "component %s already exists in this game object (%p)\n", name, (void*)this); nuclear@1: return false; nuclear@1: } nuclear@1: nuclear@1: try { nuclear@1: comp.push_back(c); nuclear@1: comp_by_name[name] = c; nuclear@2: nuclear@2: c->gobj = this; nuclear@1: } nuclear@1: catch(...) { nuclear@1: fprintf(stderr, "failed to add component: %s\n", name); nuclear@1: return false; nuclear@1: } nuclear@1: nuclear@1: sorted = false; nuclear@1: return true; nuclear@1: } nuclear@1: nuclear@1: bool GameObject::remove_component(Component *c) nuclear@1: { nuclear@1: for(size_t i=0; iget_name()); nuclear@1: return true; nuclear@1: } nuclear@1: } nuclear@1: return false; nuclear@1: } nuclear@1: nuclear@1: bool GameObject::delete_component(Component *c) nuclear@1: { nuclear@1: if(remove_component(c)) { nuclear@1: delete c; nuclear@1: return true; nuclear@1: } nuclear@1: return false; nuclear@1: } nuclear@1: nuclear@1: Component *GameObject::get_component(const char *name) const nuclear@1: { nuclear@1: std::map::const_iterator it; nuclear@1: if((it = comp_by_name.find(name)) != comp_by_name.end()) { nuclear@1: return it->second; nuclear@1: } nuclear@1: return 0; nuclear@1: } nuclear@1: nuclear@1: void GameObject::update() nuclear@1: { nuclear@1: if(!sorted) { nuclear@1: std::sort(comp.begin(), comp.end()); nuclear@1: } nuclear@1: nuclear@1: for(size_t i=0; iupdate(); nuclear@1: } nuclear@1: }