Skip to content
Snippets Groups Projects
Commit 3142c8a5 authored by Sebastian Pape's avatar Sebastian Pape
Browse files

Fixing bug in cluster event ordering and decreasing the amount of needed events

parent 3d91c6a5
No related branches found
No related tags found
1 merge request!2Backporting many features from the study on top of the Dasher3D-Core
......@@ -45,18 +45,10 @@ FReply SDasherWidget::HandleMouseMoveEvent(const FGeometry& Geometry, const FPoi
{
if (CurrentlyUsingVectorInput) return FReply::Unhandled();
//The mouse event only contains the Screen Space Position
CursorPosition = Geometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition());
const FVector2D newMousePosition = Geometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition());
if(URWTHVRUtilities::IsRoomMountedMode())
{
FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.EventId = DasherEventID;
ClusterEvent.EventData.SetNumUninitialized(sizeof(CursorPosition.X) + sizeof(CursorPosition.Y) + 1);
ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Input_MouseMove);
FMemory::Memcpy(&ClusterEvent.EventData[1], &CursorPosition.X, sizeof(CursorPosition.X));
FMemory::Memcpy(&ClusterEvent.EventData[1] + sizeof(CursorPosition.X), &CursorPosition.Y, sizeof(CursorPosition.Y));
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
}
NewMousePosition.x = newMousePosition.X;
NewMousePosition.y = newMousePosition.Y;
}
return FReply::Handled();
}
......@@ -137,9 +129,9 @@ FReply SDasherWidget::HandleMouseDoubleClickEvent(const FGeometry& Geometry, con
//Set in the HandleMouseMoveEvent or via Set InputVector
//See tick for geometry things that could be use to modify this.
FVector2D SDasherWidget::GetCursorPosition()
FVector2D SDasherWidget::GetCursorPosition() const
{
return CursorPosition;
return FVector2D(CursorPosition.x, CursorPosition.y);
}
bool SDasherWidget::GetScreenCoords(screenint& iX, screenint& iY, Dasher::CDasherView* pView)
......@@ -166,13 +158,13 @@ void SDasherWidget::HandleClusterEvent(const FDisplayClusterClusterEventBinary&
DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
MouseUpListeners.ExecuteIfBound();
break;
case DasherEventType::Input_MouseMove:
FMemory::Memcpy(&CursorPosition.X, &Event.EventData[1], sizeof(CursorPosition.X));
FMemory::Memcpy(&CursorPosition.Y, &Event.EventData[1] + sizeof(CursorPosition.X), sizeof(CursorPosition.Y));
break;
case DasherEventType::Tick:
double currentTime = 0;
FMemory::Memcpy(&currentTime, &Event.EventData[1], sizeof(currentTime));
FMemory::Memcpy(&CursorPosition.x, &Event.EventData[1] + sizeof(currentTime), sizeof(CursorPosition.x));
FMemory::Memcpy(&CursorPosition.y, &Event.EventData[1] + sizeof(currentTime) + sizeof(CursorPosition.x), sizeof(CursorPosition.y));
DasherMainInterface->Tick(static_cast<unsigned long>(currentTime * 1000.0));
break;
}
......@@ -182,8 +174,10 @@ void SDasherWidget::InputVector(const FVector2D InputVector)
{
if (!InputPaused) {
if (!CurrentlyUsingVectorInput) return;
CursorPosition = DasherMainInterface->ConvertDasher2Screen(Dasher::CDasherModel::ORIGIN_X, Dasher::CDasherModel::ORIGIN_Y)
const FVector2D pos = DasherMainInterface->ConvertDasher2Screen(Dasher::CDasherModel::ORIGIN_X, Dasher::CDasherModel::ORIGIN_Y)
+ InputVector * FVector2D(1.0f, -1.0f) * (GetHeight() / 2);
CursorPosition.x = pos.X;
CursorPosition.y = pos.Y;
}
}
......@@ -302,17 +296,26 @@ void SDasherWidget::Tick(const FGeometry& AllottedGeometry, const double InCurre
//don't tick in the editor
if (IsEditor || InputPaused) return;
//Needs to be updated in Tick due to event order in cluster mode
CursorPosition = NewMousePosition;
if(!URWTHVRUtilities::IsRoomMountedMode()){
DasherMainInterface->Tick(static_cast<unsigned long>(InCurrentTime * 1000.0)); //we need to provide ticks in milliseconds
}
else
if(URWTHVRUtilities::IsPrimaryNode())
{
UE_LOG(LogTemp, Log, TEXT("EventSend: %d, %d"), CursorPosition.x, CursorPosition.y);
FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.EventId = DasherEventID;
ClusterEvent.EventData.SetNumUninitialized(sizeof(InCurrentTime) + 1);
ClusterEvent.EventData.SetNumUninitialized(sizeof(InCurrentTime) + sizeof(CursorPosition.x) + sizeof(CursorPosition.y) + 1);
ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Tick);
FMemory::Memcpy(&ClusterEvent.EventData[1], &InCurrentTime, sizeof(InCurrentTime));
FMemory::Memcpy(&ClusterEvent.EventData[1] + sizeof(InCurrentTime), &CursorPosition.x, sizeof(CursorPosition.x));
FMemory::Memcpy(&ClusterEvent.EventData[1] + sizeof(InCurrentTime) + sizeof(CursorPosition.x), &CursorPosition.y, sizeof(CursorPosition.y));
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
}
......@@ -328,7 +331,7 @@ void SDasherWidget::Tick(const FGeometry& AllottedGeometry, const double InCurre
}
}
std::pair<SDasherWidget::screenint, SDasherWidget::screenint> SDasherWidget::TextSize(CDasherScreen::Label* Label, unsigned Size)
std::pair<Dasher::screenint, Dasher::screenint> SDasherWidget::TextSize(Label* Label, unsigned Size)
{
const FSlateFontInfo Font = FCoreStyle::GetDefaultFontStyle("Roboto", Size, FFontOutlineSettings::NoOutline); //get the font
const FVector2D TextSize = FontMeasureService->Measure(FString(UTF8_TO_TCHAR(Label->m_strText.c_str())), Font, 1); //get the real size of the text, using the fontmeasuring service
......
......@@ -25,8 +25,7 @@ enum class DasherEventType : uint8
{
Input_MouseDown = 1,
Input_MouseUp = 2,
Input_MouseMove = 3,
Tick
Tick = 3
};
struct DasherDrawGeometry
......@@ -136,7 +135,7 @@ public:
void InputVector(FVector2D InputVector);
void InputButton(bool Pressed);
FVector2D GetCursorPosition();
FVector2D GetCursorPosition() const;
//Allows to Pause Input
void PauseInput();
......@@ -160,7 +159,8 @@ private:
int Width = 0;
bool HasBeenPainted = false;
bool CurrentlyUsingVectorInput = false;
FVector2D CursorPosition;
point CursorPosition = {0,0};
point NewMousePosition = {0,0};
bool CharacterEnteredFlag = false;
bool CharacterDeletedFlag = false;
FString AlteredChar = "";
......@@ -175,7 +175,7 @@ private:
//CAVE Sync
FOnClusterEventBinaryListener ClusterEventListener;
inline static int32 DasherEventID = -424242;
inline static int32 DasherEventID = 424242;
protected:
// stores color information
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment