void CSwordSlashController::process(const std::shared_ptr<Logic::IMessage> &message)
	{
		if((message->getType().compare("TOUCHED") == 0))
		{
			Logic::CEntity *otherEntity = dynamic_cast<TOUCHED*>(message.get())->getEntidad();

			if(otherEntity)
			{
				if (otherEntity->getTag() == "enemy")
				{
					if(_damage>0)
					{
						std::shared_ptr<DAMAGED> m(new DAMAGED());
						m->setFloat(_damage);
						m->setString(_entity->getType());
						otherEntity->emitMessage(m);

						std::shared_ptr<PUSH> pushMessage(new PUSH());
						pushMessage->setDirection(_direction);
						pushMessage->setSpeed(0.5f);
						otherEntity->emitMessage(pushMessage, this);

						//BaseSubsystems::Log::Debug("ÑAPA: " + std::to_string(_damage));
					}

					Logic::CEntityFactory::getSingletonPtr()->createEntityByType("ChispaDanhoEnemy",
						otherEntity->getCenterPosition(), 
						_entity->getMap());
				}
			}
		}
	} // process
	void activateHealZone(unsigned int entityID)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MActivateHealZone *m = new Logic::MActivateHealZone();
		entity->emitMessage(m);
	}
	void atacarJack(unsigned int entityID)
	{
		Logic::CEntity * jack = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::CEntity* * entidadesColision;
		int numColisiones = Physics::CServer::getSingletonPtr()->detectCollisions(jack->getPosition(), 40, entidadesColision);

		for(int i = 0; i < numColisiones; ++i)
		{
			if (!entidadesColision[i]->getTag().compare("enemy")) 
			{
				//Entidad enemiga que atacará a Jack
				Logic::CEntity * entidad = entidadesColision[i];

				std::stringstream script;
				script << "enemyEvent(\"AttackJack\", " << entidad->getEntityID() << ")";
				ScriptManager::CServer::getSingletonPtr()->executeScript(script.str().c_str());

				Logic::MAttackEntity *message = new Logic::MAttackEntity();
				message->setAttack(true);
				message->setEntity(jack);
				entidad->emitMessage(message);
			}
		}
	}
	void empujarCircle(unsigned int entityID)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MPushEntities *m = new Logic::MPushEntities();

		entity->emitMessage(m);
	}
	void SendMinionCreated(Logic::CEntity* minionCreated, std::string leaderName)
	{
		Logic::CEntity* leader = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName(leaderName);

		std::shared_ptr<Logic::GET_LOGIC_ENTITY>m(new Logic::GET_LOGIC_ENTITY());
		m->setEntity(minionCreated);
		leader->emitMessage(m);
	}
	void shakeCamera(Logic::CEntity *entity, float max, float min)
	{
		Logic::CEntity* cam = entity->getMap()->getEntityByType("Camera");

		std::shared_ptr<Logic::SHAKE> m(new Logic::SHAKE());
		m->setMaxShake(max);
		m->setMinShake(min);
		cam->emitMessage(m);
	}
	void cancelCure(unsigned int entityID)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);
		
		Logic::MCureEntity *m = new Logic::MCureEntity();
		m->setCure(false);

		entity->emitMessage(m);
	}
	void detenerEnemigosContraEnemigos(unsigned int entityID)
	{
		//Mandamos un mensaje para que salga el icono de aturdido
		Logic::MAturdido *message = new Logic::MAturdido();
		message->setAturdido(false);
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);
		if (entity)
			entity->emitMessage(message);
	}
	void launchFlameThrower(unsigned int entityID, float point_x, float point_y, float point_z)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MLanzarLlamas *m = new Logic::MLanzarLlamas();
		m->setPosition(Vector2(point_x, point_z));
		m->setOrdenLlamas(Logic::OrdenLlamas::lanzarLlamas);

		entity->emitMessage(m);
	}
	void cancelFlameThrower(unsigned int entityID)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MLanzarLlamas *m = new Logic::MLanzarLlamas();
		m->setPosition(Vector2(0, 0));
		m->setOrdenLlamas(Logic::OrdenLlamas::ocultarBLamas);

		entity->emitMessage(m);
	}
	void launchPowerShoot(unsigned int entityID, float point_x, float point_y, float point_z)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MDisparosPotentes *m = new Logic::MDisparosPotentes();
		m->setPosition(Vector2(point_x, point_z));
		m->setOrdenDisparos(Logic::OrdenDisparos::disparar);

		entity->emitMessage(m);
	}
	void cancelPowerShoot(unsigned int entityID)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MDisparosPotentes *m = new Logic::MDisparosPotentes();
		m->setPosition(Vector2(0, 0));
		m->setOrdenDisparos(Logic::OrdenDisparos::ocultarCono);

		entity->emitMessage(m);
	}
	void launchGrenade(unsigned int entityID, float point_x, float point_y, float point_z)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MLanzarGranada *m = new Logic::MLanzarGranada();
		//m->setPosition(Vector2(entity->getPosition().x, entity->getPosition().y));
		m->setPosition(Vector2(point_x, point_z));
		m->setOrdenGranada(Logic::OrdenGranada::lanzar);

		entity->emitMessage(m);
	}
	void startCure(unsigned int entityID, unsigned int entityIDTarget)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);
		Logic::CEntity *entityTarget = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityIDTarget);

		Logic::MCureEntity *m = new Logic::MCureEntity();
		m->setEntity(entityTarget);
		m->setCure(true);

		entity->emitMessage(m);
	}
