コード例 #1
0
ファイル: ModelDrawer.cpp プロジェクト: AlexDiede/spring
void IModelDrawer::RenderUnitDestroyed(const CUnit* u)
{
	LOG_L(L_DEBUG, "[%s] id=%d", __FUNCTION__, u->id);

	#if (MODEL_DRAWER_DEBUG_RENDERING)
	if (u->model) {
		cloakedModelRenderers[MDL_TYPE(u)]->DelUnit(u);
		opaqueModelRenderers[MDL_TYPE(u)]->DelUnit(u);
	}
	#endif
}
コード例 #2
0
ファイル: ModelDrawer.cpp プロジェクト: AlexDiede/spring
void IModelDrawer::RenderUnitCreated(const CUnit* u, int cloaked)
{
	LOG_L(L_DEBUG, "[%s] id=%d", __FUNCTION__, u->id);

	#if (MODEL_DRAWER_DEBUG_RENDERING)
	if (u->model) {
		if (cloaked) {
			// units can start life cloaked
			cloakedModelRenderers[MDL_TYPE(u)]->AddUnit(u);
		} else {
			opaqueModelRenderers[MDL_TYPE(u)]->AddUnit(u);
		}
	}
	#endif
}
コード例 #3
0
void CProjectileDrawer::RenderProjectileDestroyed(const CProjectile* const p)
{
	if (p->model) {
		modelRenderers[MDL_TYPE(p)]->DelProjectile(p);
	} else {
		renderProjectiles.erase(const_cast<CProjectile*>(p));
	}
}
コード例 #4
0
void CFeatureDrawer::RenderFeatureDestroyed(const CFeature* feature)
{
	CFeature* f = const_cast<CFeature*>(feature);

	if (f->def->drawType == DRAWTYPE_MODEL) {
		unsortedFeatures.erase(f);
	}

	if (f->drawQuad >= 0) {
		DrawQuad* dq = &drawQuads[f->drawQuad];
		dq->features.erase(f);
	}

	if (f->model) {
		opaqueModelRenderers[MDL_TYPE(f)]->DelFeature(f);
		cloakedModelRenderers[MDL_TYPE(f)]->DelFeature(f);
	}
}
コード例 #5
0
ファイル: ModelDrawer.cpp プロジェクト: AlexDiede/spring
void IModelDrawer::RenderProjectileDestroyed(const CProjectile* p)
{
	LOG_L(L_DEBUG, "[%s] id=%d", __FUNCTION__, p->id);

	#if (MODEL_DRAWER_DEBUG_RENDERING)
	if (p->model) {
		opaqueModelRenderers[MDL_TYPE(p)]->DelProjectile(p);
	}
	#endif
}
コード例 #6
0
ファイル: ModelDrawer.cpp プロジェクト: AlexDiede/spring
void IModelDrawer::RenderFeatureDestroyed(const CFeature* f, const float3& pos)
{
	LOG_L(L_DEBUG, "[%s] id=%d", __FUNCTION__, f->id);

	#if (MODEL_DRAWER_DEBUG_RENDERING)
	if (f->model) {
		opaqueModelRenderers[MDL_TYPE(f)]->DelFeature(f);
	}
	#endif
}
コード例 #7
0
ファイル: ModelDrawer.cpp プロジェクト: AlexDiede/spring
void IModelDrawer::RenderFeatureCreated(const CFeature* f)
{
	LOG_L(L_DEBUG, "[%s] id=%d", __FUNCTION__, f->id);

	#if (MODEL_DRAWER_DEBUG_RENDERING)
	if (f->model) {
		opaqueModelRenderers[MDL_TYPE(f)]->AddFeature(f);
	}
	#endif
}
コード例 #8
0
ファイル: FeatureDrawer.cpp プロジェクト: AMDmi3/spring
void CFeatureDrawer::RenderFeatureDestroyed(const CFeature* feature)
{
	CFeature* f = const_cast<CFeature*>(feature);

	if (f->def->drawType == DRAWTYPE_MODEL) {
		unsortedFeatures.erase(f);
	}

	if (f->drawQuad >= 0) {
		DrawQuad* dq = &drawQuads[f->drawQuad];
		dq->features.erase(f);
	}

	if (f->model) {
		opaqueModelRenderers[MDL_TYPE(f)]->DelFeature(f);
		cloakedModelRenderers[MDL_TYPE(f)]->DelFeature(f);
	}

	if (feature->objectDef->decalDef.useGroundDecal)
		groundDecals->RemoveSolidObject(f, NULL);
}
コード例 #9
0
ファイル: ProjectileDrawer.cpp プロジェクト: Arkazon/spring
void CProjectileDrawer::RenderProjectileCreated(const CProjectile* p)
{
	texturehandlerS3O->UpdateDraw();

	if (GML::SimEnabled() && !GML::ShareLists() && p->model && TEX_TYPE(p) < 0)
		TEX_TYPE(p) = texturehandlerS3O->LoadS3OTextureNow(p->model);

	if (p->model) {
		modelRenderers[MDL_TYPE(p)]->AddProjectile(p);
	} else {
		renderProjectiles.insert(const_cast<CProjectile*>(p));
	}
}
コード例 #10
0
void CProjectileDrawer::RenderProjectileCreated(const CProjectile* p)
{
	texturehandlerS3O->UpdateDraw();

#if defined(USE_GML) && GML_ENABLE_SIM && !GML_SHARE_LISTS
	if(p->model && TEX_TYPE(p) < 0)
		TEX_TYPE(p) = texturehandlerS3O->LoadS3OTextureNow(p->model);
#endif

	if (p->model) {
		modelRenderers[MDL_TYPE(p)]->AddProjectile(p);
	} else {
		renderProjectiles.insert(const_cast<CProjectile*>(p));
	}
}
コード例 #11
0
ファイル: FeatureDrawer.cpp プロジェクト: AMDmi3/spring
	void DrawQuad(int x, int y)
	{
		std::vector<IWorldObjectModelRenderer*>& opaqueModelRenderers = featureDrawer->opaqueModelRenderers;
		std::vector<IWorldObjectModelRenderer*>& cloakedModelRenderers = featureDrawer->cloakedModelRenderers;

		const CFeatureDrawer::DrawQuad* dq = &(*drawQuads)[y * drawQuadsX + x];

		for (std::set<CFeature*>::const_iterator fi = dq->features.begin(); fi != dq->features.end(); ++fi) {
			CFeature* f = (*fi);

			if (f->IsInVoid())
				continue;

			assert(f->def->drawType == DRAWTYPE_MODEL);

			if (gu->spectatingFullView || f->IsInLosForAllyTeam(gu->myAllyTeam)) {
				if (drawReflection) {
					float3 zeroPos;

					if (f->midPos.y < 0.0f) {
						zeroPos = f->midPos;
					} else {
						const float dif = f->midPos.y - camera->GetPos().y;
						zeroPos =
							camera->GetPos() * (f->midPos.y / dif) +
							f->midPos * (-camera->GetPos().y / dif);
					}
					if (ground->GetApproximateHeight(zeroPos.x, zeroPos.z, false) > f->drawRadius) {
						continue;
					}
				}
				if (drawRefraction) {
					if (f->pos.y > 0.0f)
						continue;
				}

				const float sqDist = (f->pos - camera->GetPos()).SqLength();
				const float farLength = f->sqRadius * unitDrawer->unitDrawDistSqr;
#ifdef USE_GML
				if (statFeatures && (f->reclaimLeft < 1.0f || f->resurrectProgress > 0.0f))
					statFeatures->push_back(f);
#endif

				if (sqDist < farLength) {
					float sqFadeDistE;
					float sqFadeDistB;

					if (farLength < sqFadeDistEnd) {
						sqFadeDistE = farLength;
						sqFadeDistB = farLength * sqFadeDistBegin / sqFadeDistEnd;
					} else {
						sqFadeDistE = sqFadeDistEnd;
						sqFadeDistB = sqFadeDistBegin;
					}

					if (sqDist < sqFadeDistB) {
						cloakedModelRenderers[MDL_TYPE(f)]->DelFeature(f);
						if (camera->InView(f->drawMidPos, f->drawRadius))
							opaqueModelRenderers[MDL_TYPE(f)]->AddFeature(f);
					} else if (sqDist < sqFadeDistE) {
						const float falpha = 1.0f - (sqDist - sqFadeDistB) / (sqFadeDistE - sqFadeDistB);
						opaqueModelRenderers[MDL_TYPE(f)]->DelFeature(f);
						if (camera->InView(f->drawMidPos, f->drawRadius))
							cloakedModelRenderers[MDL_TYPE(f)]->AddFeature(f, falpha);
					}
				} else {
					if (farFeatures) {
						farTextureHandler->Queue(f);
					}
				}
			}
		}
	}