diff --git a/source/EngineGpuKernels/RenderingKernels.cu b/source/EngineGpuKernels/RenderingKernels.cu index 5d1a96efe..d1f218153 100644 --- a/source/EngineGpuKernels/RenderingKernels.cu +++ b/source/EngineGpuKernels/RenderingKernels.cu @@ -513,25 +513,26 @@ __global__ void cudaDrawCells( //draw muscle movements if (cudaSimulationParameters.muscleMovementVisualization && cell->cellFunction == CellFunction_Muscle && (cell->cellFunctionData.muscle.lastMovementX != 0 || cell->cellFunctionData.muscle.lastMovementY != 0)) { + float2 lastMovement{cell->cellFunctionData.muscle.lastMovementX, cell->cellFunctionData.muscle.lastMovementY}; + auto lastMovementLength = Math::length(lastMovement); + if (lastMovementLength > 0.05f) { + lastMovement = lastMovement / lastMovementLength * 0.05f; + } auto color = float3{0.7f, 0.7f, 0.7f} * min(1.0f, zoom * 0.1f); - auto endPos = cell->pos + float2{cell->cellFunctionData.muscle.lastMovementX, cell->cellFunctionData.muscle.lastMovementY} * 100; + auto endPos = cell->pos + lastMovement * 100; auto endImagePos = mapWorldPosToImagePos(rectUpperLeft, endPos, universeImageSize, zoom); if (isLineVisible(cellImagePos, endImagePos, universeImageSize)) { drawLine(cellImagePos, endImagePos, color, imageData, imageSize); } - auto arrowPos1 = endPos + float2{ - -cell->cellFunctionData.muscle.lastMovementX + cell->cellFunctionData.muscle.lastMovementY, - -cell->cellFunctionData.muscle.lastMovementX - cell->cellFunctionData.muscle.lastMovementY} * 20; + auto arrowPos1 = endPos + float2{-lastMovement.x + lastMovement.y, -lastMovement.x - lastMovement.y} * 20; auto arrowImagePos1 = mapWorldPosToImagePos(rectUpperLeft, arrowPos1, universeImageSize, zoom); if (isLineVisible(arrowImagePos1, endImagePos, universeImageSize)) { drawLine(arrowImagePos1, endImagePos, color, imageData, imageSize); } - auto arrowPos2 = endPos + float2{ - -cell->cellFunctionData.muscle.lastMovementX - cell->cellFunctionData.muscle.lastMovementY, - +cell->cellFunctionData.muscle.lastMovementX - cell->cellFunctionData.muscle.lastMovementY} * 20; + auto arrowPos2 = endPos + float2{-lastMovement.x - lastMovement.y, +lastMovement.x - lastMovement.y} * 20; auto arrowImagePos2 = mapWorldPosToImagePos(rectUpperLeft, arrowPos2, universeImageSize, zoom); if (isLineVisible(arrowImagePos2, endImagePos, universeImageSize)) { drawLine(arrowImagePos2, endImagePos, color, imageData, imageSize); diff --git a/source/Gui/AlienImGui.cpp b/source/Gui/AlienImGui.cpp index 1a1718a93..281d137f4 100644 --- a/source/Gui/AlienImGui.cpp +++ b/source/Gui/AlienImGui.cpp @@ -1346,6 +1346,7 @@ bool AlienImGui::ShowPreviewDescription(PreviewDescription const& desc, float& z auto result = false; auto color = ImGui::GetStyle().Colors[ImGuiCol_WindowBg]; + auto windowPos = ImGui::GetWindowPos(); auto windowSize = ImGui::GetWindowSize(); RealVector2D upperLeft; @@ -1366,6 +1367,9 @@ bool AlienImGui::ShowPreviewDescription(PreviewDescription const& desc, float& z } RealVector2D previewSize = (lowerRight - upperLeft) * cellSize + RealVector2D(cellSize, cellSize) * 2; + auto mousePos = ImGui::GetMousePos(); + auto clickedOnPreviewWindow = ImGui::IsMouseClicked(ImGuiMouseButton_Left) && mousePos.x >= windowPos.x && mousePos.y >= windowPos.y + && mousePos.x <= windowPos.x + windowSize.x && mousePos.y <= windowPos.y + windowSize.y; ImGui::SetCursorPos({std::max(0.0f, windowSize.x - previewSize.x) / 2, std::max(0.0f, windowSize.y - previewSize.y) / 2}); if (ImGui::BeginChild("##genome", ImVec2(previewSize.x, previewSize.y), false, ImGuiWindowFlags_HorizontalScrollbar)) { @@ -1396,8 +1400,7 @@ bool AlienImGui::ShowPreviewDescription(PreviewDescription const& desc, float& z } } - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) { - auto mousePos = ImGui::GetMousePos(); + if (clickedOnPreviewWindow) { if (mousePos.x >= cellPos.x - cellSize / 2 && mousePos.y >= cellPos.y - cellSize / 2 && mousePos.x <= cellPos.x + cellSize / 2 && mousePos.y <= cellPos.y + cellSize / 2) { selectedNode = cell.nodeIndex; diff --git a/source/Gui/OverlayController.cpp b/source/Gui/OverlayController.cpp index 389c36345..6fb1902b5 100644 --- a/source/Gui/OverlayController.cpp +++ b/source/Gui/OverlayController.cpp @@ -91,12 +91,12 @@ void OverlayController::processProgressAnimation() auto center = ImVec2{viewSize.x / 2, viewSize.y - scale(60.0f)}; drawList->AddRectFilledMultiColor( - ImVec2{center.x - width, center.y - height * 5}, - ImVec2{center.x, center.y + height}, + ImVec2{center.x, center.y - height * 5}, + ImVec2{center.x - width, center.y + height}, ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f), + ImColor::HSV(0.66f, 1.0f, 0.1f,0.0f), ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f), - ImColor::HSV(0.66f, 1.0f, 0.1f, 1.0f * alpha), - ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f)); + ImColor::HSV(0.66f, 1.0f, 0.1f, 1.0f * alpha)); drawList->AddRectFilledMultiColor( ImVec2{center.x, center.y - height * 5}, ImVec2{center.x + width, center.y + height}, @@ -105,10 +105,10 @@ void OverlayController::processProgressAnimation() ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f), ImColor::HSV(0.66f, 1.0f, 0.1f, 1.0f * alpha)); drawList->AddRectFilledMultiColor( - ImVec2{center.x, center.y + height}, - ImVec2{center.x + width, center.y + height * 6}, - ImColor::HSV(0.66f, 1.0f, 0.1f, 1.0f * alpha), + ImVec2{center.x + width, center.y + height}, + ImVec2{center.x, center.y + height * 6}, ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f), + ImColor::HSV(0.66f, 1.0f, 0.1f, 1.0f * alpha), ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f), ImColor::HSV(0.66f, 1.0f, 0.1f, 0.0f)); drawList->AddRectFilledMultiColor(