Beispiel #1
0
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;
		}
	}
}
Beispiel #2
0
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);

}
Beispiel #3
0
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;
	}
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
	}
}
Beispiel #6
0
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;
}