Exemple #1
0
Object* getSelectedObject(std::list<Object*>* allObjects, Player* player)
{
	if(!allObjects || allObjects->empty())
		return NULL;
	float a,b,c,d,e,f; 
	float minDistance = 999999999999;
	Object* closestObject;
	cv::Vec3f objectPosition;
	cv::Vec4f distanceVector;
	cv::Vec4f playerPosition(player->position[0], player->position[1], player->position[2], 1);
	cv::Vec4f lookAt(player->lookAtVector[0], player->lookAtVector[1], player->lookAtVector[2], 1);
	cv::Matx<float,4,4> plueckerCoords = playerPosition*lookAt.t() - lookAt*playerPosition.t();
	a = plueckerCoords(0,1);
	b = plueckerCoords(0,2);
	c = plueckerCoords(0,3);
	d = plueckerCoords(1,2);
	e = plueckerCoords(1,3);
	f = plueckerCoords(2,3);

	cv::Matx<float,4,4> dualPlueckerCoords(0, f, -e, d,
										   -f, 0, c, -b,
										   e, -c, 0, a,
										   -d, b, -a, 0);

	cv::Matx<float,3,3> A(0, f, -e,
						  -f, 0, c,
						  e, -c, 0);

	A = A.t()*A;

	dualPlueckerCoords = sqrt(2)/(A(0,0)*A(1,1)*A(2,2))*dualPlueckerCoords;
	
	
	for(std::list<Object*>::iterator it = allObjects->begin(); it != allObjects->end(); ++it)
	{
		objectPosition = (*it)->position;
		distanceVector = dualPlueckerCoords*cv::Vec4f(objectPosition(0), objectPosition(1), objectPosition(2), 1);
		std::cout << "vectorNorm" << cv::norm(cv::Vec3f(distanceVector(0),distanceVector(1),distanceVector(2))) << std::endl;
		if (minDistance > cv::norm(cv::Vec3f(distanceVector(0),distanceVector(1),distanceVector(2))))
		{
			minDistance = cv::norm(cv::Vec3f(distanceVector(0),distanceVector(1),distanceVector(2)));
			closestObject = (*it);
		}

	}
	std::cout << "plueckerCoords: " << plueckerCoords << std::endl;
	std::cout << "dualPlueckerCoords: " << dualPlueckerCoords << std::endl;
	std::cout << "plueckerCoords: " << a << "  " << b << "  " << c << "  " << d << "  " << e << "  " << f << std::endl;
	std::cout << "Minimum distance " << minDistance << std::endl;
	
	return closestObject;

	
	return NULL;
		
}
Exemple #2
0
void Tippeligaen::insertPlayerToTeamOfTheRound(){
    actionShowTeamOfTheRound_triggered();

    QSqlQuery insertTeamOfTheRound;
    insertTeamOfTheRound.prepare("INSERT INTO rundenslag (rundensLagNavn, navn, posisjon, lagNavn)"
                         "VALUES (:rundensLagNavn, :navn, :posisjon, :lagNavn)");
    insertTeamOfTheRound.bindValue(":rundensLagNavn", teamOfTheRoundIdLabel()->text());
    insertTeamOfTheRound.bindValue(":navn", playerName()->text());
    insertTeamOfTheRound.bindValue(":posisjon", playerPosition()->text());
    insertTeamOfTheRound.bindValue(":lagNavn", playerTeam()->text());
    insertTeamOfTheRound.exec();
}
void ComponentCamera::update()
{
	shake();

	// ZOOM/ALTURA de la camara
/*	if(eventManager->isKeyPressed(KEY::KEY_HOME) || eventManager->isKeyPressed(KEY::KEY_KEY_P))
	{
		relativePosition.y = startYPosition;
	}
	if(eventManager->mouseState.wheelUp || eventManager->isKeyPressed(KEY::KEY_PRIOR) || eventManager->isKeyPressed(KEY::KEY_KEY_O))
	{
		speed += ACCELERATION;
	}
	else if(eventManager->mouseState.wheelDown || eventManager->isKeyPressed(KEY::KEY_NEXT) || eventManager->isKeyPressed(KEY::KEY_KEY_L))
	{
		speed -= ACCELERATION;
	}

	if (speed > MAX_SPEED)
	{
		speed = MAX_SPEED;
	}
	if (speed < -MAX_SPEED)
	{
		speed = -MAX_SPEED;
	}

	speed *= FRICTION;

	if (Math::abs(speed) < Math::abs(0.1))
	{
		speed = 0;
	}

	relativePosition.y += speed;

	if (relativePosition.y > MAX_ZOOM)
	{
		relativePosition.y = MAX_ZOOM;
	}
	else if (relativePosition.y < MIN_ZOOM)
	{
		relativePosition.y = MIN_ZOOM;
	}
	*/

	Vector3d playerPosition(parent->position.x, 0, parent->position.y);
	node->setPosition(playerPosition + relativePosition + offset);
	node->setTargetPosition(playerPosition + offset);
}
  SimpleScene() : eyes({ { PerEyeArg(LEFT), PerEyeArg(RIGHT) } }) {
    eyeHeight = 1.0f;
    applyProjectionOffset = true;
    applyModelviewOffset = true;
    {
      OVR::Ptr<OVR::ProfileManager> profileManager = *OVR::ProfileManager::Create();
      OVR::Ptr<OVR::Profile> profile = *(profileManager->GetDeviceDefaultProfile(OVR::ProfileType::Profile_RiftDK1));
      ipd = profile->GetIPD();
      eyeHeight = profile->GetEyeHeight();
      glm::mat4 modelviewOffset = glm::translate(glm::mat4(),
        glm::vec3(ipd / 2.0f, 0, 0));
      eyes[LEFT].modelviewOffset = modelviewOffset;
      eyes[RIGHT].modelviewOffset = glm::inverse(modelviewOffset);
    }

    if (ovrManager) {
      ovrSensor =
        *ovrManager->EnumerateDevices<OVR::SensorDevice>().CreateDevice();
      if (ovrSensor) {
        sensorFusion.AttachToSensor(ovrSensor);
      }
    }
    if (sensorFusion.IsAttachedToSensor()) {
      SAY("Attached");
    } else {
      SAY("Attach failed");
    }

    {
      OVR::HMDInfo hmdInfo;
      Rift::getHmdInfo(ovrManager, hmdInfo);
      OVR::Util::Render::StereoConfig config;
      config.SetHMDInfo(hmdInfo);
      gl::Stacks::projection().top() = 
        glm::perspective(config.GetYFOVRadians(), eyeAspect, 0.01f, 1000.0f);
      glm::mat4 projectionOffset = glm::translate(glm::mat4(),
        glm::vec3(config.GetProjectionCenterOffset(), 0, 0));
      eyes[LEFT].projectionOffset = projectionOffset;
      eyes[RIGHT].projectionOffset = glm::inverse(projectionOffset);
    }

    glm::vec3 playerPosition(0, eyeHeight, ipd * 4.0f);
    player = glm::inverse(glm::lookAt(playerPosition, glm::vec3(0, eyeHeight, 0), GlUtils::Y_AXIS));
    CameraControl::instance().enableHydra(true);
  }
Exemple #5
0
int main( int argc, char* argv[] )
{	
	const int iScreenWidth = 1680;
	const int iScreenHeight = 1050;
	Initialise( iScreenWidth, iScreenHeight, false);

	uiBgImage = CreateSprite("./images/Blue Eye.png", iScreenWidth, iScreenHeight, false);

	Vector2D playerPosition(840, 625);
	Vector2D playerSpeed(0,0);
	Sprite Player(playerPosition, playerSpeed, 100, 100, -1); 

	do 
	{
		DrawSprite(uiBgImage);

	} while ( FrameworkUpdate() == false );
	
	Shutdown();

	return 0;
}
Exemple #6
0
void Tippeligaen::createTeamInfoGroupBox(){
    playerInfoGroupBox = new QGroupBox(tr("Spillerinfo"));
    _shirtLabel = new QLabel();
    _shirtLabel->setAlignment(Qt::AlignRight);
    _shirtLabel->setPixmap(QPixmap(":/bilder/0.png"));

    _playerNameLabel = new QLabel;
    _playerNameLabel->setText(tr("Spillernavn: "));
    _playerPositionLabel = new QLabel;
    _playerPositionLabel->setText(tr("Posisjon: "));
    _playerTeamLabel = new QLabel;
    _playerTeamLabel->setText(tr("Lag: "));

    deletePlayerButton = new QPushButton;
    deletePlayerButton->setText(tr("Slett"));
    addToTeamOfTheRoundButton = new QPushButton;
    addToTeamOfTheRoundButton->setText(tr("Legg til i rundens lag"));

    _playerName = new QLabel;
    _playerTeam = new QLabel;
    _playerPosition = new QLabel;

    QGridLayout *layout = new QGridLayout;
    layout->addWidget(playerNameLabel(), 0, 0);
    layout->addWidget(playerName(), 0, 1);
    layout->addWidget(playerPositionLabel(), 1, 0);
    layout->addWidget(playerPosition(), 1, 1);
    layout->addWidget(playerTeamLabel(), 2, 0);
    layout->addWidget(playerTeam(), 2, 1);
    layout->addWidget(deletePlayerButton, 3, 0);
    layout->addWidget(addToTeamOfTheRoundButton, 3, 1);
    layout->addWidget(shirtLabel(), 0, 2, 4, 1);
    playerInfoGroupBox->setLayout(layout);

    playerInfoGroupBox->setMinimumHeight(170);
}
Exemple #7
0
void MainGame::processInput(){
	SDL_Event evnt;

	const float CAMERA_SPEED = 2.0f;
	const float SCALE_SPEED = 0.1f;

	while (SDL_PollEvent(&evnt)) {
		switch (evnt.type)
		{
		case SDL_QUIT:
			_gameState = GameState::EXIT;
			break;
		case SDL_MOUSEMOTION:
			_inputManager.setMouseCoords(evnt.motion.x, evnt.motion.y);
			break;
		case SDL_KEYUP:
			_inputManager.releaseKey(evnt.key.keysym.sym);
			break;
		case SDL_KEYDOWN:
			_inputManager.pressKey(evnt.key.keysym.sym);
			break;
		case SDL_MOUSEBUTTONDOWN:
			_inputManager.pressKey(evnt.button.button);
			break;
		case SDL_MOUSEBUTTONUP:
			_inputManager.releaseKey(evnt.button.button);
			break;
		default:
			break;	
		}
	}

	if (_inputManager.isKeyDown(SDLK_ESCAPE)) {
		_gameState = GameState::EXIT;
	}
	if (_inputManager.isKeyDown(SDLK_w)) {
		_camera.setPosition(_camera.getPosition() + glm::vec2(0.0f, CAMERA_SPEED));
	}
	if (_inputManager.isKeyDown(SDLK_s)) {
		_camera.setPosition(_camera.getPosition() + glm::vec2(0.0f, -CAMERA_SPEED));
	}
	if (_inputManager.isKeyDown(SDLK_a)) {
		_camera.setPosition(_camera.getPosition() + glm::vec2(-CAMERA_SPEED, 0.0f));
	}
	if (_inputManager.isKeyDown(SDLK_d)) {
		_camera.setPosition(_camera.getPosition() + glm::vec2(CAMERA_SPEED, 0.0f));
	}
	if (_inputManager.isKeyDown(SDLK_q)) {
		_camera.setScale(_camera.getScale() + SCALE_SPEED);
	}
	if (_inputManager.isKeyDown(SDLK_e)) {
		_camera.setScale(_camera.getScale() + -SCALE_SPEED);
	}
	if (_inputManager.isKeyDown(SDL_BUTTON_LEFT)) {
		glm::vec2 coords = _inputManager.getMouseCoords();
		coords = _camera.convertScreenToWorld(coords);
		std::cout << coords.x << " " << coords.y << std::endl;

		glm::vec2 playerPosition(0.0f);
		glm::vec2 direction = coords - playerPosition;
		direction = glm::normalize(direction);

		_bullets.emplace_back(playerPosition, direction, 5.0f, 1000);
	}

}
Exemple #8
0
int main() {
	typedef std::deque<Invader> InvaderList;
	typedef std::deque<Shot> ShotList;

	cv::VideoCapture cap( DEFAULT_DEVICE );
	if(!cap.isOpened()) {
		std::cerr << "Error opening VideoCapture!" << std::endl;
		return -1;
	}
	
	cap.set(CV_CAP_PROP_FRAME_WIDTH, 1024);
	cap.set(CV_CAP_PROP_FRAME_HEIGHT, 768);
	
	cv::namedWindow("SpaceInvaders", CV_WINDOW_AUTOSIZE);
	
	cv::Mat cameraImage;
	cap >> cameraImage;
	
	const cv::Size CameraImageSize( cameraImage.size() );
	
	for (int key = -1; ' ' != key; key = cv::waitKey(WAIT_DELAY_MS)) {
		cap >> cameraImage;
		cv::flip(cameraImage, cameraImage, FLIPPING_AROUND_Y_AXIS);
		cv::putText(cameraImage, "Press space to play!", cv::Point(30,80), cv::FONT_HERSHEY_SIMPLEX, 2, cv::Scalar::all(255), 2, 8);
		cv::resize(cameraImage, cameraImage, CameraImageSize * 2);
		cv::imshow("SpaceInvaders", cameraImage);
	}
	
	const GameImage playerImage( PLAYER_PNG );
	const GameImage invaderImage( INVADER_PNG );
	
	const int YPlayerShot = CameraImageSize.height - playerImage.size().height;
	const int YGameOver = YPlayerShot - invaderImage.size().height;
	
	Player player(playerImage, CameraImageSize, SHOT_LINE_PIX);
	PlayerPosition playerPosition(player, HAARCASCADE_XML, CameraImageSize);
	Shot playerShot;
	bool gameOver = false;
	
	InvaderList invaders;
	std::generate_n(std::back_inserter(invaders), MAX_INVADERS, Invader::Factory(invaderImage, CameraImageSize, 5));
	
	ShotList shots;
	
	cv::RNG rng(uint64(std::time(0)));
	
	for (int key = -1; 'q' != key; key = cv::waitKey(WAIT_DELAY_MS)) {
		cap >> cameraImage;
		cv::flip(cameraImage, cameraImage, FLIPPING_AROUND_Y_AXIS);

		if (!gameOver) {
		
		playerPosition.update(cameraImage);
		playerShot.update();
		std::for_each(invaders.begin(), invaders.end(), GraphicUpdate);
		std::for_each(shots.begin(), shots.end(), GraphicUpdate);
		
		if (playerShot.isValid()) {
			const InvaderList::iterator iInvaderEnd = std::remove_if(invaders.begin(),invaders.end(), GraphicColision(playerShot.rect()));
			if (iInvaderEnd != invaders.end()) {
				invaders.erase(iInvaderEnd, invaders.end());
				playerShot = Shot();
			}
		}
		
		if (!shots.empty()) {
			const ShotList::iterator iShotsEnd = std::remove_if(shots.begin(), shots.end(), isInvalidShot);
			if (iShotsEnd != shots.end()) {
				shots.erase(iShotsEnd, shots.end());
			}
		}
		
		for (InvaderList::const_iterator iInvader = invaders.begin(); iInvader != invaders.end() && !gameOver; ++iInvader) {
			const cv::Rect irect( iInvader->rect() );
			if ((rng.uniform(0.0,1.0) < 0.05) && (shots.size() < MAX_INVADERS)) {
				cv::Point shotPos(irect.x + (irect.width / 2), irect.y + irect.height);
				shots.push_back( Shot(shotPos, SHOT_SPEED, cv::Scalar(100,50,100), CameraImageSize) );
			}
			if (irect.y >= YGameOver) {
				gameOver = true;
			}
		}
		
		if (!playerShot.isValid() && player.isShooting()) {
			cv::Point shotPoint( player.facePosition().x, YPlayerShot );
			playerShot = Shot(shotPoint, -SHOT_SPEED, cv::Scalar(100,170,10), CameraImageSize);
		}
		
		for (ShotList::iterator iShot(shots.begin()); iShot != shots.end() && !gameOver; ++iShot) {
			if (iShot->isValid() && checkColision(iShot->rect(),player.rect())) {
				gameOver = true;
			}
		}
		
		}
		
		std::for_each(invaders.begin(), invaders.end(), GraphicPaint(cameraImage));
		std::for_each(shots.begin(), shots.end(), GraphicPaint(cameraImage));
		player.paint(cameraImage);
		playerShot.paint(cameraImage);
		
		if (invaders.empty()) {
			cv::putText(cameraImage, "Winner!", cv::Point(30,80), cv::FONT_HERSHEY_SIMPLEX, 3, cv::Scalar::all(255), 2, 8);
		} else if (gameOver) {
			cv::putText(cameraImage, "Game Over!", cv::Point(30,80), cv::FONT_HERSHEY_SIMPLEX, 3, cv::Scalar::all(255), 2, 8);
		}
		
		cv::resize(cameraImage, cameraImage, CameraImageSize * 2);
		cv::imshow("SpaceInvaders", cameraImage);
	}
	
	return 0;
}
/**
 ****************************************************************************************************
	\fn			void Update( GameEngine::Entity &i_entity )
	\brief		Update the position of Enemy
	\param		i_entity entity to be updated
	\return		NONE
 ****************************************************************************************************
*/
void EnemyController::Update( GameEngine::Entity &i_entity )
{
	FUNCTION_START;

	_bSprint = false;

	switch( _enemyState )
	{
	case E_ENEMY_IDLE:
		if( g_captureTheFlag::Get().m_playerTeam == Utilities::StringHash("BlueFlag") )
			g_world::Get().UpdateAIDestinationTo( i_entity.m_u8AIEntityIndex, GlobalConstant::BLUE_FLAG_NODE_ID );
		else
			g_world::Get().UpdateAIDestinationTo( i_entity.m_u8AIEntityIndex, GlobalConstant::RED_FLAG_NODE_ID );
		_prevState = _enemyState;
		_enemyState = E_ENEMY_SEARCH_FLAG;
		break;

	case E_ENEMY_SEARCH_FLAG:
		if( g_captureTheFlag::Get().m_bEnemyHasFlag == true )
		{
			g_world::Get().UpdateAIDestinationTo( i_entity.m_u8AIEntityIndex, GlobalConstant::GOAL_NODE_ID );
			_prevState = _enemyState;
			_enemyState = E_ENEMY_SEARCH_GOAL;
		}
		break;

	case E_ENEMY_SEARCH_GOAL:
		if( g_captureTheFlag::Get().m_bEnemyHasFlag == false )
		{
			_prevState = _enemyState;
			_enemyState = E_ENEMY_IDLE;
		}
		break;

	case E_ENEMY_TAG_PLAYER:
		//if( !_bAwareOfPlayer )
		{
			UINT32 u32NodeID;
			Utilities::Pointer::SmartPtr<GameEngine::Entity> player = g_world::Get().GetEntityByName( "Player" );

			D3DXVECTOR3 playerPosition( player->m_v3Position.X(), player->m_v3Position.Y(), player->m_v3Position.Z() );
			GameEngine::AI::FindClosestNodeIDFromPosition( playerPosition, u32NodeID );

			// If player moved to other area
			if( u32NodeID != _u32NewTargetNode )
				g_world::Get().UpdateAIDestinationTo( i_entity.m_u8AIEntityIndex, _u32NewTargetNode );
		}
		_bSprint = true;
		break;

	case E_ENEMY_ESCAPE:
		_bSprint = true;
		break;
	}

	if( !_bSprint && (_u32Power < GlobalConstant::MAX_POWER) )
		_u32Power += 1;

	GameEngine::Renderer::DrawSlider( D3DXVECTOR2(850, 64), _u32Power, 0, GlobalConstant::MAX_POWER );

	FUNCTION_FINISH;
}
Exemple #10
0
	void Engine::Execute()
	{
		// we don't have a state stack processor system yet
		// so lets just get a basic while loop running for testing
		
		
		Position playerPosition(0, 0, 0); 
		char hudActionMessage[0x100];
		char compassMessage[0x32];
		bool requestUpdateDisplay = true;
		bool requestClearActionMessage = false;
		int actionMessageClearDelay = 50;
		int actionMessageClearCounter = actionMessageClearDelay;
		
				
		sprintf(hudActionMessage, "%s", "Starting Out...");
		
		int actionMessageX = ((screen_->w / 2) - ((strlen(hudActionMessage) * 9) / 2));
		
		playerPosition.Copy(gameState_->GetPlayerPosition());
		
		int playerX = playerPosition.x_;
		int playerZ = playerPosition.y_;
		int compass = playerPosition.facing_;
		
		sprintf(compassMessage, "You are facing %s.",
			(0x0 == playerPosition.facing_) ? "North" :
			(0x1 == playerPosition.facing_) ? "East" :
			(0x2 == playerPosition.facing_) ? "South" :
			(0x3 == playerPosition.facing_) ? "West" : "<Invalid Direction>");

		int gameScreenX = 40;
		int gameScreenY = mainScreen_->h / 2 - screen_->h / 2;
		
		
		SDL_Surface* mainScreenOverlay = Engine::LoadImageResource("resources/overlays/mainscreen.png");
		
		if (!mainScreenOverlay)
		{
			this->Stop();
			return;
		}
		
		// small compass overlay images
		SDL_Surface** smallCompassOverlay = new SDL_Surface* [4];
		
		smallCompassOverlay[0] = Engine::LoadImageResource("resources/overlays/sm_compass_n.png");
		smallCompassOverlay[1] = Engine::LoadImageResource("resources/overlays/sm_compass_e.png");
		smallCompassOverlay[2] = Engine::LoadImageResource("resources/overlays/sm_compass_s.png");
		smallCompassOverlay[3] = Engine::LoadImageResource("resources/overlays/sm_compass_w.png");


		

		// better input handling
		const int MOTIONBUTTON_UP 			= 0x0;
		const int MOTIONBUTTON_DOWN 		= 0x1;
		const int MOTIONBUTTON_STRAFELEFT 	= 0x2;
		const int MOTIONBUTTON_STRAFERIGHT 	= 0x3;
		bool motionButtonDown[4] = { false, false, false, false };
		
		// slow the f*****g player down!
		int playerMotionDelay = 10;
		int playerMotionCounter = playerMotionDelay;
		
		
		// a minimap
		MiniMap miniMap(gameState_->GetCurrentMap(), 140, 140);

		// while the engine is running
		while(engineIsRunning_)
		{
			// process the events
			while(SDL_PollEvent(event_))
			{
				switch(event_->type)
				{
					// the window was closed
					case SDL_QUIT:
					{
						// stop the engine
						this->Stop();
					} break;

					// a key was pressed
					case SDL_KEYDOWN:
					{
						// what key is down
						switch(event_->key.keysym.sym)
						{
							case SDLK_ESCAPE:
							{
								// stop the engine
								this->Stop();
							} break;
							
							case 'w':
							case 'W':
							case SDLK_UP:
							{
								motionButtonDown[MOTIONBUTTON_UP] = true;
							} break;
							
							case 's':
							case 'S':
							case SDLK_DOWN:
							{
								motionButtonDown[MOTIONBUTTON_DOWN] = true;
							} break;
							
							case 'q':
							case 'Q':
							case SDLK_COMMA:
							case SDLK_LESS:
							{
								motionButtonDown[MOTIONBUTTON_STRAFELEFT] = true;
							} break;
							
							case 'e':
							case 'E':
							case SDLK_PERIOD:
							case SDLK_GREATER:
							{
								motionButtonDown[MOTIONBUTTON_STRAFERIGHT] = true;
							} break;
							
							default: break;
						} // end switch
					} break;
					
					// a key was released
					case SDL_KEYUP:
					{
						// what key is up
						switch(event_->key.keysym.sym)
						{
							case 'w':
							case 'W':
							case SDLK_UP:
							{
								motionButtonDown[MOTIONBUTTON_UP] = false;
							} break;
							
							case 's':
							case 'S':
							case SDLK_DOWN:
							{
								motionButtonDown[MOTIONBUTTON_DOWN] = false;
							} break;
							
							case 'q':
							case 'Q':
							case SDLK_COMMA:
							case SDLK_LESS:
							{
								motionButtonDown[MOTIONBUTTON_STRAFELEFT] = false;
							} break;
							
							case 'e':
							case 'E':
							case SDLK_PERIOD:
							case SDLK_GREATER:
							{
								motionButtonDown[MOTIONBUTTON_STRAFERIGHT] = false;
							} break;
							
							case 'a':
							case 'A':
							case SDLK_LEFT:
							{
								gameState_->TurnPlayerLeft();
								sprintf(hudActionMessage, "%s", "Turned Left...");
								requestUpdateDisplay = true;
							} break;
							
							case 'd':
							case 'D':
							case SDLK_RIGHT:
							{
								gameState_->TurnPlayerRight();
								sprintf(hudActionMessage, "%s", "Turned Right...");
								requestUpdateDisplay = true;
							} break;
							default: break;
						}
					} break;

					default: break;
				} // end switch
			} // end while
			
////////////////////////////////////////////////////////////////////////////////
// *************************** NEW PLAYER MOTION **************************** //
////////////////////////////////////////////////////////////////////////////////
			
			// are we moving forward?
			if (motionButtonDown[MOTIONBUTTON_UP])
			{
				if (--playerMotionCounter <= 0)
				{
					playerMotionCounter = playerMotionDelay;
					
					if (gameState_->MovePlayerForward())
					{
						sprintf(hudActionMessage, "%s", "Moved Forward...");
						requestUpdateDisplay = true;
					}
					else
					{
						sprintf(hudActionMessage, "%s", "That way is blocked!");
						requestUpdateDisplay = true;
					}
				}
			}
			
			// are we moving back?
			if (motionButtonDown[MOTIONBUTTON_DOWN])
			{
				if (--playerMotionCounter <= 0)
				{
					playerMotionCounter = playerMotionDelay;
					
					if (gameState_->MovePlayerBack())
					{
						sprintf(hudActionMessage, "%s", "Moved Back...");
						requestUpdateDisplay = true;
					}
					else
					{
						sprintf(hudActionMessage, "%s", "That way is blocked!");
						requestUpdateDisplay = true;
					}
				}
			}
			
			// are we strafing left?
			if (motionButtonDown[MOTIONBUTTON_STRAFELEFT])
			{
				if (--playerMotionCounter <= 0)
				{
					playerMotionCounter = playerMotionDelay;
					
					if (gameState_->MovePlayerLeft())
					{
						sprintf(hudActionMessage, "%s", "Stepped Left...");
						requestUpdateDisplay = true;
					}
					else
					{
						sprintf(hudActionMessage, "%s", "That way is blocked!");
						requestUpdateDisplay = true;
					}
				}
			}
			
			// are we strafing right?
			if (motionButtonDown[MOTIONBUTTON_STRAFERIGHT])
			{
				if (--playerMotionCounter <= 0)
				{
					playerMotionCounter = playerMotionDelay;
					
					if (gameState_->MovePlayerRight())
					{
						sprintf(hudActionMessage, "%s", "Stepped Right...");
						requestUpdateDisplay = true;
					}
					else
					{
						sprintf(hudActionMessage, "%s", "That way is blocked!");
						requestUpdateDisplay = true;
					}
				}
			}

			// is is time to request the action message be cleared?
			if (--actionMessageClearCounter <= 0)
			{
				actionMessageClearCounter = actionMessageClearDelay;
				requestClearActionMessage = true;
			}
			
			// should we clear the action message ?
			if (requestClearActionMessage)
			{
				sprintf(hudActionMessage, "%s", "Waiting...");
				requestClearActionMessage = false;
				requestUpdateDisplay = true;
			}
			
			// should we update the display?
			if (requestUpdateDisplay)
			{
				actionMessageX = ((screen_->w / 2) - ((strlen(hudActionMessage) * 9) / 2));
	
				playerPosition.Copy(gameState_->GetPlayerPosition());
	
				playerX = playerPosition.x_;
				playerZ = playerPosition.y_;
				compass = playerPosition.facing_;
	
				sprintf(compassMessage, "You are facing %s.",
					(0x0 == playerPosition.facing_) ? "North" :
					(0x1 == playerPosition.facing_) ? "East" :
					(0x2 == playerPosition.facing_) ? "South" :
					(0x3 == playerPosition.facing_) ? "West" : "<Invalid Direction>");
					
				
				mapView_->RenderMap(screen_, gameState_->GetCurrentMap(), gameState_->GetPlayerPosition());
				
				defaultFont_->Print(screen_, actionMessageX, 8, "%s", hudActionMessage);
				defaultFont_->Print(screen_, 8, screen_->h - 34, "Player X: %2d", playerX);
				defaultFont_->Print(screen_, 8, screen_->h - 25, "Player Z: %2d", playerZ);
				defaultFont_->Print(screen_, 8, screen_->h - 16, "%s", compassMessage);
			
				// blit the game screen onto the main screen
				Engine::BlitSprite(screen_, mainScreen_, gameScreenX, gameScreenY);
			
				// blit the overlays
				Engine::BlitSprite(mainScreenOverlay, mainScreen_, 0, 0);
				
				Engine::BlitSprite(smallCompassOverlay[compass], mainScreen_, 42, 42);
				
				// blit the minimap
				miniMap.Update();
				miniMap.Render(mainScreen_, 390, 290);
				
				requestUpdateDisplay = false;
			}
			
			
			
			// flip the screen
			this->FlipScreen();
			
			// reduce the cpu hoggingness of SDL ^-^
			SDL_Delay(20);
		} // end while
		
		Engine::UnloadImageResource(smallCompassOverlay[0]);
		Engine::UnloadImageResource(smallCompassOverlay[1]);
		Engine::UnloadImageResource(smallCompassOverlay[2]);
		Engine::UnloadImageResource(smallCompassOverlay[3]);
		delete [] smallCompassOverlay;
		
		Engine::UnloadImageResource(mainScreenOverlay);
		
		
	}
