Example #1
0
void FERealPlayer::Draw()
{
	D_Color bodyColor = m_Color;
	if(HasFlags(EFEFlag_Selected))
		bodyColor = bodyColor / 1.5f;

	Vec2 playerPos(m_vPos.x - m_fPlayerRadius, m_vPos.y + m_fPlayerRadius);
	Vec2 playerScreenPos = CoordinateInfo::WorldToScreen(playerPos);
	g_poSROU->DrawFillRectangle(
		(f32)playerScreenPos.x,
		(f32)playerScreenPos.y,
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(),
		bodyColor, D_Color(255, 255, 255));

	Vec2 indicatorPos(m_vPos.x - m_fPlayerRadius, m_vPos.y + m_fPlayerRadius);
	Vec2 indicatorScreenPos = CoordinateInfo::WorldToScreen(indicatorPos);
	Char indicator[4];
	if(m_bIsGK)
		strcpy(indicator, "G");
	else
		_itoa(m_Team == kHOME_TEAM ? (m_id) : (m_id - FESimulatedPlayer::sHomePlayerCount), indicator, 10);

	g_poSROU->DrawStringEx(
		indicatorScreenPos.x, 
		indicatorScreenPos.y,
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(),
		kPLAYER_NUMSIZE * CoordinateInfo::GetPixelPerMeter(),
		indicator, NULL, D_Color(0,0,0));
}
Example #2
0
int getRank(HunterView h, int player, int round)
{
	int rank = 0;
	
	if (round == 0) {
		if(player == PLAYER_LORD_GODALMING) {rank = -1;}
		else if(player == PLAYER_DR_SEWARD) {rank = 0;}
		else if(player == PLAYER_VAN_HELSING) {rank = 1;}
		else if(player == PLAYER_MINA_HARKER) {rank = 2;}
		else printf("I am noone..\n");		
	} else if (round == 1 && player == PLAYER_LORD_GODALMING) {
		rank = 3;
	} else {
		int turn = giveMeTurnNum(h);

		IntList l = newIntList();
	
		int foundDrac = FALSE;
		LocationID dracTrail[TRAIL_SIZE];
		giveMeTheTrail(h,PLAYER_DRACULA,dracTrail);

		int currLoc;	
		if (player == PLAYER_LORD_GODALMING) currLoc = whereIs(h,PLAYER_MINA_HARKER);
		else currLoc = whereIs(h,player-1);
	
		int j;
		for(j=0;j<TRAIL_SIZE;j++) {
			if (currLoc == dracTrail[j]) {
				foundDrac = TRUE;
				break;
			}
		}
	
		int score;
		int ignore1;
		char ignore2;
		int playertmp = 2;
		int insertPlayer;
	
		int i;
		for (i=1;i<6;i++) {
			if (i != player+1) { //skips drac
				//printf("scanning message %s\n",messages[turn-i]);
				//printf("inserting into list player: %d score: %d\n",(player+5-playertmp)%5,tmp);
				if (playertmp==4 && foundDrac) score = j;
				else sscanf(messages[turn-i],"%d %c %d",&ignore1,&ignore2,&score);
				insertPlayer = (player+4-playertmp)%4;
				IntListInsertInOrder(l,score,insertPlayer);
				playertmp++;
			}
		}
	
		//showList(l);
	
		current_leader = getFirstPlayer(l);
		rank = playerPos(l,player);
	}
	
	return rank;
}
Example #3
0
void MiniMap::showBookMiniMap(int showLevel) {
	
	// First Load Minimap TC & DATA if needed
	if(m_levels[showLevel].m_texContainer == NULL) {
		getData(showLevel);
	}
	
	if(m_levels[showLevel].m_texContainer) {
		
		GRenderer->SetRenderState(Renderer::DepthTest, false);
		
		float zoom = 900.f;
		
		Vec2f start = Vec2f_ZERO;
		Vec2f playerPos(0.f, 0.f);
		
		if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
			playerPos = computePlayerPos(zoom, showLevel);
			start = Vec2f(490.f, 220.f) - playerPos;
			playerPos += start;
		}
		
		drawBackground(showLevel, Rect(360, 85, 555, 355), start.x, start.y, zoom, 20.f);
		
		GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat);
		
		if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
			drawPlayer(6.f, playerPos);
			drawDetectedEntities(showLevel, start, zoom);
		}
		
	}
}
Example #4
0
void FEPlayer::DrawWithColor(const D_Color& clr)
{
	D_Color bodyColor = clr;
	Vec3 realPos = m_vPos;
	if(CoordinateInfo::sAwayView)
		realPos = -realPos;

	Vec2 playerPos(realPos.x - m_fPlayerRadius, realPos.y + m_fPlayerRadius);
	Vec2 playerScreenPos = CoordinateInfo::WorldToScreen(playerPos);
	g_poSROU->DrawFillRectangle(
		(f32)playerScreenPos.x,
		(f32)playerScreenPos.y,
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(),
		bodyColor, D_Color(255, 255, 255));

	Vec2 indicatorPos(realPos.x - m_fPlayerRadius, realPos.y + m_fPlayerRadius);
	Vec2 indicatorScreenPos = CoordinateInfo::WorldToScreen(indicatorPos);
	Char indicator[4];
	_itoa(m_id, indicator, 10);
	g_poSROU->DrawStringEx(
		indicatorScreenPos.x, 
		indicatorScreenPos.y,
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(), 
		2 * m_fPlayerRadius * CoordinateInfo::GetPixelPerMeter(),
		kPLAYER_NUMSIZE * CoordinateInfo::GetPixelPerMeter(),
		indicator, NULL, D_Color(0,0,0));
}
Example #5
0
void Sun::finalAttack()
{
	Vector2 playerPos(world_->getPlayer().x(), world_->getPlayer().y());
	Vector2 dir = playerPos - position_;
	
	dir.Normalize();
	dir *= 760.0f;

	velocity_ = dir;
	
	phase_time_ = 6000000;
}
Example #6
0
void DrawMinimap()
{
	D3DCOLOR MapColor = D3DCOLOR_ARGB(255, 0, 0, 0);
	D3DCOLOR TrashColor = D3DCOLOR_ARGB(255, 255, 0, 0);
	D3DCOLOR PlayerColor = D3DCOLOR_ARGB(255, 0, 0, 255);
	
	RECT mapRect;
	mapRect.left=0;
	mapRect.right=100;
	mapRect.top=0;
	mapRect.bottom=100;

	D3DXVECTOR3 mapPos(25, 25, 0);

	spriteMap->Begin(NULL);
	spriteMap->Draw(texMap, &mapRect, NULL, &mapPos, MapColor);
	spriteMap->End();

	mapRect.left=0;
	mapRect.right=10;
	mapRect.top=0;
	mapRect.bottom=10;

	D3DXVECTOR3 playerPos(TheCamera.GetPosition().x / 4 + 75,TheCamera.GetPosition().z / 4 + 75, 0 );
	D3DXVECTOR3 pcenter(5, 5, 0);

	spritePlayer->Begin(NULL);
	spritePlayer->Draw(texMap, &mapRect, &pcenter, &playerPos, PlayerColor);
	spritePlayer->End();

	mapRect.left=0;
	mapRect.right=5;
	mapRect.top=0;
	mapRect.bottom=5;

	D3DXVECTOR3 trashPos;
	D3DXVECTOR3 tcenter(2.5, 2.5, 0);
	for(int i = 0; i < 10; i++)
	{
		if(BoolTrash[i])
		{
			trashPos.x = TrashPositions[i].x / 4 + 75;
			trashPos.y = TrashPositions[i].z / 4 + 75;
			trashPos.z = 0;
			spriteTrash[i]->Begin(NULL);
			spriteTrash[i]->Draw(texMap, &mapRect, &tcenter, &trashPos, TrashColor);
			spriteTrash[i]->End();
		}
	}

}
void ObjectStaticWeaponCloseState::onUpdate()
{
    ObjectState::onUpdate();

    if (currentFramecount >= frameDelay)
    {
        D3DXVECTOR2 playerPos(pData->playerX, pData->playerY);
        D3DXVECTOR2 selfPos(pData->x + 16, pData->y + 16);
        D3DXVECTOR2 directVector = playerPos - selfPos;
        float length1 = D3DXVec2Length(&directVector);
        float length = length1;

        if (UIComponents::getInstance()-> getNumberPlayer() == 2)
        {
            playerPos = D3DXVECTOR2(pData->player2X, pData->player2Y);
            directVector = playerPos - selfPos;
            float length2 = D3DXVec2Length(&directVector);
            length = length1 > length2 ? length1 : length2;
        }

        if (length <= OBJECT_STATIC_WEAPON_RANGE_OPEN)
        {
            transition(new ObjectStaticWeaponPreparingState(this->pData, true));
            return;
        }

        /*if (((ObjectStaticWeaponData*)pData)->isUp)
        {
            if (this->pData->playerX - this->pData->x >= -OBJECT_STATIC_WEAPON_RANGE_OPEN)
            {
                this->pData->pState = new ObjectStaticWeaponPreparingState(this->pData, true);
            }
        }
        else
        {
            if (this->pData->playerX - this->pData->x >= -OBJECT_STATIC_WEAPON_RANGE_OPEN)
            {
                this->pData->pState = new ObjectStaticWeaponPreparingState(this->pData, true);
            }
        }*/
    }
    else
    {
        currentFramecount++;
    }
}
Example #8
0
void MiniMap::showPlayerMiniMap(int showLevel) {
	
	const float miniMapZoom = 300.f; // zoom of the minimap
	const Rect miniMapRect(390, 135, 590, 295); // minimap rect on a 640*480 screen
	const float playerSize = 4.f; // red arrow size
	
	const float decalY = -150;
	const float decalX = +40;
	
	// First Load Minimap TC & DATA if needed
	if(m_levels[showLevel].m_texContainer == NULL) {
		getData(showLevel);
	}
	
	if(m_levels[showLevel].m_texContainer) {
		
		GRenderer->SetRenderState(Renderer::DepthTest, false);
		
		float startX = 0.f;
		float startY = 0.f;
		
		Vec2f playerPos(0.f, 0.f);
		
		if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
			playerPos = computePlayerPos(miniMapZoom, showLevel);
			startX = 490.f - playerPos.x;
			startY = 220.f - playerPos.y;
			playerPos.x += startX;
			playerPos.y += startY;
		}
		
		// Draw the background
		drawBackground(showLevel, Rect(390, 135, 590, 295), startX, startY, miniMapZoom, 20.f, decalX, decalY, true, 0.5f);
		
		GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat);
		
		// Draw the player (red arrow)
		if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
			drawPlayer(playerSize, playerPos.x + decalX, playerPos.y + decalY, true);
			drawDetectedEntities(showLevel, startX + decalX, startY + decalY, miniMapZoom);
		}
		
	}
}
Example #9
0
/** 
\fn bool QuizParticipant::checkCollision( Vect3D objPos, int radius )
\brief Sphere collision detection between a player and an object
\param objPos The position of the object
\param radius The size of the object 
\return Whether the player collided with the object 

When a player is within the radius of the object, detect as collided. 
*/
bool QuizParticipant::checkCollision( Vect3D objPos, int radius )
{
	//get this player's position
	if ( int rc = aw_avatar_location (NULL, sessionID, NULL) )
	{
		return false;
	}

	Vect3D playerPos( (float)aw_int(AW_AVATAR_X), (float)aw_int(AW_AVATAR_Y), (float)aw_int(AW_AVATAR_Z) );

	//check collision with the object pos
	float dist = Vect3D::Distance( playerPos, objPos );
	if ( dist <= radius )
	{
		return true;
	}

	return false;
}
Example #10
0
void MiniMap::showPlayerMiniMap(int showLevel) {
	
	ARX_PROFILE_FUNC();
	
	const float miniMapZoom = 300.f; // zoom of the minimap
	const Rect miniMapRect(390, 135, 590, 295); // minimap rect on a 640*480 screen
	const float playerSize = 4.f; // red arrow size
	
	static const Vec2f decal = Vec2f(40.f, -150.f);
	
	// First Load Minimap TC & DATA if needed
	if(m_levels[showLevel].m_texContainer == NULL) {
		getData(showLevel);
	}
	
	if(m_levels[showLevel].m_texContainer) {
		
		GRenderer->SetRenderState(Renderer::DepthTest, false);
		
		Vec2f start = Vec2f_ZERO;
		
		Vec2f playerPos(0.f, 0.f);
		
		if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
			playerPos = computePlayerPos(miniMapZoom, showLevel);
			start = Vec2f(490.f, 220.f) - playerPos;
			playerPos += start;
		}
		
		// Draw the background
		drawBackground(showLevel, Rect(390, 135, 590, 295), start, miniMapZoom, 20.f, decal, true, 0.5f);
		
		GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat);
		
		// Draw the player (red arrow)
		if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
			drawPlayer(playerSize, playerPos + decal, true);
			drawDetectedEntities(showLevel, start + decal, miniMapZoom);
		}
		
	}
}
Example #11
0
//--------------------------------------------------------------------------------------------------
// Name: DebugOnInputEvent
// Desc: Called when input events happen in debug builds
//--------------------------------------------------------------------------------------------------
void CExplosionGameEffect::DebugOnInputEvent(int keyId)
{
	// Initialise static version of effect
	static CExplosionGameEffect explosionGameEffect;
	if(!explosionGameEffect.IsFlagSet(GAME_EFFECT_INITIALISED))
	{
		explosionGameEffect.Initialise();
		explosionGameEffect.SetFlag(GAME_EFFECT_DEBUG_EFFECT,true);
		explosionGameEffect.SetFlag(GAME_EFFECT_AUTO_RELEASE,true);
		explosionGameEffect.SetActive(true);
	}

	// Get player pos
	Vec3 playerDir(0.0f,0.0f,0.0f);
	Vec3 playerPos(0.0f,0.0f,0.0f);
	EntityId localClientId = gEnv->pGame->GetIGameFramework()->GetClientActorId();
	if(localClientId != 0)
	{
		IEntity* playerEntity = g_pGame->GetIGameFramework()->GetIActorSystem()->GetActor(localClientId)->GetEntity();
		playerDir = playerEntity->GetForwardDir();
		playerPos = playerEntity->GetPos();
	}

	// Distance from player controlled by keyboard
	static float distFromPlayer = 0.0f;
	static float distStep = 1.0f;

	switch(keyId)
	{
		case eKI_NP_Multiply:
		{
			distFromPlayer += distStep;
			break;
		}
		case eKI_NP_Divide:
		{
			distFromPlayer -= distStep;
			break;
		}
		case eKI_NP_0:
		{
			distFromPlayer = 0.0f;
			break;
		}
		case eKI_NP_1:
		{
			// Frag
			SExplosionContainer explosionContainer;
			ExplosionInfo& explosionInfo = explosionContainer.m_explosionInfo;
			explosionInfo.pParticleEffect = gEnv->pParticleManager->FindEffect("Crysis2_weapon_explosives.frag.concrete");
			explosionInfo.pos = playerPos + (playerDir * distFromPlayer);
			explosionInfo.dir.Set(0.0f,-1.0f,0.0f);
			explosionInfo.effect_scale = 1.0f;
			explosionInfo.pressure = 1000.0f;
			explosionInfo.maxblurdistance = 10.0;
			explosionInfo.radius = 15.0;
			explosionInfo.blindAmount = 0.0f;
			explosionInfo.flashbangScale = 8.0f;
			explosionInfo.damage = 5.0f;
			explosionInfo.hole_size = 0.0f;
			explosionGameEffect.Explode(explosionContainer);
			break;
		}
		case eKI_NP_2:
		{
			// Flashbang
			SExplosionContainer explosionContainer;
			ExplosionInfo& explosionInfo = explosionContainer.m_explosionInfo;
			explosionInfo.pParticleEffect = gEnv->pParticleManager->FindEffect("Crysis2_weapon_explosives.grenades.flash_explosion");
			explosionInfo.pos = playerPos + (playerDir * distFromPlayer);
			explosionInfo.dir.Set(0.0f,-1.0f,0.0f);
			explosionInfo.effect_scale = 1.0f;
			explosionInfo.pressure = 1000.0f;
			explosionInfo.maxblurdistance = 10.0;
			explosionInfo.radius = 15.0;
			explosionInfo.blindAmount = 0.66f;
			explosionInfo.flashbangScale = 8.0f;
			explosionInfo.damage = 5.0f;
			explosionInfo.hole_size = 0.0f;
			explosionGameEffect.Explode(explosionContainer);
			break;
		}
		case eKI_NP_3:
		{
			// L-Tag
			SExplosionContainer explosionContainer;
			ExplosionInfo& explosionInfo = explosionContainer.m_explosionInfo;
			explosionInfo.pParticleEffect = gEnv->pParticleManager->FindEffect("Crysis2_weapon_fx.l-tag.rico_explosion");
			explosionInfo.pos = playerPos + (playerDir * distFromPlayer);
			explosionInfo.dir.Set(0.0f,-1.0f,0.0f);
			explosionInfo.effect_scale = 1.0f;
			explosionInfo.pressure = 1000.0f;
			explosionInfo.maxblurdistance = 10.0;
			explosionInfo.radius = 15.0;
			explosionInfo.blindAmount = 0.0f;
			explosionInfo.flashbangScale = 8.0f;
			explosionInfo.damage = 5.0f;
			explosionInfo.hole_size = 0.0f;
			explosionGameEffect.Explode(explosionContainer);
			break;
		}
		case GAME_FX_INPUT_ReleaseDebugEffect:
		{
			explosionGameEffect.Release();
			break;
		}
	}
}//-------------------------------------------------------------------------------------------------
Example #12
0
void MiniMap::showBookEntireMap(int showLevel) {
	
	// First Load Minimap TC & DATA if needed
	if(m_levels[showLevel].m_texContainer == NULL) {
		getData(showLevel);
	}
	
	if(!m_levels[showLevel].m_texContainer) {
		return;
	}
	
	GRenderer->SetRenderState(Renderer::DepthTest, false);
	
	float zoom = 250.f;
	float startX = 140.f;
	float startY = 120.f;
	
	Vec2f playerPos(0.f, 0.f);
	
	if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
		playerPos = computePlayerPos(zoom, showLevel);
		playerPos.x += startX;
		playerPos.y += startY;
	}
	
	drawBackground(showLevel, Rect(0, 0, 345, 290), startX, startY, zoom);
	
	GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat);
	
	if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
		drawPlayer(3.f, playerPos.x, playerPos.y);
		drawDetectedEntities(showLevel, startX, startY, zoom);
	}
	
	TexturedVertex verts[4];
	for(int k = 0; k < 4; k++) {
		verts[k].color = 0xFFFFFFFF;
		verts[k].rhw = 1;
		verts[k].p.z = 0.00001f;
	}
	
	float caseX = zoom / ((float)MINIMAP_MAX_X);
	float caseY = zoom / ((float)MINIMAP_MAX_Z);
	float ratio = 1.f;
	
	for(size_t i = 0; i < m_mapMarkers.size(); i++) {
		
		if(m_mapMarkers[i].m_lvl != showLevel + 1) {
			continue;
		}
		
		float pos_x = m_mapMarkers[i].m_x * 8 * ratio * m_activeBkg->Xmul * caseX + startX;
		float pos_y = m_mapMarkers[i].m_y * 8 * ratio * m_activeBkg->Zmul * caseY + startY;
		float size = 5.f * ratio;
		verts[0].color = 0xFFFF0000;
		verts[1].color = 0xFFFF0000;
		verts[2].color = 0xFFFF0000;
		verts[3].color = 0xFFFF0000;
		verts[0].p.x = (pos_x - size) * Xratio;
		verts[0].p.y = (pos_y - size) * Yratio;
		verts[1].p.x = (pos_x + size) * Xratio;
		verts[1].p.y = (pos_y - size) * Yratio;
		verts[2].p.x = (pos_x + size) * Xratio;
		verts[2].p.y = (pos_y + size) * Yratio;
		verts[3].p.x = (pos_x - size) * Xratio;
		verts[3].p.y = (pos_y + size) * Yratio;
		verts[0].uv = Vec2f::ZERO;
		verts[1].uv = Vec2f::X_AXIS;
		verts[2].uv = Vec2f::ONE;
		verts[3].uv = Vec2f::Y_AXIS;
		
		if(MouseInRect(verts[0].p.x, verts[0].p.y, verts[2].p.x, verts[2].p.y)) {
			if(!m_mapMarkers[i].m_text.empty()) {
				
				Rect bRect(140, 290, 140 + 205, 358);
				
				Rect::Num left = checked_range_cast<Rect::Num>((bRect.left) * Xratio);
				Rect::Num right = checked_range_cast<Rect::Num>((bRect.right) * Xratio);
				Rect::Num top = checked_range_cast<Rect::Num>((bRect.top) * Yratio);
				Rect::Num bottom = checked_range_cast<Rect::Num>((bRect.bottom) * Yratio);
				Rect rRect = Rect(left, top, right, bottom);
				
				long lLengthDraw = ARX_UNICODE_ForceFormattingInRect(hFontInGameNote, m_mapMarkers[i].m_text, rRect);
				
				DrawBookTextInRect(hFontInGameNote, float(bRect.left), float(bRect.top), float(bRect.right), m_mapMarkers[i].m_text.substr(0, lLengthDraw), Color::none);
			}
		}
		
		if(m_mapMarkerTexCont == NULL) {
			m_mapMarkerTexCont = TextureContainer::Load("graph/interface/icons/mapmarker");
		}
		
		GRenderer->SetTexture(0, m_mapMarkerTexCont);
		
		EERIEDRAWPRIM(Renderer::TriangleFan, verts, 4);
	}
}
Example #13
0
TEST(ChunkTests, WorldToChunkCoordsTest1) {
  glm::vec3 playerPos(1.0, 1.0, -1.0);
  EXPECT_EQ(glm::ivec3(0, 0, 0), Chunk::worldToChunkSpace(playerPos));
}
Example #14
0
void EnemyList::checkCollisions(PlayerProjectiles& playerProjectiles)
{
	for (unsigned int i = 0; i < enemyList.size(); i++)
	{
		Point enemy(enemyList[i].getCompX(), enemyList[i].getCompY());
		for (unsigned int j = 0; j < playerProjectiles.getSize(); j++)
		{
			Bullet* b = playerProjectiles.getBullet(j);
			Point bulPoint(b->getX(), b->getY());
			if (enemyList[i].enemyType == 0 && Collision().checkCollision(playerProjectiles.getVector()[j].box, enemy, 0.97))
			{
				b->destroy();
				enemyList[i].enemyHP--;
				Explosion explosion;
				if (enemyList[i].enemyHP <= 0)
				{
					enemyList[i].destroyed = true;
					if (enemyList[i].enemyType == 0)
					{
						explosion = Explosion(enemyList[i].compX, enemyList[i].compY, 1, explosionTextureID);
					}
					else
					{
						explosion = Explosion(enemyList[i].compX, enemyList[i].compY, 2, explosionTextureID);
					}
					
					explosionList.addExplosion(explosion);
				}
			}
			else if (enemyList[i].enemyType == 1 && Collision().isIntersect(enemyList[i].box,
				enemy,
				b->box,
				bulPoint,
				28,
				minTransDist))
			{
				b->destroy();
				enemyList[i].enemyHP--;
				if (enemyList[i].enemyHP <= 0)
				{
					enemyList[i].destroyed = true;
					Explosion explosion(enemyList[i].compX, enemyList[i].compY, 1, explosionTextureID);
					explosionList.addExplosion(explosion);
				}
			}
		}

		for (unsigned int j = 0; j < enemyList.size(); j++)
		{
			Point p2(enemyList[j].getCompX(), enemyList[j].getCompY());
			if (i != j && Collision().isIntersect(enemyList[i].box, enemy, enemyList[j].box, p2, 28, minTransDist))
			{
				if (enemyList[i].enemyType == 1)
				{
					enemyList[j].setMinTransDist(minTransDist.pointX, minTransDist.pointY);
				}
				else if (enemyList[j].enemyType == 1)
				{
					enemyList[i].setMinTransDist(minTransDist.pointX, minTransDist.pointY);
				}
				else
				{
					enemyList[i].setMinTransDist(minTransDist.pointX * 0.5, minTransDist.pointY * 0.5);
					enemyList[j].setMinTransDist(-minTransDist.pointX * 0.5, -minTransDist.pointY * 0.5);
				}
			}
		}

		Point playerPos(playerShipX, playerShipY);
		//std::cout << playerPos.pointX << "\t" << playerPos.pointY << "\t" << enemy.pointX << "\t" << enemy.pointY << std::endl;
		BoundingQuad lineBox(playerPos, playerPos, enemy, enemy);
		bool result = true;
		for (unsigned int j = 0; j < asteroidMapListRef->asteroidField.size(); j++)
		{
			Point p2(asteroidMapListRef->asteroidField[j].getRoidX(), asteroidMapListRef->asteroidField[j].getRoidY());
			if (Collision().isIntersect(enemyList[i].box, 
				enemy,
				asteroidMapListRef->asteroidField[j].box, 
				p2,
				28,
				minTransDist))
			{
				enemyList[i].setMinTransDist(minTransDist.pointX * 2, minTransDist.pointY * 2);
				enemyList[i].turnAround();
			}
			if (!Collision().hasLineOfSight(enemy, playerPos, lineBox, asteroidMapListRef->asteroidField[j].box, p2, 28))
			{
				result = false;
			}
		}
		enemyList[i].setLOS(result);
	}

	for (unsigned int i = 0; i < playerProjectiles.getSize(); i++)
	{
		Bullet* b = playerProjectiles.getBullet(i);
		Point p1(b->getX(), b->getY());
		
		for (unsigned int j = 0; j < asteroidMapListRef->asteroidField.size(); j++)
		{
			Point p2(asteroidMapListRef->asteroidField[j].getRoidX(), asteroidMapListRef->asteroidField[j].getRoidY());
			if (Collision().isIntersect(b->box, p1, asteroidMapListRef->asteroidField[j].box, p2, 40, minTransDist))
			{
				Explosion explosion(b->box.pointsN[2].pointX, b->box.pointsN[2].pointY, 0.3, explosionTextureID);
				explosionList.addExplosion(explosion);
				b->destroyed = true;
			}
		}
	}
}
Example #15
0
void MiniMap::showBookEntireMap(int showLevel) {
	
	// First Load Minimap TC & DATA if needed
	if(m_levels[showLevel].m_texContainer == NULL) {
		getData(showLevel);
	}
	
	if(!m_levels[showLevel].m_texContainer) {
		return;
	}
	
	GRenderer->SetRenderState(Renderer::DepthTest, false);
	
	float zoom = 250.f;
	
	Vec2f start(140.f, 120.f);
	
	Vec2f playerPos(0.f, 0.f);
	
	if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
		playerPos = computePlayerPos(zoom, showLevel);
		playerPos += start;
	}
	
	drawBackground(showLevel, Rect(0, 0, 345, 290), start, zoom);
	
	GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat);
	
	if(showLevel == ARX_LEVELS_GetRealNum(m_currentLevel)) {
		drawPlayer(3.f, playerPos, false);
		drawDetectedEntities(showLevel, start, zoom);
	}
	
	TexturedVertex verts[4];
	for(int k = 0; k < 4; k++) {
		verts[k].color = Color(255, 255, 255, 255).toRGBA();
		verts[k].rhw = 1;
		verts[k].p.z = 0.00001f;
	}
	
	Vec2f casePos(zoom / MINIMAP_MAX_X, zoom / MINIMAP_MAX_Z);
	float ratio = 1.f;
	
	for(size_t i = 0; i < m_mapMarkers.size(); i++) {
		
		if(m_mapMarkers[i].m_lvl != showLevel + 1) {
			continue;
		}
		
		Vec2f pos;
		pos.x = m_mapMarkers[i].m_pos.x * 8 * ratio * m_activeBkg->Xmul * casePos.x + start.x;
		pos.y = m_mapMarkers[i].m_pos.y * 8 * ratio * m_activeBkg->Zmul * casePos.y + start.y;
		
		float size = 5.f * ratio;
		verts[0].color = Color(255, 0, 0, 255).toRGBA();
		verts[1].color = Color(255, 0, 0, 255).toRGBA();
		verts[2].color = Color(255, 0, 0, 255).toRGBA();
		verts[3].color = Color(255, 0, 0, 255).toRGBA();
		verts[0].p.x = (pos.x - size) * g_sizeRatio.x;
		verts[0].p.y = (pos.y - size) * g_sizeRatio.y;
		verts[1].p.x = (pos.x + size) * g_sizeRatio.x;
		verts[1].p.y = (pos.y - size) * g_sizeRatio.y;
		verts[2].p.x = (pos.x + size) * g_sizeRatio.x;
		verts[2].p.y = (pos.y + size) * g_sizeRatio.y;
		verts[3].p.x = (pos.x - size) * g_sizeRatio.x;
		verts[3].p.y = (pos.y + size) * g_sizeRatio.y;
		verts[0].uv = Vec2f_ZERO;
		verts[1].uv = Vec2f_X_AXIS;
		verts[2].uv = Vec2f_ONE;
		verts[3].uv = Vec2f_Y_AXIS;
		
		const Rect mouseTestRect(
			verts[0].p.x,
			verts[0].p.y,
			verts[2].p.x,
			verts[2].p.y
		);
		
		if(mouseTestRect.contains(Vec2i(DANAEMouse))) {
			if(!m_mapMarkers[i].m_text.empty()) {
				
				Rect bRect(140, 295, 140 + 205, 358);
				
				Rect::Num left = checked_range_cast<Rect::Num>((bRect.left) * g_sizeRatio.x);
				Rect::Num right = checked_range_cast<Rect::Num>((bRect.right) * g_sizeRatio.x);
				Rect::Num top = checked_range_cast<Rect::Num>((bRect.top) * g_sizeRatio.y);
				Rect::Num bottom = checked_range_cast<Rect::Num>((bRect.bottom) * g_sizeRatio.y);
				Rect rRect = Rect(left, top, right, bottom);
				
				long lLengthDraw = ARX_UNICODE_ForceFormattingInRect(hFontInGameNote, m_mapMarkers[i].m_text, rRect);
				
				
				ARX_UNICODE_DrawTextInRect(hFontInGameNote,
				                           (BOOKDEC + Vec2f(bRect.topLeft())) * g_sizeRatio,
				                           (BOOKDEC.x + float(bRect.right)) * g_sizeRatio.x,
				                           m_mapMarkers[i].m_text.substr(0, lLengthDraw),
				                           Color::none);
			}
		}
		
		if(m_mapMarkerTexCont == NULL) {
			m_mapMarkerTexCont = TextureContainer::Load("graph/interface/icons/mapmarker");
		}
		
		GRenderer->SetTexture(0, m_mapMarkerTexCont);
		
		EERIEDRAWPRIM(Renderer::TriangleFan, verts, 4);
	}
}