void ActorManager::RemoveActor(ActorId id) { m_ActorMap.erase(id); // StrongActorPtr actor = GetActor(id); std::list<StrongActorPtr> actorList = m_ActorsByIpMap[actor->GetIp()]; for (std::list<StrongActorPtr>::iterator i = actorList.begin(); i != actorList.end(); ++i) { StrongActorPtr pActor = *i; if (pActor->GetName().compare(actor->GetName()) == 0) { actorList.erase(i); //we break the iterator but we leave ah ah. break; } } }
void AttackProc::Attack(StrongActorPtr aAttacker, StrongActorPtr aTarget) { int attackerDamage = -1; int targetDamage = -10; HydrusActorStats* attackerStats = aAttacker->GET_COMPONENT(HydrusActorStats); HydrusActorStats* targetStats = aTarget->GET_COMPONENT(HydrusActorStats); tempAttackFunc(attackerStats, targetStats, attackerDamage, targetDamage); attackerStats->ModifyStats(attackerDamage,"health",aTarget->GetName(),COUNTER_ATTACK_DAMAGE); targetStats->ModifyStats(targetDamage,"health",aAttacker->GetName(),ATTACK_DAMAGE); }
void HumanBrain::DetermineAction(HydrusEncounter* aEncounter) { StrongActorPtr actor = MakeStrongPointer(this->GetActor()); std::string actionType; system("cls"); std::cout << actor->GetName() << std::endl; g_pStringHandler->PrintString(READY_OPTIONS); GalaxyAlgorithms::StringInput(actionType, "a"); enum ActionType act = GalaxyAlgorithms::ConvertStringToAction(actionType); switch (act) { case ATTACK: p_gEventManager->FireEvent(StrongEventPtr(GALAXY_NEW TargetingEvent(GALAXY_NEW EventData_Targeting(actor->GetActorId(), aEncounter, ATTACK)))); break; case PASS: // Nothing? break; default: assert(0); break; } }
const StrongActorPtr ActorManager::GetActorByName(unsigned int ip, std::string actorName) { std::list<StrongActorPtr> actorList = m_ActorsByIpMap[ip]; // for (std::list<StrongActorPtr>::iterator i = actorList.begin(); i != actorList.end(); ++i) { StrongActorPtr pActor = *i; if (pActor->GetName().compare(actorName)==0) { return pActor; } } return NULL; }
void RemoteNetworkView::GetActor(IEventDataPtr pEventData) { char response[4]; std::string httpinmsg; IEventDataPtr pResponseHttpEvent(CREATE_EVENT(EventData_ResponseHTTP::sk_EventType)); std::shared_ptr<EventData_GetActor> pCastEventData = std::static_pointer_cast<EventData_GetActor>(pEventData); std::string name = pCastEventData->VGetActorName(); unsigned int ip = pCastEventData->VGetIp(); pResponseHttpEvent->VSetSocketId(pEventData->VGetSocketId()); pResponseHttpEvent->VSetIp(ip); //look for actor data in actor manager by ip / actor name StrongActorPtr pActor = m_ActorManager->GetActorByName(ip, name); if (pActor == NULL) { _itoa_s(http_response_code_t::NOTFOUND, response,10); httpinmsg.append(response); std::istrstream in(httpinmsg.c_str(),httpinmsg.size()); pResponseHttpEvent->VDeserialize(in); IEventManager::Get()->VTriggerEvent(pResponseHttpEvent); } else { // Better (de-)serialize Actor with streams std::string buffer; _itoa_s(http_response_code_t::OK, response, 10); buffer.append(response); buffer.append(" "); char* id = new char[10]; sprintf_s(id, 10, "%d", pActor->GetId()); buffer.append(id); buffer.append("#"); buffer.append(pActor->GetName()); buffer.append("#"); Vec3 position = pActor->GetPosition(); char *xpos = new char[10]; sprintf_s(xpos, 10, "%.3f", position.x); buffer.append(xpos); buffer.append("#"); char *ypos = new char[10]; sprintf_s(ypos, 10, "%.3f", position.y); buffer.append(ypos); buffer.append("#"); char *zpos = new char[10]; sprintf_s(zpos, 10, "%.3f", position.z); buffer.append(zpos); buffer.push_back('\0'); // when found, send answer std::istrstream in(buffer.c_str(), buffer.size()); pResponseHttpEvent->VDeserialize(in); IEventManager::Get()->VTriggerEvent(pResponseHttpEvent); } }
ActorId ActorManager::AddActor(StrongActorPtr pActor) { ActorId id; // if an actor already exists, do not create StrongActorPtr actorTest = GetActorByName(pActor->GetIp(),pActor->GetName()); if (actorTest == NULL) { id = pActor->GetId(); // No id affected yet if (id == -1) { id = GetNextLastId(); pActor->SetId(id); m_ActorMap[id] = pActor; //alternative //m_ActorMap.insert(std::pair<ActorId, Actor>(id, actor)); // add the actor for this Ip m_ActorsByIpMap[pActor->GetIp()].push_back(pActor); } } else { id = actorTest->GetId(); } return id; }