Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Source/URLab/Private/Bridge/MsgpackHelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,8 @@ void PackJsonObjectInner(clmdep_msgpack::packer<Stream>& Packer,
Packer.pack_map(Obj->Values.Num());
for (const auto& Kv : Obj->Values)
{
const FString& Key = Kv.Key;
// UE 5.8 keys FJsonObject::Values by TSharedString; *Key works on 5.7 and 5.8.
const FString Key(*Kv.Key);
// Keys with kBinSuffix emit real msgpack bin (the suffix is stripped from
// the wire field name). The value is either our raw-binary carrier
// (EJson::Null, bytes packed directly) or a legacy base64 string (from a
Expand Down
8 changes: 4 additions & 4 deletions Source/URLab/Private/Bridge/RpcHandlers_Camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetCameraStreaming(
// { "zmq": b, "shm": b } -> per-transport; an omitted sub-field is off
// UNLESS both are omitted, which means "both on"
TMap<FString, TPair<bool, bool>> Requests; // key -> {zmq, shm}
for (const TPair<FString, TSharedPtr<FJsonValue>>& Kv : (*CamObj)->Values)
for (const auto& Kv : (*CamObj)->Values)
{
if (!Kv.Value.IsValid())
continue;
Expand All @@ -330,7 +330,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetCameraStreaming(
}
// else leave both true (default = enable both)
}
Requests.Add(Kv.Key, TPair<bool, bool>(bZmq, bShm));
Requests.Add(FString(*Kv.Key), TPair<bool, bool>(bZmq, bShm));
}

if (Requests.Num() == 0)
Expand Down Expand Up @@ -397,7 +397,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetCameraDelay(
// Parse per-camera requests. A bare number means delay_s with defaults; an
// object carries delay_s / jitter_s / clock / seed / on_state_change / max_fps.
TMap<FString, FCameraDelayReq> Requests;
for (const TPair<FString, TSharedPtr<FJsonValue>>& Kv : (*CamObj)->Values)
for (const auto& Kv : (*CamObj)->Values)
{
if (!Kv.Value.IsValid())
continue;
Expand Down Expand Up @@ -435,7 +435,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetCameraDelay(
R.bSetCapture = true;
}
}
Requests.Add(Kv.Key, R);
Requests.Add(FString(*Kv.Key), R);
}

if (Requests.Num() == 0)
Expand Down
6 changes: 3 additions & 3 deletions Source/URLab/Private/Bridge/RpcHandlers_Control.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetUserChannels(const TShared
const FString& RejectPrefix) {
if (!Channels.IsValid())
return;
for (const TPair<FString, TSharedPtr<FJsonValue>>& Pair : Channels->Values)
for (const auto& Pair : Channels->Values)
Comment thread
finger563 marked this conversation as resolved.
{
const FName Channel(*Pair.Key);
FMjUserChannel Value;
Expand All @@ -225,11 +225,11 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetUserChannels(const TShared
const TSharedPtr<FJsonObject>* ArtsObj = nullptr;
if (Req->TryGetObjectField(TEXT("arts"), ArtsObj))
{
for (const TPair<FString, TSharedPtr<FJsonValue>>& ArtPair : (*ArtsObj)->Values)
for (const auto& ArtPair : (*ArtsObj)->Values)
{
const TSharedPtr<FJsonObject>* ArtChannels = nullptr;
if (ArtPair.Value.IsValid() && ArtPair.Value->TryGetObject(ArtChannels))
ApplyScope(*ArtChannels, FName(*ArtPair.Key), ArtPair.Key + TEXT("/"));
ApplyScope(*ArtChannels, FName(*ArtPair.Key), FString(*ArtPair.Key) + TEXT("/"));
}
}

Expand Down
28 changes: 13 additions & 15 deletions Source/URLab/Private/Bridge/RpcHandlers_Step.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -168,14 +168,14 @@ static void ParseStepPerArticulation(const TSharedPtr<FJsonObject>& Req,
FString CtlMode;
if ((*ArtObj)->TryGetStringField(TEXT("control_mode"), CtlMode))
{
Out.PerArticulationControlMode.Add(Pair.Key, CtlMode);
Out.PerArticulationControlMode.Add(FString(*Pair.Key), CtlMode);
}

// Positional ctrl array: indexed in articulation actuator order.
const TArray<TSharedPtr<FJsonValue>>* CtrlList = nullptr;
if ((*ArtObj)->TryGetArrayField(TEXT("ctrl"), CtrlList) && CtrlList)
{
if (AMjArticulation* Art = Cast<AMjArticulation>(Mgr->GetArticulation(Pair.Key)))
if (AMjArticulation* Art = Cast<AMjArticulation>(Mgr->GetArticulation(FString(*Pair.Key))))
{
const TArray<UMjNodeComponent*> Acts = Art->GetActuators();
const FString Prefix = Art->GetCompiledPrefix();
Expand All @@ -187,8 +187,7 @@ static void ParseStepPerArticulation(const TSharedPtr<FJsonObject>& Req,
FString LocalName = A->MjName.Get(A->GetName());
if (LocalName.StartsWith(Prefix))
LocalName = LocalName.Mid(Prefix.Len());
Out.PerArticulationCtrl.FindOrAdd(Pair.Key).Add(
{LocalName, (*CtrlList)[i]->AsNumber()});
Out.PerArticulationCtrl.FindOrAdd(FString(*Pair.Key)).Add({LocalName, (*CtrlList)[i]->AsNumber()});
}
}
}
Expand All @@ -199,22 +198,21 @@ static void ParseStepPerArticulation(const TSharedPtr<FJsonObject>& Req,
{
for (auto& KV : (*CtrlMap)->Values)
{
Out.PerArticulationCtrl.FindOrAdd(Pair.Key).Add(
{KV.Key, (float)KV.Value->AsNumber()});
Out.PerArticulationCtrl.FindOrAdd(FString(*Pair.Key)).Add({FString(*KV.Key), (float)KV.Value->AsNumber()});
}
}

// xfrc_applied: { body_name: [fx,fy,fz,tx,ty,tz] }. Cleared after step.
const TSharedPtr<FJsonObject>* XfrcMap = nullptr;
if ((*ArtObj)->TryGetObjectField(TEXT("xfrc_applied"), XfrcMap) && XfrcMap && XfrcMap->IsValid())
{
TMap<FString, TArray<double>>& BodyMap = Out.PerArticulationXfrc.FindOrAdd(Pair.Key);
TMap<FString, TArray<double>>& BodyMap = Out.PerArticulationXfrc.FindOrAdd(FString(*Pair.Key));
for (auto& KV : (*XfrcMap)->Values)
{
const TArray<TSharedPtr<FJsonValue>>* Arr = nullptr;
if (KV.Value->TryGetArray(Arr) && Arr && Arr->Num() == 6)
{
TArray<double>& Six = BodyMap.FindOrAdd(KV.Key);
TArray<double>& Six = BodyMap.FindOrAdd(FString(*KV.Key));
Six.SetNum(6);
for (int i = 0; i < 6; ++i)
Six[i] = (*Arr)[i]->AsNumber();
Expand Down Expand Up @@ -265,20 +263,20 @@ void FURLabRpcDispatcher::ParseStepCommon(const TSharedPtr<FJsonObject>& Req,
ECameraInclude E = Mode.Equals(TEXT("sync"), ESearchCase::IgnoreCase)
? ECameraInclude::Sync
: ECameraInclude::Latest;
Out.CameraSpec.Add(Kv.Key, E);
Out.CameraSpec.Add(FString(*Kv.Key), E);
}
else if (Kv.Value->TryGetNumber(Num))
{
Out.CameraSpec.Add(Kv.Key, ECameraInclude::Latest);
Out.CameraSpec.Add(FString(*Kv.Key), ECameraInclude::Latest);
if (Num > 0.0)
Out.CameraMinFrameIds.Add(Kv.Key, static_cast<uint64>(Num));
Out.CameraMinFrameIds.Add(FString(*Kv.Key), static_cast<uint64>(Num));
}
else if (Kv.Value->TryGetObject(Obj) && Obj && Obj->IsValid())
{
Out.CameraSpec.Add(Kv.Key, ECameraInclude::Latest);
Out.CameraSpec.Add(FString(*Kv.Key), ECameraInclude::Latest);
double Fid = 0.0;
if ((*Obj)->TryGetNumberField(TEXT("frame_id"), Fid) && Fid > 0.0)
Out.CameraMinFrameIds.Add(Kv.Key, static_cast<uint64>(Fid));
Out.CameraMinFrameIds.Add(FString(*Kv.Key), static_cast<uint64>(Fid));
}
}
}
Expand Down Expand Up @@ -363,7 +361,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleStep(const TSharedPtr<FJsonOb
if (!bCarriesControl)
continue;

const AMjArticulation* Art = Mgr->GetArticulation(Pair.Key);
const AMjArticulation* Art = Mgr->GetArticulation(FString(*Pair.Key));
const FName Key(Art ? *Art->GetName() : *Pair.Key);
FString CurrentOwner;
if (ControlOwnership.CheckWrite(Key, Source, CurrentOwner)
Expand Down Expand Up @@ -555,7 +553,7 @@ TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleReset(const TSharedPtr<FJsonO
{
for (auto& APair : (*PerArt)->Values)
{
AMjArticulation* Art = Mgr->GetArticulation(APair.Key);
AMjArticulation* Art = Mgr->GetArticulation(FString(*APair.Key));
Comment thread
finger563 marked this conversation as resolved.
if (!Art)
continue;
const TSharedPtr<FJsonObject>* QObj = nullptr;
Expand Down
2 changes: 0 additions & 2 deletions Source/URLab/Private/Cinematics/MjOrbitCameraActor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,6 @@ void AMjOrbitCameraActor::SetTarget(AMjArticulation* NewTarget)
UMjBody* FirstNonDefault = nullptr;
for (UMjBody* B : Bodies)
{
if (false)
continue;
if (!FirstNonDefault)
FirstNonDefault = B;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -507,14 +507,14 @@ void UMjQuickConvertComponent::AuthorSceneSpec()
// The visual hull is the undecomposed mesh with contact switched
// off: it exists so the viewer sees the shape the artist made
// rather than the decomposition that collides.
for (const FMjConvertedHull& Hull : ExportHulls(*Smc, Owner->GetName(), false, CoACDThreshold))
const TArray<FMjConvertedHull> VisualHulls = ExportHulls(*Smc, Owner->GetName(), false, CoACDThreshold);
if (VisualHulls.Num() > 0)
{
UMjGeomBase& Visual =
AddGeom(FString::Printf(TEXT("Geom_%d_visual"), MeshIndex), AddMeshAsset(Hull));
AddGeom(FString::Printf(TEXT("Geom_%d_visual"), MeshIndex), AddMeshAsset(VisualHulls[0]));
Visual.Contype = 0;
Visual.Conaffinity = 0;
Visual.Group = 2;
break;
}

int32 HullIndex = 0;
Expand Down
3 changes: 1 addition & 2 deletions Source/URLabEditor/Private/MjEditorOpHandlers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -300,10 +300,9 @@ TSharedPtr<FJsonObject> HandleEnsureManager(const TSharedPtr<FJsonObject>& /*Req
return MakeJsonError(TEXT("no_world"), TEXT("editor world unavailable"));

AAMjManager* Existing = nullptr;
for (TActorIterator<AAMjManager> It(World); It; ++It)
if (TActorIterator<AAMjManager> It(World); It)
{
Existing = *It;
break;
}
const bool bWasExisting = (Existing != nullptr);

Expand Down
5 changes: 2 additions & 3 deletions Source/URLabEditor/Private/Tests/MjStateCollectorTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -393,10 +393,9 @@ bool FMjStateSensorRawParity::RunTest(const FString& Parameters)
const TArray<double>* IRValues = nullptr;
for (const FMjArticulationState& AS : Snap.Articulations)
{
for (const FMjSensorState& Sen : AS.Sensors)
if (AS.Sensors.Num() > 0)
{
IRValues = &Sen.Values;
break;
IRValues = &AS.Sensors[0].Values;
}
if (IRValues)
break;
Expand Down