示例#1
0
文件: Entity.cpp 项目: TimJGit/ECS
IComponent* Entity::GetComponent(ComponentID componentID) const
{
	if(!HasComponent(componentID)){
		throw EntityDoesNotHaveComponentException("Entity::GetComponent", COMPONENT_NAMES[componentID]);
	}

	return m_pComponents[componentID];
}
示例#2
0
	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;
	}
示例#3
0
文件: Entity.cpp 项目: TimJGit/ECS
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);
}
示例#4
0
文件: Entity.cpp 项目: TimJGit/ECS
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);
}
示例#5
0
    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);
    }
示例#6
0
/**
 * @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());
}
示例#7
0
void Node::RemoveComponent(const std::string& name) {
    if(HasComponent(name)) {
        Root::get_mutable_instance().GetComponentsManager()->DestroyComponent(name);
    }
}
示例#8
0
void Node::AddComponent(Component<ComponentListener>* component) {
    if(!HasComponent(component->GetName())) {
        Root::get_mutable_instance().GetComponentsManager()->AddComponent(mName, component);
    }
}
示例#9
0
 ComponentType* FindComponent(const QString& name) {
     if(!HasComponent(name))
         return nullptr;
     return dynamic_cast<ComponentType*>(mComponents[name].get());
 }
示例#10
0
void Node::RemoveComponent(const QString& name) {
    if(HasComponent(name)) {
        mComponents[name]->Deinitialize();
        mComponents.erase(name);
    }
}
示例#11
0
文件: ecs.hpp 项目: respu/microecs
	bool HasComponent() const {
		static_assert(std::is_base_of<Component, T>::value, "HasComponent needs a subclass of Component");
		return HasComponent(&typeid(T));
	}