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 }
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 }
void CProjectileDrawer::RenderProjectileDestroyed(const CProjectile* const p) { if (p->model) { modelRenderers[MDL_TYPE(p)]->DelProjectile(p); } else { renderProjectiles.erase(const_cast<CProjectile*>(p)); } }
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); } }
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 }
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 }
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 }
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); }
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)); } }
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)); } }
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); } } } } }