Exemple #1
0
float SmoothGroundMap::GetImpassableValue(int x, int y) const
{
	if (0 <= x && x < 255 && 0 <= y && y < 255)
	{
		glm::vec4 c = _image->GetPixel(x, y);
		if (c.b >= 0.5f && c.r < 0.5f)
			return 1.0f;

		glm::vec3 n = _heightMap.GetNormal(x, y);

		return bounds1f(0, 1).clamp(0.5f + 8.0f * (0.83f - n.z));
	}
	return 0;
}
Exemple #2
0
void BattleView::Render(const glm::mat4& transformx)
{
	glm::mat4 containerTransform = transformx * glm::inverse(GetContentTransform());
	glm::mat4 terrainTransform = GetTerrainTransform();

	glm::mat4 adjustmentTransform;
	adjustmentTransform = glm::scale(adjustmentTransform, glm::vec3(GetSize(), 1));
	adjustmentTransform = glm::scale(adjustmentTransform, glm::vec3(0.5f, 0.5f, 1));
	adjustmentTransform = glm::translate(adjustmentTransform, glm::vec3(1, 1, 0));

	glm::mat4 contentTransform = transformx * adjustmentTransform * terrainTransform;
	glm::mat4 facingTransform = transformx * glm::translate(glm::mat4(), glm::vec3(-GetFrame().min, 0));


	glm::vec2 facing = vector2_from_angle(GetCameraFacing() - 2.5f * (float)M_PI_4);
	_lightNormal = glm::normalize(glm::vec3(facing, -1));


	// Terrain Sky

	glDisable(GL_DEPTH_TEST);
	if (_smoothTerrainSky != nullptr)
	{
		_smoothTerrainSky->RenderBackgroundLinen(containerTransform, _renderers, GetFrame(), GetFlip());
		_smoothTerrainSky->Render(containerTransform, _renderers, GetFrame(), GetCameraDirection().z, GetFlip());
	}


	// Terrain Surface

	glEnable(GL_DEPTH_TEST);
	glEnable(GL_CULL_FACE);

	if (_smoothTerrainSurface != nullptr)
		_smoothTerrainSurface->Render(contentTransform, _lightNormal);

	if (_tiledTerrainRenderer != nullptr)
		_tiledTerrainRenderer->Render(contentTransform, _lightNormal);


	// Terrain Water

	glDisable(GL_CULL_FACE);
	if (_smoothTerrainWater != nullptr)
		_smoothTerrainWater->Render(contentTransform);


	// Fighter Weapons

	glDepthMask(false);
	_plainLineRenderer->Reset();
	for (UnitCounter* marker : _unitMarkers)
		marker->AppendFighterWeapons(_plainLineRenderer);
	_plainLineRenderer->Draw(contentTransform, glm::vec4(0.4, 0.4, 0.4, 0.6));


	// Color Billboards

	_colorBillboardRenderer->Reset();
	_casualtyMarker->RenderCasualtyColorBillboards(_colorBillboardRenderer);
	_colorBillboardRenderer->Draw(contentTransform, GetCameraUpVector(), GetFrame().height());


	// Texture Billboards

	_billboardModel->dynamicBillboards.clear();
	_casualtyMarker->AppendCasualtyBillboards(_billboardModel);
	for (UnitCounter* marker : _unitMarkers)
		marker->AppendFighterBillboards(_billboardModel);
	for (SmokeCounter* marker : _smokeMarkers)
		marker->AppendSmokeBillboards(_billboardModel);
	_textureBillboardRenderer->Render(_billboardModel, contentTransform, GetCameraUpVector(), glm::degrees(GetCameraFacing()), GetFrame().height(), GetFlip());


	// Range Markers

	for (Unit* unit : _simulator->GetUnits())
	{
		if (unit->commander == _commander)
		{
			RangeMarker marker(_simulator, unit);
			_gradientTriangleStripRenderer->Reset();
			marker.Render(_gradientTriangleStripRenderer);
			_gradientTriangleStripRenderer->Draw(contentTransform);
		}
	}


	// Unit Facing Markers

	glDisable(GL_DEPTH_TEST);
	_textureTriangleRenderer->Reset();

	for (UnitCounter* marker : _unitMarkers)
		if (marker->GetUnit()->commander == _commander)
			marker->AppendFacingMarker(_textureTriangleRenderer, this);
	for (UnitMovementMarker* marker : _movementMarkers)
		if (marker->GetUnit()->commander == _commander)
			marker->AppendFacingMarker(_textureTriangleRenderer, this);
	for (UnitTrackingMarker* marker : _trackingMarkers)
		if (marker->GetUnit()->commander == _commander)
			marker->AppendFacingMarker(_textureTriangleRenderer, this);

	_textureTriangleRenderer->Draw(facingTransform, _textureUnitMarkers);



	// Unit Markers

	_textureBillboardRenderer1->Reset();
	_textureBillboardRenderer2->Reset();

	for (UnitCounter* marker : _unitMarkers)
		marker->AppendUnitMarker(_textureBillboardRenderer2, GetFlip());
	for (UnitMovementMarker* marker : _movementMarkers)
		marker->RenderMovementMarker(_textureBillboardRenderer1);
	for (UnitTrackingMarker* marker : _trackingMarkers)
		marker->RenderTrackingMarker(_textureBillboardRenderer1);

	bounds1f sizeLimit = GetUnitIconSizeLimit();
	_textureBillboardRenderer1->Draw(_textureUnitMarkers, contentTransform, GetCameraUpVector(), glm::degrees(GetCameraFacing()), GetFrame().height(), sizeLimit);
	_textureBillboardRenderer2->Draw(_textureUnitMarkers, contentTransform, GetCameraUpVector(), glm::degrees(GetCameraFacing()), GetFrame().height(), sizeLimit);


	// Tracking Markers

	glDisable(GL_DEPTH_TEST);
	for (UnitTrackingMarker* marker : _trackingMarkers)
	{
		_textureBillboardRenderer1->Reset();
		marker->RenderTrackingShadow(_textureBillboardRenderer1);
		_textureBillboardRenderer1->Draw(_textureTouchMarker, contentTransform, GetCameraUpVector(), glm::degrees(GetCameraFacing()), GetFrame().height(), bounds1f(64, 64));
	}


	// Movement Paths

	glEnable(GL_DEPTH_TEST);
	_gradientTriangleRenderer->Reset();
	for (UnitMovementMarker* marker : _movementMarkers)
		marker->RenderMovementPath(_gradientTriangleRenderer);
	_gradientTriangleRenderer->Draw(contentTransform);//, glm::vec4(0.5, 0.5, 1, 0.25));


	// Tracking Path

	glDisable(GL_DEPTH_TEST);
	for (UnitTrackingMarker* marker : _trackingMarkers)
	{
		_gradientTriangleRenderer->Reset();
		marker->RenderTrackingPath(_gradientTriangleRenderer);
		marker->RenderOrientation(_gradientTriangleRenderer);
		_gradientTriangleRenderer->Draw(contentTransform);
	}


	// Tracking Fighters

	glEnable(GL_DEPTH_TEST);
	_colorBillboardRenderer->Reset();
	for (UnitTrackingMarker* marker : _trackingMarkers)
		marker->RenderTrackingFighters(_colorBillboardRenderer);
	_colorBillboardRenderer->Draw(contentTransform, GetCameraUpVector(), GetFrame().height());


	// Movement Fighters

	_colorBillboardRenderer->Reset();
	for (UnitMovementMarker* marker : _movementMarkers)
		marker->RenderMovementFighters(_colorBillboardRenderer);
	_colorBillboardRenderer->Draw(contentTransform, GetCameraUpVector(), GetFrame().height());


	// Shooting Counters

	_gradientLineRenderer->Reset();
	for (ShootingCounter* shootingCounter : _shootingCounters)
		shootingCounter->Render(_gradientLineRenderer);
	_gradientLineRenderer->Draw(contentTransform);


	// Mouse Hint

	_plainLineRenderer->Reset();
	RenderMouseHint(_plainLineRenderer);
	_plainLineRenderer->Draw(contentTransform, glm::vec4(0, 0, 0, 0.5f));


	glDepthMask(true);
	glDisable(GL_DEPTH_TEST);
}