IComponent* Entity::GetComponent(ComponentID componentID) const { if(!HasComponent(componentID)){ throw EntityDoesNotHaveComponentException("Entity::GetComponent", COMPONENT_NAMES[componentID]); } return m_pComponents[componentID]; }
bool Entity::AddComponent(std::unique_ptr<Component>& component) { std::string cName = component->GetName(); if (HasComponent(cName)) return false; mComponents.insert(std::make_pair(cName, std::move(component))); mTypes.insert(cName); return true; }
void Entity::RemoveComponent(ComponentID componentID) { if(!HasComponent(componentID)){ throw EntityDoesNotHaveComponentException("Entity::RemoveComponent", COMPONENT_NAMES[componentID]); } delete m_pComponents[componentID]; m_pComponents[componentID] = nullptr; m_pObserver->Notify(this, componentID, ComponentEvent::ComponentRemoved); }
void Entity::AddComponent(IComponent* pComponent) { if(!pComponent){ throw NullPointerException("Entity::AddComponent", "Component is null"); } ComponentID componentID = pComponent->GetComponentID(); if(HasComponent(componentID)){ throw EntityAlreadyHasComponentException("Entity::AddComponent", COMPONENT_NAMES[componentID]); } m_pComponents[componentID] = pComponent; m_pObserver->Notify(this, componentID, ComponentEvent::ComponentAdded); }
ComponentType* AddComponent(ComponentType* component) { const QString& cname = component->GetName(); if(!HasComponent(cname)) { std::shared_ptr<Component> ptr(component); ptr->SetNode(this); ptr->Initialize(); std::pair<QString, std::shared_ptr<Component> > pair(cname, ptr); mComponents.insert(pair); if(!mIsEnabled) component->Disable(); _UpdateAllComponents(0); } else { Logger::Get().Error("Cannot add component " + cname + ": a component with this name already exists."); } return FindComponent<ComponentType>(cname); }
/** * @brief Same as get component by name except returns true or false * @param aName Name of component * @return True if object has component */ bool GameObject::HasComponentByName(HashString const &aName) { return HasComponent(aName.ToHash()); }
void Node::RemoveComponent(const std::string& name) { if(HasComponent(name)) { Root::get_mutable_instance().GetComponentsManager()->DestroyComponent(name); } }
void Node::AddComponent(Component<ComponentListener>* component) { if(!HasComponent(component->GetName())) { Root::get_mutable_instance().GetComponentsManager()->AddComponent(mName, component); } }
ComponentType* FindComponent(const QString& name) { if(!HasComponent(name)) return nullptr; return dynamic_cast<ComponentType*>(mComponents[name].get()); }
void Node::RemoveComponent(const QString& name) { if(HasComponent(name)) { mComponents[name]->Deinitialize(); mComponents.erase(name); } }
bool HasComponent() const { static_assert(std::is_base_of<Component, T>::value, "HasComponent needs a subclass of Component"); return HasComponent(&typeid(T)); }