void CAIAwarenessToPlayerHelper::RecalculateAwareness()
{
	int highestAlertnessInGameRightNow = 0;

	float distanceToTheClosestHostileAgentSq = FLT_MAX;
	Vec3 playerPosition(ZERO);

	const IFactionMap& factionMap = gEnv->pAISystem->GetFactionMap();
	uint8 playerFactionID = factionMap.GetFactionID("Players");

	IAIObject* playerAiObject = NULL;
	CActor* playerActor = static_cast<CActor*>(gEnv->pGame->GetIGameFramework()->GetClientActor());

	if (playerActor)
	{
		if (IEntity* playerEntity = playerActor->GetEntity())
		{
			playerPosition = playerEntity->GetWorldPos();
			playerAiObject = playerEntity->GetAI();
		}
	}

	IF_UNLIKELY ((playerActor == NULL) || (playerAiObject == NULL))
		return;

	const bool playerIsCloaked = playerActor ? playerActor->IsCloaked() : true;

	const bool applyProximityToHostileAgentIncrement = m_actualAwareness < kAIAwarenessToPlayerAware && !playerPosition.IsZero();

	// Go through actors
	IActorIteratorPtr actorIt = gEnv->pGame->GetIGameFramework()->GetIActorSystem()->CreateActorIterator();
	if (actorIt)
	{
		while (IActor* actor = actorIt->Next())
		{
			const IAIObject* ai = actor->GetEntity()->GetAI();
			const IAIActor* aiActor = ai ? ai->CastToIAIActor() : NULL;
			if (aiActor && aiActor->IsActive())
			{
				const int alertness = GetAlertnessAffectedByVisibility(*aiActor, *playerAiObject, playerIsCloaked);

				highestAlertnessInGameRightNow = std::max(alertness, highestAlertnessInGameRightNow);

				if (applyProximityToHostileAgentIncrement && 
					factionMap.GetReaction(playerFactionID, ai->GetFactionID()) == IFactionMap::Hostile)
				{
					float distanceSq = playerPosition.GetSquaredDistance(ai->GetPos());
					if (distanceToTheClosestHostileAgentSq > distanceSq)
					{
						distanceToTheClosestHostileAgentSq = distanceSq;
					}
				}
			}
		}
	}

	// Go through non Actors
	{
		SAwarenessEntitiesVector::iterator it = m_awarenessEntities.begin();
		SAwarenessEntitiesVector::iterator end = m_awarenessEntities.end();

		for (; it != end; ++it)
		{
			const IAwarenessEntity* pAwarenessEntity = *it;
			const int awareness = pAwarenessEntity->GetAwarenessToActor( playerAiObject, playerActor );
			highestAlertnessInGameRightNow = std::max(awareness, highestAlertnessInGameRightNow);
		}
	}


	///
	assert(highestAlertnessInGameRightNow >= 0 && highestAlertnessInGameRightNow <= 2);

	switch (highestAlertnessInGameRightNow)
	{
	default: 
		{
			const float thresholdDistanceSq = square(g_pGameCVars->ai_ProximityToHostileAlertnessIncrementThresholdDistance);
			if (applyProximityToHostileAgentIncrement && distanceToTheClosestHostileAgentSq < thresholdDistanceSq)
			{
				m_actualAwareness = kAIAwarenessToPlayerAware * (1 - (distanceToTheClosestHostileAgentSq / thresholdDistanceSq));
			}
			else
			{
				m_actualAwareness = 0.0f;
			}
		}
		break;
	case 1:  m_actualAwareness = kAIAwarenessToPlayerAware;  break;
	case 2:  m_actualAwareness = kAIAwarenessToPlayerAlerted; break;
	}
}
Exemple #12
0
//Processes input with SDL
void MainGame::processInput() 
{
    SDL_Event evnt;

    const float CAMERA_SPEED = 2.0f;
    const float SCALE_SPEED = 0.1f;

    //Will keep looping until there are no more events to process
    while (SDL_PollEvent(&evnt)) 
	{
		mGuiMgr.Update(evnt);

        switch (evnt.type) 
		{
            case SDL_QUIT:
                _gameState = GameState::EXIT;
                break;

            case SDL_MOUSEMOTION:
                _inputManager.setMouseCoords((float)evnt.motion.x, (float)evnt.motion.y);
                break;

            case SDL_KEYDOWN:
                _inputManager.pressKey(evnt.key.keysym.sym);
                break;

            case SDL_KEYUP:
                _inputManager.releaseKey(evnt.key.keysym.sym);
                break;

            case SDL_MOUSEBUTTONDOWN:
                _inputManager.pressKey(evnt.button.button);
                break;

            case SDL_MOUSEBUTTONUP:
                _inputManager.releaseKey(evnt.button.button);
                break;
        }
    }

	static bool enter = false;
	if (_inputManager.isKeyPressed(SDLK_1) && !enter)
	{
		enter = true;
		mGuiMgr.SetActiveScene(0);
	}
	else if (_inputManager.isKeyPressed(SDLK_2) && !enter)
	{
		enter = true;
		mGuiMgr.SetActiveScene(1);
	}

	if (!_inputManager.isKeyPressed(SDLK_1) &&
		!_inputManager.isKeyPressed(SDLK_2))
	{
		enter = false;
	}

    if (_inputManager.isKeyPressed(SDLK_w)) 
	{
        _camera.setPosition(_camera.getPosition() + glm::vec2(0.0f, CAMERA_SPEED));
    }
    if (_inputManager.isKeyPressed(SDLK_s))
	{
        _camera.setPosition(_camera.getPosition() + glm::vec2(0.0f, -CAMERA_SPEED));
    }
    if (_inputManager.isKeyPressed(SDLK_a)) 
	{
        _camera.setPosition(_camera.getPosition() + glm::vec2(-CAMERA_SPEED, 0.0f));
    }
    if (_inputManager.isKeyPressed(SDLK_d)) 
	{
        _camera.setPosition(_camera.getPosition() + glm::vec2(CAMERA_SPEED, 0.0f));
    }
    if (_inputManager.isKeyPressed(SDLK_q))
	{
        _camera.setScale(_camera.getScale() + SCALE_SPEED);
    }
    if (_inputManager.isKeyPressed(SDLK_e))
	{
        _camera.setScale(_camera.getScale() - SCALE_SPEED);
    }

    if (_inputManager.isKeyPressed(SDL_BUTTON_LEFT)) 
	{
        glm::vec2 mouseCoords = _inputManager.getMouseCoords();
        mouseCoords = _camera.convertScreenToWorld(mouseCoords);
        
        glm::vec2 playerPosition(0.0f);
        glm::vec2 direction = mouseCoords - playerPosition;
        direction = glm::normalize(direction);

        _bullets.emplace_back(playerPosition, direction, 5.00f, 50);
    }
}
void NetworkManager::BeginUpdate( void )
{
	RakNet::Packet *packet = GameEngine::Network::ReceivePacket();

	while( packet )
	{
		switch( packet->data[0] )
		{
			case ID_CONNECTION_REQUEST_ACCEPTED:
				GameEngine::Network::SetOtherAddress( packet->systemAddress );
				break;

			case ID_NEW_INCOMING_CONNECTION:
				GameEngine::Network::SetOtherAddress( packet->systemAddress );
				if( GameEngine::Network::IsServer() )
				{
					enemy->SetController( NULL );
					GameEngine::AI::RemoveAIEntity( enemy->m_u8AIEntityIndex );

					S_START_UP_PACKET startUpPacket;
					startUpPacket.serverPositionX = player->m_v3Position.X();
					startUpPacket.serverPositionY = player->m_v3Position.Y();
					startUpPacket.serverPositionZ = player->m_v3Position.Z();
					startUpPacket.clientPositionX = enemy->m_v3Position.X();
					startUpPacket.clientPositionY = enemy->m_v3Position.Y();
					startUpPacket.clientPositionZ = enemy->m_v3Position.Z();
					startUpPacket.serverTeam = g_captureTheFlag::Get().m_playerTeam;
					startUpPacket.clientTeam = g_captureTheFlag::Get().m_enemyTeam;
					startUpPacket.u32ServerScore = g_captureTheFlag::Get().m_u32PlayerScore;
					startUpPacket.u32ClientScore = g_captureTheFlag::Get().m_u32EnemyScore;
					startUpPacket.u8ServerAreaID = g_captureTheFlag::Get().m_u8PlayerAreaID;
					startUpPacket.u8ClientAreaID = g_captureTheFlag::Get().m_u8EnemyAreaID;
					startUpPacket.bServerHasFlag = g_captureTheFlag::Get().m_bPlayerHasFlag;
					startUpPacket.bClientHasFlag = g_captureTheFlag::Get().m_bEnemyHasFlag;

					GameEngine::Network::SendHighPriorityPackage( E_ID_START_UP, (char*)&startUpPacket, sizeof(startUpPacket) );
				}
				break;

			case ID_CONNECTION_ATTEMPT_FAILED:
				g_captureTheFlag::Get().m_bNetworkReady = false;
				exit( 0 );
				break;

			case ID_CONNECTION_LOST:
			case ID_DISCONNECTION_NOTIFICATION:
				g_captureTheFlag::Get().m_bNetworkReady = false;
				GameEngine::Network::IsConnected( false );
				break;

			case E_ID_START_UP:
				if( !GameEngine::Network::IsServer() )
				{
					S_START_UP_PACKET startUpPacket;
					RakNet::BitStream bs( packet->data, packet->length, false );

					bs.IgnoreBytes( sizeof(RakNet::MessageID) );
					bs.Read( (char*)&startUpPacket, sizeof(startUpPacket) );

					g_captureTheFlag::Get().m_playerTeam = startUpPacket.clientTeam;
					g_captureTheFlag::Get().m_enemyTeam = startUpPacket.serverTeam;
					g_captureTheFlag::Get().m_u32PlayerScore = startUpPacket.u32ClientScore;
					g_captureTheFlag::Get().m_u32EnemyScore = startUpPacket.u32ServerScore;
					g_captureTheFlag::Get().m_u8PlayerAreaID = startUpPacket.u8ClientAreaID;
					g_captureTheFlag::Get().m_u8EnemyAreaID = startUpPacket.u8ServerAreaID;
					g_captureTheFlag::Get().m_bPlayerHasFlag = startUpPacket.bClientHasFlag;
					g_captureTheFlag::Get().m_bEnemyHasFlag = startUpPacket.bServerHasFlag;

					D3DXVECTOR3 playerPosition( startUpPacket.clientPositionX, startUpPacket.clientPositionY, startUpPacket.clientPositionZ );
					D3DXVECTOR3 enemyPosition( startUpPacket.serverPositionX, startUpPacket.serverPositionY, startUpPacket.serverPositionZ );

					if( !g_captureTheFlag::Get().Initialize(playerPosition,enemyPosition) )
					{
						GameEngine::ShutDown();
						return;
					}

					g_captureTheFlag::Get().m_bNetworkReady = true;
				}
				break;

			case E_ID_UPDATE:
			{
				RakNet::BitStream bs( packet->data, packet->length, false );
				D3DXVECTOR3 position;

				bs.IgnoreBytes( sizeof(RakNet::MessageID) );
				bs.Read( (char*)&position, sizeof(position) );

				enemy->m_v3Position = position;
				enemy->m_v3ProjectedPosition = position;
				break;

			}

			case E_ID_WORLD_EVENT:
				if( GameEngine::Network::IsServer() )
					return;

				S_EVENT_PACKET eventPacket;
				RakNet::BitStream bs( packet->data, packet->length, false );

				bs.IgnoreBytes( sizeof(RakNet::MessageID) );
				bs.Read( (char*)&eventPacket, sizeof(eventPacket) );

				switch( eventPacket.u8Type )
				{
					case E_WORLD_EVENT_SCORE:
					{
						UINT32 prevEnemyScore = g_captureTheFlag::Get().m_u32PlayerScore;
						UINT32 prevPlayerScore = g_captureTheFlag::Get().m_u32EnemyScore;

						g_captureTheFlag::Get().m_u32PlayerScore = eventPacket.data[1];
						g_captureTheFlag::Get().m_u32EnemyScore = eventPacket.data[0];

						if( prevEnemyScore < g_captureTheFlag::Get().m_u32EnemyScore )
							GameEngine::Audio::Play2DSoundEffect( g_captureTheFlag::Get().m_u32EnemyScore, "enemyScore.wav" );
						else if( prevPlayerScore < g_captureTheFlag::Get().m_u32PlayerScore )
							GameEngine::Audio::Play2DSoundEffect( g_captureTheFlag::Get().m_u32PlayerScore, "playerScore.wav" );
						break;
					}

					case E_WORLD_EVENT_FLAG_PICK_UP:
						if( eventPacket.data[0] )
						{
							g_captureTheFlag::Get().m_bEnemyHasFlag = true;
							GameEngine::Audio::Play2DSoundEffect( g_captureTheFlag::Get().m_u32EnemyPickUpSfxID, "enemyPickFlag.wav" );
						}
						else
						{
							g_captureTheFlag::Get().m_bPlayerHasFlag = true;
							GameEngine::Audio::Play2DSoundEffect( g_captureTheFlag::Get().m_u32PlayerPickUpSfxID, "playerPickFlag.wav" );
						}
						break;

					case E_WORLD_EVENT_FLAG_RESET:
						if( eventPacket.data[0] )
							g_captureTheFlag::Get().m_bEnemyHasFlag = false;
						else
							g_captureTheFlag::Get().m_bPlayerHasFlag = false;
						GameEngine::Audio::Play2DSoundEffect( g_captureTheFlag::Get().m_u32FlagResetSfxID, "flagReset.wav" );
						break;
				}
				break;
		}

		packet = GameEngine::Network::ReceivePacket( packet );
	}
}