/*************************************************************//** * * @brief 生成処理を行う * @param ID * @param 座標 * @return エフェクト * ****************************************************************/ C_EffectGenerator::EffectPtr C_EffectGenerator::Create(const std::string& rId, const C_EffectGenerator::Vector3& rPosition) { // エフェクトを生成 EffectPtr pEffect(createFunctions_.at(rId)(rPosition)); // タスクシステムに登録 pTaskSystem_->Entry(pEffect, TaskPriority::s_EFFECT_UPDATE, TaskPriority::s_EFFECT_DRAW); return pEffect; }
/*************************************************************//** * * @brief 生成処理を行う * @param ID * @param 座標 * @return エフェクト * ****************************************************************/ EffectPtr C_EffectGenerator::Create(const std::string& rId, const Vector3& rPosition) { // エフェクトを生成し、座標を設定 EffectPtr pEffect(pCreateFunctions_.at(rId)()); pEffect->SetPosition(rPosition); pEffect->AddStringToId(std::to_string(number)); // タスクシステムに登録 pTaskSystem_->Entry(pEffect, Priority::Task::Update::s_effect, Priority::Task::Draw::s_effect); ++number; return pEffect; }
void Diagnostic::DrawAllObjects(const Transform& projection, const Transform& view) { if(sm_diag->m_showDiagnostics) { LPD3DXEFFECT pEffect(sm_diag->m_shader->GetEffect()); pEffect->SetTechnique(DxConstant::DefaultTechnique); auto renderObject = [&](LPD3DXMESH mesh, const D3DXVECTOR3& color, const Transform& world) { D3DXMATRIX wvp = world.Matrix() * view.Matrix() * projection.Matrix(); pEffect->SetMatrix(DxConstant::WordViewProjection, &wvp); pEffect->SetFloatArray(DxConstant::VertexColor, &color.x, 3); UINT nPasses = 0; pEffect->Begin(&nPasses, 0); for(UINT iPass = 0; iPass < nPasses; iPass++) { pEffect->BeginPass(iPass); mesh->DrawSubset(0); pEffect->EndPass(); } pEffect->End(); }; for(SphereMap::iterator it = sm_diag->m_spheremap.begin(); it != sm_diag->m_spheremap.end(); ++it) { if(it->second.draw) { renderObject(sm_diag->m_sphere, it->second.color, it->second.world); it->second.draw = false; } } for(LineMap::iterator it = sm_diag->m_linemap.begin(); it != sm_diag->m_linemap.end(); ++it) { if(it->second.draw) { renderObject(sm_diag->m_cylinder, it->second.color, it->second.world); it->second.draw = false; } } } }