void World::AddActor(Actor* actor) { auto findIt = mActors.find(actor->getId()); if (findIt == mActors.end()) { actor->mId = GetNextActorId(); mActors[actor->getId()] = actor; } }
/* * Name: KeActorFactory::CreateActor * Desc: */ KeStrongActorPtr KeActorFactory::CreateActor( const char* actor_resource ) { /* Parse the XML data */ ezxml_t xml = ezxml_parse_str( (char*) actor_resource, strlen( actor_resource ) ); if( !xml ) { return KeStrongActorPtr(); } /* Create a new actor instance */ KeStrongActorPtr actor( new KeActor( GetNextActorId() ) ); if( !actor->Init(xml) ) { } }
Actor* ActorFactory::CreateActor(tinyxml2::XMLElement* actorNode, std::string sourceName) { Actor* pActor = new Actor; pActor->SetId(GetNextActorId()); pActor->SetSource(sourceName); tinyxml2::XMLElement* propertiesNode = actorNode->FirstChildElement("Properties"); if (!propertiesNode) { LOG("Actor Factory", "Failed to load actor properties"); return NULL; } else { if (!pActor->Init(propertiesNode)) { LOG("Actor Factory", "Actor properties node loading failed"); return false; } } //-------------------------------------------------------- tinyxml2::XMLElement* componentsNode = actorNode->FirstChildElement("Components"); if (!componentsNode) { LOG("Actor Factory", "Failed to load actor components"); return NULL; } else { tinyxml2::XMLElement* rendCompNode = componentsNode->FirstChildElement("RenderComponent"); if (rendCompNode) { Renderable*pRend = new Renderable(pActor); if (!pRend->Init(rendCompNode)) { LOG("Actor Factory", "Renderable component loading failed"); return false; } pActor->AddComponent(pRend); } tinyxml2::XMLElement* moveCompNode = componentsNode->FirstChildElement("MovableComponent"); if (moveCompNode) { Movable* pMoveComp = new Movable(pActor); if (!pMoveComp->Init(moveCompNode)) { LOG("Actor Factory", "Movable component loading failed"); return false; } pActor->AddComponent(pMoveComp); } tinyxml2::XMLElement* colCompNode = componentsNode->FirstChildElement("CollisionComponent"); if (colCompNode) { //std::sting type = colCompNode->FirstChildElement("Type")->Attribute("value"); //if (type == "BOX") //{ //colComp = new Rectangle(pActor); //} //else if (type == "BOX") //{ // colComp = new Rectangle(pActor); //} Collidable* pColComp; pColComp = new Rectangle(pActor); if (!pColComp->Init(moveCompNode)) { LOG("Actor Factory", "Rectangel collidable component loading failed"); return false; } pActor->AddComponent(pColComp); } } g_pBGL->GetLevelManager()->InsertActor(pActor); return pActor; }