示例#15
0
	void CCameraFeedbackNotifier::damaged(Vector3 vEnemyPosition) {
		std::shared_ptr<Logic::CMessageCameraOffset> m3 = std::make_shared<Logic::CMessageCameraOffset>();
		m3->setOffsetTimer(100.0f);//Timer								 
		Logic::CEntity * camera = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Camera");
		assert(camera != NULL && "Error: Esto no se puede hacer asi que sois unos lamers, ahora el servidor que hace?");
		camera->emitMessage(m3);

		_scene->setCompositorVisible(_effect, true);
		_effectIsActivated = true;
		_timestamp = 0;

		calculateEnemyPosition(vEnemyPosition);
	}// damaged
	void activateBulletTime(unsigned int entityID)
	{
		Logic::CEntity *entity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::MActivarTiempoBala *m = new Logic::MActivarTiempoBala();
		m->setTime(5.0f);
		unsigned int norah = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Norah")->getEntityID();
		unsigned int jack = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Jack")->getEntityID();
		unsigned int erick = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Erick")->getEntityID();
		m->addEntity(norah);
		m->addEntity(jack);
		m->addEntity(erick);

		unsigned int playerGod = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("PlayerGod")->getEntityID();
		m->addEntity(playerGod);
		
		entity->emitMessage(m);
	}
	void enemigosContraEnemigos(unsigned int entityID)
	{
		Logic::CEntity * norah = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		Logic::CEntity* * entidadesColision;
		int numColisiones = Physics::CServer::getSingletonPtr()->detectCollisions( norah->getPosition(),80,entidadesColision);

		//Iniciamos la tabla de los enemigos afectados
		std::stringstream script1;
		script1 << "enemigosConfundidos = {}";
		ScriptManager::CServer::getSingletonPtr()->executeScript(script1.str().c_str());


		for(int i = 0; i < numColisiones; ++i)
		{
			if ( !entidadesColision[i]->getTag().compare("enemy") ) {
				//Entidad enemiga que atacara a otros enemigos
				Logic::CEntity * entidad = entidadesColision[i];

				float distX = entidad->getPosition().x - norah->getPosition().x;
				float distZ = entidad->getPosition().z - norah->getPosition().z;
				float distance2 = distX * distX + distZ * distZ;

				//Solo entraran al estado los que esten a una distancia menor de 40
				if (distance2 < 40 * 40) {
					std::stringstream script2;
					script2 << "enemyEvent(\"AttackOtherEnemies\", " << entidad->getEntityID() << ")";
					ScriptManager::CServer::getSingletonPtr()->executeScript(script2.str().c_str());

					//Mandamos un mensaje para que salga el icono de aturdido
					Logic::MAturdido *message = new Logic::MAturdido();
					message->setAturdido(true);
					entidad->emitMessage(message);
				}

				//Atacaran hasta a los que esten a una distancia de 80

				//Añadimos el enemigo a la tabla de los enemigos afectados entre los que se pueden atacar
				std::stringstream script3;
				script3 << "enemigosConfundidos[" << i+1 << "] = " << entidad->getEntityID();
				ScriptManager::CServer::getSingletonPtr()->executeScript(script3.str().c_str());
			}
		}
	}
	void activateMassHeal(unsigned int entityID, float heal)
	{
		Logic::CEntity *healer = Logic::CServer::getSingletonPtr()->getMap()->getEntityByID(entityID);

		/*Logic::CEntity *jackEntity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Jack");
		Logic::CEntity *erickEntity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Erick");
		Logic::CEntity *norahEntity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByName("Norah");

		Logic::MHealed *m_heal = new Logic::MHealed();
		m_heal->setHeal(heal);
		m_heal->setHealer(healer);*/

		Logic::CEntity *playerEntity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByTag("Player");
		while (playerEntity != NULL) {
			Logic::MHealed *m_heal = new Logic::MHealed();
			m_heal->setHeal(heal);
			m_heal->setHealer(healer);
			playerEntity->emitMessage(m_heal);

			playerEntity = Logic::CServer::getSingletonPtr()->getMap()->getEntityByTag("Player", playerEntity);
		}
	}
	void sendCancelOpenChestMessage(Logic::CEntity &entity)
	{
		std::shared_ptr<Logic::CANCEL_OPEN> m (new Logic::CANCEL_OPEN());
		entity.emitMessage(m);
	}
	//Manda un mensaje de OPEN_CHEST desde LUA a la entidad indicada
	void sendOpenChestMessage(Logic::CEntity &entity)
	{
		std::shared_ptr<Logic::OPEN_CHEST> m (new Logic::OPEN_CHEST());
		entity.emitMessage(m);

	}