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

Fixing destructor

parent 031c5416
No related branches found
No related tags found
1 merge request!2Backporting many features from the study on top of the Dasher3D-Core
...@@ -49,13 +49,14 @@ FReply SDasherWidget::HandleMouseMoveEvent(const FGeometry& Geometry, const FPoi ...@@ -49,13 +49,14 @@ FReply SDasherWidget::HandleMouseMoveEvent(const FGeometry& Geometry, const FPoi
if(URWTHVRUtilities::IsRoomMountedMode()) if(URWTHVRUtilities::IsRoomMountedMode())
{ {
FDisplayClusterClusterEventJson ClusterEvent; FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.Category = "Dasher"; ClusterEvent.EventId = DasherEventID;
ClusterEvent.Type = "Input"; ClusterEvent.EventData.Reserve(sizeof(CursorPosition.X) + sizeof(CursorPosition.Y) + 1);
ClusterEvent.Name = "MouseMove"; ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Input_MouseMove);
ClusterEvent.Parameters.Add("X", FString::SanitizeFloat(CursorPosition.X)); FMemory::Memcpy(&ClusterEvent.EventData[1], &CursorPosition.X, sizeof(CursorPosition.X));
ClusterEvent.Parameters.Add("Y", FString::SanitizeFloat(CursorPosition.Y)); FMemory::Memcpy(&ClusterEvent.EventData[1] + sizeof(CursorPosition.X), &CursorPosition.Y, sizeof(CursorPosition.Y));
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventJson(ClusterEvent, false); IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
return FReply::Handled().ReleaseMouseLock(); return FReply::Handled().ReleaseMouseLock();
} }
} }
...@@ -68,11 +69,12 @@ FReply SDasherWidget::HandleMouseDownEvent(const FGeometry& Geometry, const FPoi ...@@ -68,11 +69,12 @@ FReply SDasherWidget::HandleMouseDownEvent(const FGeometry& Geometry, const FPoi
{ {
if(URWTHVRUtilities::IsRoomMountedMode()) if(URWTHVRUtilities::IsRoomMountedMode())
{ {
FDisplayClusterClusterEventJson ClusterEvent; FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.Category = "Dasher"; ClusterEvent.EventId = DasherEventID;
ClusterEvent.Type = "Input"; ClusterEvent.EventData.Reserve(1);
ClusterEvent.Name = "MouseDown"; ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Input_MouseDown);
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventJson(ClusterEvent, false); IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
return FReply::Handled().ReleaseMouseLock(); return FReply::Handled().ReleaseMouseLock();
} }
...@@ -91,11 +93,11 @@ FReply SDasherWidget::HandleMouseUpEvent(const FGeometry& Geometry, const FPoint ...@@ -91,11 +93,11 @@ FReply SDasherWidget::HandleMouseUpEvent(const FGeometry& Geometry, const FPoint
{ {
if(URWTHVRUtilities::IsRoomMountedMode()) if(URWTHVRUtilities::IsRoomMountedMode())
{ {
FDisplayClusterClusterEventJson ClusterEvent; FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.Category = "Dasher"; ClusterEvent.EventId = DasherEventID;
ClusterEvent.Type = "Input"; ClusterEvent.EventData.Reserve(1);
ClusterEvent.Name = "MouseUp"; ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Input_MouseUp);
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventJson(ClusterEvent, false); IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
return FReply::Handled().ReleaseMouseLock(); return FReply::Handled().ReleaseMouseLock();
} }
...@@ -117,11 +119,11 @@ FReply SDasherWidget::HandleMouseDoubleClickEvent(const FGeometry& Geometry, con ...@@ -117,11 +119,11 @@ FReply SDasherWidget::HandleMouseDoubleClickEvent(const FGeometry& Geometry, con
{ {
if(URWTHVRUtilities::IsRoomMountedMode()) if(URWTHVRUtilities::IsRoomMountedMode())
{ {
FDisplayClusterClusterEventJson ClusterEvent; FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.Category = "Dasher"; ClusterEvent.EventId = DasherEventID;
ClusterEvent.Type = "Input"; ClusterEvent.EventData.Reserve(1);
ClusterEvent.Name = "MouseDown"; ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Input_MouseDown);
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventJson(ClusterEvent, false); IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
return FReply::Handled().ReleaseMouseLock(); return FReply::Handled().ReleaseMouseLock();
} }
...@@ -152,31 +154,29 @@ bool SDasherWidget::GetScreenCoords(screenint& iX, screenint& iY, Dasher::CDashe ...@@ -152,31 +154,29 @@ bool SDasherWidget::GetScreenCoords(screenint& iX, screenint& iY, Dasher::CDashe
return true; return true;
} }
void SDasherWidget::HandleClusterEvent(const FDisplayClusterClusterEventJson& Event) void SDasherWidget::HandleClusterEvent(const FDisplayClusterClusterEventBinary& Event)
{
if(Event.Category != "Dasher") return;
if(Event.Type == "Input")
{ {
if(Event.Name == "MouseUp") if(Event.EventId != DasherEventID) return;
{
DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input); switch(static_cast<DasherEventType>(Event.EventData[0]))
MouseUpListeners.ExecuteIfBound();
} else
if(Event.Name == "MouseDown")
{ {
case DasherEventType::Input_MouseDown:
DasherMainInterface->KeyDown(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input); DasherMainInterface->KeyDown(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
MouseDownListeners.ExecuteIfBound(); MouseDownListeners.ExecuteIfBound();
} else break;
if(Event.Name == "MouseMove") case DasherEventType::Input_MouseUp:
{ DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
CursorPosition.X = FCString::Atod(*Event.Parameters["X"]); MouseUpListeners.ExecuteIfBound();
CursorPosition.Y = FCString::Atod(*Event.Parameters["Y"]); break;
} case DasherEventType::Input_MouseMove:
} else FMemory::Memcpy(&CursorPosition.X, &Event.EventData[1], sizeof(CursorPosition.X));
if(Event.Type == "Tick") FMemory::Memcpy(&CursorPosition.Y, &Event.EventData[1] + sizeof(CursorPosition.X), sizeof(CursorPosition.Y));
{ break;
double currentTime = FCString::Atod(*Event.Parameters["Time"]); case DasherEventType::Tick:
double currentTime = 0;
FMemory::Memcpy(&currentTime, &Event.EventData[1], sizeof(currentTime));
DasherMainInterface->Tick(static_cast<unsigned long>(currentTime * 1000.0)); DasherMainInterface->Tick(static_cast<unsigned long>(currentTime * 1000.0));
break;
} }
} }
...@@ -230,11 +230,11 @@ void SDasherWidget::Construct(const FArguments& InArgs) ...@@ -230,11 +230,11 @@ void SDasherWidget::Construct(const FArguments& InArgs)
// Bind the cluster events that manage the door state. // Bind the cluster events that manage the door state.
IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr(); IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
if (ClusterManager && !ClusterEventListener.IsBound()) if (URWTHVRUtilities::IsRoomMountedMode() && ClusterManager && !ClusterEventListener.IsBound())
{ {
ClusterEventListener = ClusterEventListener =
FOnClusterEventJsonListener::CreateSP(this, &SDasherWidget::HandleClusterEvent); FOnClusterEventBinaryListener::CreateSP(this, &SDasherWidget::HandleClusterEvent);
ClusterManager->AddClusterEventJsonListener(ClusterEventListener); ClusterManager->AddClusterEventBinaryListener(ClusterEventListener);
} }
if (URWTHVRUtilities::IsPrimaryNode()) if (URWTHVRUtilities::IsPrimaryNode())
...@@ -300,10 +300,10 @@ int32 SDasherWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGe ...@@ -300,10 +300,10 @@ int32 SDasherWidget::OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGe
//The tick function, we tick dasher in it and update the screen size for dasher //The tick function, we tick dasher in it and update the screen size for dasher
void SDasherWidget::Tick(const FGeometry& AllotedGeometry, const double InCurrentTime, const float InDeltaTime) { void SDasherWidget::Tick(const FGeometry& AllotedGeometry, const double InCurrentTime, const float InDeltaTime) {
SCompoundWidget::Tick(AllotedGeometry, InCurrentTime, InDeltaTime);
//don't tick in the editor //don't tick in the editor
if (!IsEditor && !InputPaused) return; if (IsEditor || InputPaused) return;
SCompoundWidget::Tick(AllotedGeometry, InCurrentTime, InDeltaTime);
if(!URWTHVRUtilities::IsRoomMountedMode()){ if(!URWTHVRUtilities::IsRoomMountedMode()){
DasherMainInterface->Tick(static_cast<unsigned long>(InCurrentTime * 1000.0)); //we need to provide ticks in milliseconds DasherMainInterface->Tick(static_cast<unsigned long>(InCurrentTime * 1000.0)); //we need to provide ticks in milliseconds
...@@ -311,11 +311,12 @@ void SDasherWidget::Tick(const FGeometry& AllotedGeometry, const double InCurren ...@@ -311,11 +311,12 @@ void SDasherWidget::Tick(const FGeometry& AllotedGeometry, const double InCurren
else else
if(URWTHVRUtilities::IsPrimaryNode()) if(URWTHVRUtilities::IsPrimaryNode())
{ {
FDisplayClusterClusterEventJson ClusterEvent; FDisplayClusterClusterEventBinary ClusterEvent;
ClusterEvent.Category = "Dasher"; ClusterEvent.EventId = DasherEventID;
ClusterEvent.Type = "Tick"; ClusterEvent.EventData.Reserve(sizeof(InCurrentTime) + 1);
ClusterEvent.Parameters.Add("Time", FString::SanitizeFloat(InCurrentTime)); ClusterEvent.EventData[0] = static_cast<uint8>(DasherEventType::Tick);
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventJson(ClusterEvent, false); FMemory::Memcpy(&ClusterEvent.EventData[1], &InCurrentTime, sizeof(InCurrentTime));
IDisplayCluster::Get().GetClusterMgr()->EmitClusterEventBinary(ClusterEvent, false);
} }
//This probably doesn't have to be done every tick, but it does not seem to have a huge hit on performance //This probably doesn't have to be done every tick, but it does not seem to have a huge hit on performance
......
...@@ -21,6 +21,14 @@ enum class GeometryType : uint8 ...@@ -21,6 +21,14 @@ enum class GeometryType : uint8
PolyLine = 2 PolyLine = 2
}; };
enum class DasherEventType : uint8
{
Input_MouseDown = 1,
Input_MouseUp = 2,
Input_MouseMove = 3,
Tick
};
struct DasherDrawGeometry struct DasherDrawGeometry
{ {
GeometryType Type; GeometryType Type;
...@@ -124,7 +132,7 @@ public: ...@@ -124,7 +132,7 @@ public:
virtual bool GetScreenCoords(screenint& iX, screenint& iY, Dasher::CDasherView* pView) override; virtual bool GetScreenCoords(screenint& iX, screenint& iY, Dasher::CDasherView* pView) override;
void HandleClusterEvent(const FDisplayClusterClusterEventJson& Event); void HandleClusterEvent(const FDisplayClusterClusterEventBinary& Event);
void InputVector(FVector2D InputVector); void InputVector(FVector2D InputVector);
void InputButton(bool Pressed); void InputButton(bool Pressed);
...@@ -166,7 +174,8 @@ private: ...@@ -166,7 +174,8 @@ private:
TSharedPtr<FSlateFontMeasure> FontMeasureService; TSharedPtr<FSlateFontMeasure> FontMeasureService;
//CAVE Sync //CAVE Sync
FOnClusterEventJsonListener ClusterEventListener; FOnClusterEventBinaryListener ClusterEventListener;
inline static int32 DasherEventID = -424242;
protected: protected:
// stores color information // stores color information
......
Subproject commit f6211ff1ad2e6aaf3a0ecf7ecb58aec610893b52 Subproject commit cc15dde0fd16e08d43578ee861770049d9cf3575
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment