//---------------------------------------------------------------------------------------------------- bool EEProgressbar::Update() { if (!EEObject::Update()) return false; UpdateObjectState(); if (m_isPositionDirty) { m_isPositionDirty = false; } if (m_isScaleDirty || m_isLocalZOrderDirty || m_isProgressDirty) { Rect_Float rect( -m_quadWidth / 2, -m_quadHeight / 2, m_quadWidth / 2, m_quadHeight / 2 ); //the value of the z depends on the progress (the scaled end - the scaled width * (1.0f - the progress) rect.z -= (rect.z - rect.x) * (1.0f - m_progress); EEQuad2DVertex vertices[4]; vertices[0].pos = FLOAT3(rect.x, rect.y, m_localZOrder * 0.0001f); vertices[0].tex = FLOAT2(0, 0); vertices[1].pos = FLOAT3(rect.z, rect.y, m_localZOrder * 0.0001f); vertices[1].tex = FLOAT2(m_progress, 0); vertices[2].pos = FLOAT3(rect.x, rect.w, m_localZOrder * 0.0001f); vertices[2].tex = FLOAT2(0, 1); vertices[3].pos = FLOAT3(rect.z, rect.w, m_localZOrder * 0.0001f); vertices[3].tex = FLOAT2(m_progress, 1); ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext(); D3D11_MAPPED_SUBRESOURCE mappedResource; ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE)); deviceContext->Map(m_quadVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); memcpy(mappedResource.pData, vertices, sizeof(vertices)); deviceContext->Unmap(m_quadVB, 0); if (m_isProgressDirty) { if (m_callbackFunc) { m_callbackFunc(m_progress); } } m_isScaleDirty = false; m_isLocalZOrderDirty = false; m_isProgressDirty = false; } m_progressFrame.Update(); return true; }
//---------------------------------------------------------------------------------------------------- bool EECurve2D::Update() { if (!EEObject::Update()) return false; UpdateObjectState(); if (m_isPositionDirty) { m_isPositionDirty = false; } if (m_isLocalZOrderDirty || m_isCurveDirty) { std::vector<EECurve2DVertex> vertices(m_curve.size() << 1); if (m_curve.size() > 1) { float halfWidth = m_width / 2; float deltaTex = 1.f / m_curve.size(); for (unsigned int i = 0; i < m_curve.size() - 1; ++i) { int index = i << 1; FLOAT2 vertical = (m_curve[i + 1] - m_curve[i]).GetVertical(); vertices[index].pos = FLOAT3(m_curve[i] + vertical * halfWidth, m_localZOrder * 0.0001f); vertices[index].tex = FLOAT2(m_texRect.x, m_texRect.y + i * deltaTex); vertices[index + 1].pos = FLOAT3(m_curve[i] - vertical * halfWidth, m_localZOrder * 0.0001f); vertices[index + 1].tex = FLOAT2(m_texRect.z, m_texRect.y + i * deltaTex); } FLOAT2 vertical = (m_curve[m_curve.size() - 1] - m_curve[m_curve.size() - 2]).GetVertical(); vertices[vertices.size() - 2].pos = FLOAT3(m_curve.back() + vertical * halfWidth, m_localZOrder * 0.0001f); vertices[vertices.size() - 2].tex = FLOAT2(m_texRect.x, m_texRect.w); vertices[vertices.size() - 1].pos = FLOAT3(m_curve.back() - vertical * halfWidth, m_localZOrder * 0.0001f); vertices[vertices.size() - 1].tex = FLOAT2(m_texRect.z, m_texRect.w); } if (m_isCurveDirty) CreateCurveVertexBuffer(); if (m_curveVB) { ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext(); D3D11_MAPPED_SUBRESOURCE mappedResource; ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE)); deviceContext->Map(m_curveVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); memcpy(mappedResource.pData, &vertices[0], sizeof(EECurve2DVertex)* vertices.size()); deviceContext->Unmap(m_curveVB, 0); } m_isLocalZOrderDirty = false; m_isCurveDirty = false; } return true; }
//---------------------------------------------------------------------------------------------------- bool EECylinder::Update() { if (!EEObject::Update()) return false; UpdateObjectState(); if (m_isScaleDirty) { CreateCylinderBuffer(); m_isScaleDirty = false; } return true; }
//---------------------------------------------------------------------------------------------------- bool EEPolyhedron::Update() { if (!EEObject::Update()) return false; UpdateObjectState(); if (m_isScaleDirty) { //CreatePolyhedronBuffer(); m_isScaleDirty = false; } return true; }
//---------------------------------------------------------------------------------------------------- bool EEQuad2D::Update() { if (!EEObject::Update()) return false; UpdateObjectState(); if (m_isPositionDirty) { m_isPositionDirty = false; } if (m_isScaleDirty || m_isLocalZOrderDirty || m_isTexRectDirty) { Rect_Float rect( -m_quadWidth / 2, -m_quadHeight / 2, m_quadWidth / 2, m_quadHeight / 2 ); EEQuad2DVertex quadVertices[4]; quadVertices[0].pos = FLOAT3(rect.x, rect.y, m_localZOrder * 0.0001f); quadVertices[0].tex = FLOAT2(m_texRect.x, m_texRect.y); quadVertices[1].pos = FLOAT3(rect.z, rect.y, m_localZOrder * 0.0001f); quadVertices[1].tex = FLOAT2(m_texRect.z, m_texRect.y); quadVertices[2].pos = FLOAT3(rect.x, rect.w, m_localZOrder * 0.0001f); quadVertices[2].tex = FLOAT2(m_texRect.x, m_texRect.w); quadVertices[3].pos = FLOAT3(rect.z, rect.w, m_localZOrder * 0.0001f); quadVertices[3].tex = FLOAT2(m_texRect.z, m_texRect.w); ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext(); D3D11_MAPPED_SUBRESOURCE mappedResource; ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE)); deviceContext->Map(m_quadVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); memcpy(mappedResource.pData, quadVertices, sizeof(quadVertices)); deviceContext->Unmap(m_quadVB, 0); m_isScaleDirty = false; m_isLocalZOrderDirty = false; m_isTexRectDirty = false; } return true; }
//---------------------------------------------------------------------------------------------------- bool EEPoints2D::Update() { if (!EEObject::Update()) return false; UpdateObjectState(); if (m_isPositionDirty) { m_isPositionDirty = false; } if (m_isScaleDirty || m_isLocalZOrderDirty || m_isPointsDirty) { std::vector<EEPoints2DVertex> vertices(m_points.size()); for (unsigned int i = 0; i < m_points.size(); ++i) { vertices[i].pos = FLOAT3(m_points[i], m_localZOrder * 0.0001f); } if (m_isPointsDirty) CreatePointsVertexBuffer(); ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext(); D3D11_MAPPED_SUBRESOURCE mappedResource; ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE)); deviceContext->Map(m_pointsVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); memcpy(mappedResource.pData, &vertices[0], vertices.size() * sizeof(EEPoints2DVertex)); deviceContext->Unmap(m_pointsVB, 0); m_isScaleDirty = false; m_isLocalZOrderDirty = false; m_isPointsDirty = false; } return true; }