diff --git a/Content/CalPawnInspectionAnimBP.uasset b/Content/CalPawnInspectionAnimBP.uasset index 14d800ee1c1251a595805b8cf53f51e05f23f704..36b81f61ff101cb2e90c87dc2348f4036036807e 100644 --- a/Content/CalPawnInspectionAnimBP.uasset +++ b/Content/CalPawnInspectionAnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfe3f3ed131417a49d75cf3c536bae939e96a00ece120b38efb17324adb9b99b -size 474943 +oid sha256:a7e27800bdb70b16e55eba176228c9d8ab39cdc26170dd2550de7c4d4d02599e +size 506828 diff --git a/Content/CalibrationGameMap.umap b/Content/CalibrationGameMap.umap index 7c9508f94599e4fc3626dae4735f5c83ac43b609..028639ebbac1c30cf8cc19b59d225de265efa12c 100644 --- a/Content/CalibrationGameMap.umap +++ b/Content/CalibrationGameMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:659ef9fd34e13e7d7b3c6e057b7476c2c5317344467b482a1ffdba7d223ad56d -size 435532 +oid sha256:047838abbe441e627a8e0761367e31d50f4db6182cd3855ff52375925e5c47f5 +size 501332 diff --git a/Content/GameCalPawn.uasset b/Content/GameCalPawn.uasset index 9b2bec6bd09402e5779b3e47718fa268b12323ba..f16ba42e0f33d8e15ec27ccc3a9efd7d895cae92 100644 --- a/Content/GameCalPawn.uasset +++ b/Content/GameCalPawn.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed0e521fd18c61d59f45e0dfd599ef17f71ac828d5203cc1e40faa2a29c5ade4 -size 406452 +oid sha256:0793530b27ba6880b6f90fc5d82bed8340d9e36c2dc8a007e9f34fa7351d734a +size 462874 diff --git a/Content/IK_CC3.uasset b/Content/IK_CC3.uasset index 5ec9ca1891687fdc6b30a6c328ac4d12955be9af..7cd2221f970a051e24607427730747350be57727 100644 --- a/Content/IK_CC3.uasset +++ b/Content/IK_CC3.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63202b09a6d0196e575957c6bca974f1637b806da297c94e3721a9083366cb1c -size 3458018 +oid sha256:37f704e3f2812271386c0e452b3b241590acc3d750672c555e8807103923e433 +size 4126155 diff --git a/Content/StartMap.umap b/Content/StartMap.umap index 39612894a34eb760f0ae16df651f9c30dda7f705..8846dfc729ee2d3c45459884130ed2e0cbb6f72f 100644 --- a/Content/StartMap.umap +++ b/Content/StartMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2adcb0a70eab0e6e86fca0525c7231bf6602d495c2311fcc73fcf4ad62e44ba -size 26476 +oid sha256:de61dd2f6d51bbb4d6172c9b9b2ff168cdc79f639ac08d3695aeaf3d8efe4954 +size 27609 diff --git a/Content/TestHuman.uasset b/Content/TestHuman.uasset index af2cbc231c289db64e7f7061865bf16c130629d4..5d25afcabea01ef0abb540eae59b4cdc18d38cda 100644 --- a/Content/TestHuman.uasset +++ b/Content/TestHuman.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63d3c7579c6e4220e4593149a98de4fdda92f5285b31821f5eaf98d4c437ec0e -size 171155 +oid sha256:7645e91f1e4ecb8981b7e2d0febd709e22275f2ea7e5060763c5bdd1f3167ccc +size 176004 diff --git a/Source/AvatarPlugin/Private/AvatarCalibration.cpp b/Source/AvatarPlugin/Private/AvatarCalibration.cpp index 0a929b7b8102511134a96170f200ea5684bfc7a3..a599e9a061837af50baf6d2fd5b6ae4f44683068 100644 --- a/Source/AvatarPlugin/Private/AvatarCalibration.cpp +++ b/Source/AvatarPlugin/Private/AvatarCalibration.cpp @@ -14,7 +14,7 @@ void UAvatarCalibration::OnRightThumbstickClick() if (calibrationMode == CalibrationMode::GAME) { UWorld* World = GetWorld(); - if (World) + if (World && false) { float ArmLength = 0; @@ -34,7 +34,7 @@ void UAvatarCalibration::OnLeftThumbstickClick() if (calibrationMode == CalibrationMode::GAME) { UWorld* World = GetWorld(); - if (World) + if (World && false) { float height; @@ -176,6 +176,7 @@ void UAvatarCalibration::BeginPlay() { if (UseCalibrationGame) { calibrationMode = CalibrationMode::GAME; + } else @@ -216,6 +217,8 @@ void UAvatarCalibration::BeginPlay() { LevelArray.Add(Finish); CurrentLevelIndex = 0; + + } measurements->Init(); @@ -246,7 +249,7 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc } } else { - + APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0); if (playerController != nullptr) { leftTriggerPressed = playerController->IsInputKeyDown(EKeys::OculusTouch_Left_Trigger_Click) @@ -265,6 +268,85 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc //This section controls the level progression and the respective conditions for advancing when the gamified process is selected if(calibrationMode == CalibrationMode::GAME) { + TicksSinceLevelLoad++; + FVector HMDPos = pawn->VRCamera->GetComponentLocation(); + FVector HMDForwardPos = HMDPos + pawn->VRCamera->GetForwardVector() * 30; + FVector HMDRightPos = HMDPos + pawn->VRCamera->GetRightVector() * 30; + FVector HMDDownPos = HMDPos; HMDDownPos.Z = HMDDownPos.Z - 20; //instead of taking the negative up vector, select third point on the Z axis to make plane orthogonal to ground. Otherwise its vertical orientation would change with forward/sideway head tilting + + FVector HMDPos1 = pose.HMDPos; + FVector HMDX1 = HMDPos1 + pawn->VRCamera->GetForwardVector() * 30; + FVector HMDY1 = HMDPos1; + //instead of taking the negative up vector, select third point on the Z axis to make plane orthogonal to ground. Otherwise its orientation would change with forwards head tilting + HMDY1.Z = HMDY1.Z - 20; + FPlane FrontBackPlane1 = FPlane(HMDPos1, HMDX1, HMDY1); + //create two plane which intersect the placer from front to back and left to right respectively + FPlane FrontBackPlane = FPlane(HMDPos, HMDForwardPos, HMDDownPos); + FPlane ShoulderPlane = FPlane(HMDPos, HMDRightPos, HMDDownPos); + + + float PointPlaneDistanceLeft1 = FVector::PointPlaneDist(pawn->MC_LeftHand->GetComponentLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()); + float PointPlaneDistanceRight1 = FVector::PointPlaneDist(pawn->MC_RightHand->GetComponentLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()); + FString Distances = "Left " + FString::SanitizeFloat(PointPlaneDistanceLeft1) + "\n Right: " + FString::SanitizeFloat(PointPlaneDistanceRight1); + TextWall->GetTextRender()->SetText(FText::FromString(Distances)); + + + + if(!wereControllersChecked && TicksSinceLevelLoad >= 10) + { + UE_LOG(LogTemp, Warning, TEXT("Were Controllers Checked")); + // Check if the controllers are swapped or not by getting the distance of the controllers to the frontback plane + float DistLeftHand = FVector::PointPlaneDist(pawn->MC_LeftHand->GetComponentLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()); + float DistRightHand = FVector::PointPlaneDist(pawn->MC_RightHand->GetComponentLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()); + if (DistLeftHand > 0 && DistRightHand < 0) + { + UE_LOG(LogTemp, Warning, TEXT("Calling Switch Hand Tracking Sources")); + pawn->SwitchHandTrackingSources(); //change the actual tracking sources + pawn->SwapVisibleHands(); //change the visual hand representation + handsSwitched = true; + } + + //same for the foot tracking sources if present + if (useFootControllers) + { + if (FVector::PointPlaneDist(pawn->MC_LeftFoot->GetComponentLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()) > 0 && + FVector::PointPlaneDist(pawn->MC_RightFoot->GetComponentLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()) < 0) + { + pawn->SwitchFootTrackingSources(); + feetSwitched = true; + } + + } + wereControllersChecked = true; + } + + + + //Debug Corner + if (MsgDelay >= 60) + { + //UE_LOG(LogTemp, Warning, TEXT("UpdateCalibration()")); + UWorld* World = GetWorld(); + //DrawDebugSphere(World, pose.HipControllerPos, 5, 30, FColor::Blue, false, 1); + DrawDebugSphere(World, pose.LeftShoulderPos, 6, 30, FColor::Green, false, 1); + DrawDebugSphere(World, pose.RightShoulderPos, 6, 30, FColor::Red, false, 1); + DrawDebugSphere(World, pose.LeftHandPos, 6, 30, FColor::Green, false, 1); + DrawDebugSphere(World, pose.RightHandPos, 6, 30, FColor::Red, false, 1); + //DrawDebugSphere(World, pose.LeftFootPos, 5, 30, FColor::Green, false, 1); + //DrawDebugSphere(World, pose.RightFootPos, 5, 30, FColor::Red, false, 1); + //FVector HipUpPos = pose.HipControllerRot.Quaternion().GetUpVector() * 1; + //DrawDebugDirectionalArrow(World, pose.HipControllerPos, HipUpPos, 6, FColor::Magenta, false, 1); + + //create plane which intersects the player front to back + + + + //DrawDebugSolidPlane(World, FrontBackPlane, HMDPos, 100, FColor::Magenta, false, 2); + //DrawDebugSolidPlane(World, ShoulderPlane, HMDPos, 100, FColor::Emerald, false, 2); + + } + + //TODO fix rumbling //Progress/Rumbling functionality in the game state. Activates if the current stage requires input if (LevelArray[CurrentLevelIndex].inputRequired) { @@ -293,7 +375,7 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc pawn->SetActorLocation(WelcomePosition->GetActorLocation() + WelcomePosition->GetActorUpVector() * 55); LevelArray[0].isStarted = true; - } + } AActor* AttachedActorLeft = LeftShoulderSphere->GetAttachParentActor(); AActor* AttachedActorRight = RightShoulderSphere->GetAttachParentActor(); @@ -315,20 +397,7 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc LeftShoulderSphere->SetActorLocation(LeftShoulderLocation); RightShoulderSphere->SetActorLocation(RightShoulderLocation); - - - - //TODO create plane that intersects the center of the player from left to right. Snap shoulders to that plane - - //PLANE - FVector HMDPos = pose.HMDPos; - FVector HMDX = HMDPos + pawn->VRCamera->GetRightVector() * 30; - FVector HMDY = HMDPos; - //instead of taking the negative up vector, select third point on the Z axis to make plane orthogonal to ground. Otherwise its orientation would change with forwards head tilting - HMDY.Z = HMDY.Z - 20; - - FPlane ShoulderPlane = FPlane(HMDPos, HMDX, HMDY); - + //create plane that intersects the center of the player from left to right. Snap shoulders to that plane //calculate the shoulder spheres distance to the plane float DistanceLeftShoulderToPlane = FVector::PointPlaneDist(LeftShoulderSphere->GetActorLocation(), ShoulderPlane.GetOrigin(), ShoulderPlane.GetNormal()); float DistanceRightShoulderToPlane = FVector::PointPlaneDist(RightShoulderSphere->GetActorLocation(), ShoulderPlane.GetOrigin(), ShoulderPlane.GetNormal()); @@ -336,10 +405,7 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc //Set Sphere Locations to have their centers in the plane. Ensures that the shoulder spheres have the same "depth" FVector LeftCorrected = LeftShoulderSphere->GetActorLocation() - (DistanceLeftShoulderToPlane * ShoulderPlane.GetNormal()); FVector RightCorrected = RightShoulderSphere->GetActorLocation() - (DistanceRightShoulderToPlane * ShoulderPlane.GetNormal()); - - - - + LeftShoulderSphere->SetActorLocation(LeftCorrected); RightShoulderSphere->SetActorLocation(RightCorrected); @@ -360,17 +426,31 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc LeftCorrected = LeftCorrected - (pawn->VRCamera->GetRightVector() * MeanShoulderDistance); RightCorrected = RightCorrected + (pawn->VRCamera->GetRightVector() * MeanShoulderDistance); //apply offset to move shoulders a little back - float ShoulderOffset = 20; + float ShoulderOffset = 5; LeftCorrected = LeftCorrected + ShoulderPlane.GetNormal() * ShoulderOffset; RightCorrected = RightCorrected + ShoulderPlane.GetNormal() * ShoulderOffset; LeftShoulderSphere->SetActorLocation(LeftCorrected); RightShoulderSphere->SetActorLocation(RightCorrected); + + //check whether the spheres have been attached mirrored (left sphere to right shoulder) + + + + //If the distance between the Left shoudler sphere and the plane is negative, the spheres are places mirrored and need their location swapped + if (FVector::PointPlaneDist(LeftShoulderSphere->GetActorLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()) > 0 || + FVector::PointPlaneDist(RightShoulderSphere->GetActorLocation(), FrontBackPlane.GetOrigin(), FrontBackPlane.GetNormal()) < 0) + { + + //first swap the physical locations of the spheres + FVector OldLeftPos = LeftShoulderSphere->GetActorLocation(); + LeftShoulderSphere->SetActorLocation(RightShoulderSphere->GetActorLocation()); + RightShoulderSphere->SetActorLocation(OldLeftPos); + + } ShouldersAdjusted = true; LevelArray[0].inputRequired = true; //unlocks progression through trigger presses } - - //proceed when both shoulders are attached and if (TicksWithBothTriggersPressed >=30) { @@ -378,10 +458,8 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc LevelArray[0].isFinished = true; LevelArray[0].inputRequired = false; CurrentLevelIndex = 1; - //Setting Mirror Parameters - MirrorMoveDistance = 230; - + MirrorMoveDistance = 230; } } else @@ -531,12 +609,14 @@ void UAvatarCalibration::TickComponent(float DeltaTime, ELevelTick TickType, FAc } void UAvatarCalibration::UpdateCalibration() { - if (MsgDelay >= 60) - { - //UE_LOG(LogTemp, Warning, TEXT("UpdateCalibration()")); - UWorld* World = GetWorld(); - //DrawDebugSphere(World, pose.HipControllerPos, 5, 30, FColor::Blue, false, 1); - } + //if (MsgDelay >= 60) + //{ + // //UE_LOG(LogTemp, Warning, TEXT("UpdateCalibration()")); + // UWorld* World = GetWorld(); + // DrawDebugSphere(World, pose.HipControllerPos, 5, 30, FColor::Blue, false, 1); + // DrawDebugSphere(World, pose.LeftShoulderPos, 5, 5, FColor::Green, false, 1); + // DrawDebugSphere(World, pose.RightShoulderPos, 5, 5, FColor::Red, false, 1); + //} if (calibrationMode == CalibrationMode::GAME) { @@ -567,6 +647,7 @@ void UAvatarCalibration::UpdateCalibration() { UWorld* World = GetWorld(); //DrawDebugSphere(World, pose.LeftFootPos, 5, 5, FColor::Green, false, 1); //DrawDebugSphere(World, pose.RightFootPos, 5, 5, FColor::Red, false, 1); + } } @@ -577,7 +658,8 @@ void UAvatarCalibration::UpdateCalibration() { float Height = FMath::Abs(pose.HMDPos.Z - pawn->GetVROriginWorldLocation().Z); FString HeightText = FString::SanitizeFloat(Height); - TextWall->GetTextRender()->SetText(FText::FromString(HeightText)); + //TextWall->GetTextRender()->SetText(FText::FromString(HeightText)); + } //UPPER BODY STAGE (Index = 1) if (CurrentLevelIndex == 1) @@ -965,10 +1047,6 @@ void UAvatarCalibration::GoToNextStage() } } -void UAvatarCalibration::FinishCurrentLevel() -{ - LevelArray[CurrentLevelIndex].isFinished = true; -} float UAvatarCalibration::GetConfirmTimePercentage() { return (pawn->GetGameTimeSinceCreation() - triggerPressStartTime) / confirmTime; @@ -1044,7 +1122,9 @@ void UAvatarCalibration::OnLevelLoaded() { for (AActor* actor : streamingLevel->GetLoadedLevel()->Actors) { if (actor->GetName().Contains("CalPawn", ESearchCase::CaseSensitive)) { + pawn = Cast<ACalibrationPawn>(actor); + } else if (actor->GetName().Contains("HenryCapture", ESearchCase::CaseSensitive)) { @@ -1116,6 +1196,9 @@ void UAvatarCalibration::OnLevelLoaded() { } LeftShoulderStartPos = LeftShoulderSphere->GetActorLocation(); RightShoulderStartPos = RightShoulderSphere->GetActorLocation(); + + + } @@ -1143,7 +1226,7 @@ void UAvatarCalibration::OnLevelLoaded() { //sets the AvatarCalibrationComponent of the newly posessed pawn to this in order to collect all necessary data which can later be passed onto future pawns pawn->SetCalibrationComponent(this); //Subscribe to changes made in the game level - pawn->LevelStateChanged.BindUObject(this, &UAvatarCalibration::FinishCurrentLevel); + //pawn->LevelStateChanged.BindUObject(this, &UAvatarCalibration::FinishCurrentLevel); if (helperPawn != nullptr) { if (calibrationMode == CalibrationMode::AVATARGUIDE) { @@ -1171,12 +1254,17 @@ void UAvatarCalibration::OnLevelLoaded() { leftFootSphere->SetActorHiddenInGame(true); rightFootSphere->SetActorHiddenInGame(true); } + + } void UAvatarCalibration::StartInspection() { isInspecting = true; if(calibrationMode == CalibrationMode::GAME) { + if (pawn->isCalibrationFinished == false) { + pawn->isCalibrationFinished = true; + } //teleport pawn to finish location //pawn->SetActorLocation(FinishPosition->GetActorLocation() + FinishPosition->GetActorUpVector() * 50); //remove artifacts of the calibration process diff --git a/Source/AvatarPlugin/Private/CalibrationPawn.cpp b/Source/AvatarPlugin/Private/CalibrationPawn.cpp index 4ba2413180fd391132c9871738787117eb1ce56e..83241db51c899b34b32856d58a8a3ad4f3f4ade2 100644 --- a/Source/AvatarPlugin/Private/CalibrationPawn.cpp +++ b/Source/AvatarPlugin/Private/CalibrationPawn.cpp @@ -276,12 +276,7 @@ void ACalibrationPawn::RumbleController(EControllerHand which, bool stop) { else { pc->PlayHapticEffect(rumbleCurve, which, 1.0f, true); } - } -void ACalibrationPawn::LevelFinished() -{ - UE_LOG(LogTemp, Warning, TEXT("Calling LevelFinished")); - LevelStateChanged.ExecuteIfBound(); -} + diff --git a/Source/AvatarPlugin/Private/Measurements.cpp b/Source/AvatarPlugin/Private/Measurements.cpp index 9c8b4f23fe3ebf30a63268b15e6ea8a028ac4adb..96b77ebb316215a8e6cf582576aba89af811aa61 100644 --- a/Source/AvatarPlugin/Private/Measurements.cpp +++ b/Source/AvatarPlugin/Private/Measurements.cpp @@ -34,7 +34,7 @@ void UMeasurements::TakeGameMeasures(int StageIndex, const FVRPose& pose, float calcedAppliedLengths = false; FMeasurement HipMeasure; FMeasurement KneeMeasure; - + FMeasurement HeightMeasure; if (StageIndex == 1) { @@ -60,12 +60,7 @@ void UMeasurements::TakeGameMeasures(int StageIndex, const FVRPose& pose, float { Measure.measuredLength = FVector::Distance(pose.RightShoulderPos, pose.LeftShoulderPos); } - if (Measure.enumName == MeasurementName::HEIGHT) - { - //TODO Check influence of LeftFootPos - float HeightOffset = 0; - Measure.measuredLength = FMath::Abs(pose.HMDPos.Z - pose.LeftFootPos.Z) + HeightOffset; - } + } } @@ -74,24 +69,24 @@ void UMeasurements::TakeGameMeasures(int StageIndex, const FVRPose& pose, float float FloorHeight = Value; if (useHipController) { - + UE_LOG(LogTemp, Warning, TEXT("3: Measuring Hip without controller")); //hip height HipMeasure.measuredAdditionalHeight = FMath::Abs(FloorHeight - pose.HipControllerPos.Z); //Hip width TODO try to find fitting hip width without additional measuring steps - HipMeasure.measuredLength = 25.f; + HipMeasure.measuredLength = 26.f; + + KneeMeasure.measuredLength = (pose.HipControllerPos - pose.LeftFootPos).Size() * 0.5; - KneeMeasure.measuredAdditionalHeight = (pose.HipControllerPos - pose.LeftFootPos).Size() * 0.5; } if (!useHipController) { - UE_LOG(LogTemp, Warning, TEXT("3: Measuring Hip without controller")); + UE_LOG(LogTemp, Warning, TEXT("3: Measuring Hip without controller NEW")); UE_LOG(LogTemp, Warning, TEXT(" FloorHeight = %f"), FloorHeight); //get distance from hand controller to floor float DistanceToFloor = FMath::Abs(FloorHeight - pose.RightHandPos.Z); - UE_LOG(LogTemp, Warning, TEXT(" DistanceToFloor = %f"), DistanceToFloor) - ; + UE_LOG(LogTemp, Warning, TEXT(" DistanceToFloor = %f"), DistanceToFloor); HipMeasure.measuredLength = (pose.RightHandPos - pose.LeftHandPos).Size(); UE_LOG(LogTemp, Warning, TEXT(" HipMeasure.measuredLength = %f"), HipMeasure.measuredLength); @@ -102,6 +97,8 @@ void UMeasurements::TakeGameMeasures(int StageIndex, const FVRPose& pose, float UE_LOG(LogTemp, Warning, TEXT("KneeMeasure.measuredAdditionalHeight = %f"), KneeMeasure.measuredLength); } + float DistanceHMDFloor = FMath::Abs(FloorHeight - pose.HMDPos.Z); + HeightMeasure.measuredLength = DistanceHMDFloor; for (auto& Measure : measurements) { @@ -114,6 +111,11 @@ void UMeasurements::TakeGameMeasures(int StageIndex, const FVRPose& pose, float if (Measure.enumName == MeasurementName::KNEE) { Measure.measuredLength = KneeMeasure.measuredLength; + + } + if (Measure.enumName == MeasurementName::HEIGHT) + { + Measure.measuredLength = HeightMeasure.measuredLength; } } } @@ -304,8 +306,6 @@ void UMeasurements::CalcAppliedLengths(AVirtualHuman* virtualHuman) { hip_height = measurement.measuredAdditionalHeight; UE_LOG(LogTemp, Warning, TEXT("hip_width = %f"), hip_width); UE_LOG(LogTemp, Warning, TEXT("hip_height = %f"), hip_height); - - break; case MeasurementName::KNEE: knee_height = measurement.measuredLength; diff --git a/Source/AvatarPlugin/Public/AvatarCalibration.h b/Source/AvatarPlugin/Public/AvatarCalibration.h index cb7ef8e75f5c256fc5d4d7196b5aad4d648da9a1..d603daa555ca848040ced160f9b4d093a2da1828 100644 --- a/Source/AvatarPlugin/Public/AvatarCalibration.h +++ b/Source/AvatarPlugin/Public/AvatarCalibration.h @@ -176,6 +176,8 @@ private: UPROPERTY() AActor* FinishPosition = nullptr; UPROPERTY() ATextRenderActor* TextWall = nullptr; UPROPERTY() AStaticMeshActor* Mirror = nullptr; + UPROPERTY() UStaticMeshComponent* HMDVisual = nullptr; + UPROPERTY() AActor* LeftShoulderSphere = nullptr; UPROPERTY() AActor* RightShoulderSphere = nullptr; @@ -187,6 +189,11 @@ private: UPROPERTY() int CurrentLevelIndex = 0; UPROPERTY() bool isCurrentLevelFinished = true; + //parameters for controller switch check + UPROPERTY() bool wereControllersChecked = false; //check flag for the first tick after level load + UPROPERTY() int TicksSinceLevelLoad = 0; + + UPROPERTY() int MinTriggerPressTicks = 100; UPROPERTY() int CurrentTriggerPressTicks = 0; @@ -247,9 +254,6 @@ public: UFUNCTION(BlueprintCallable) void GoToNextStage(); - UFUNCTION(BlueprintCallable) - void FinishCurrentLevel(); - diff --git a/Source/AvatarPlugin/Public/CalibrationPawn.h b/Source/AvatarPlugin/Public/CalibrationPawn.h index 9625d63de1c0d7e3b7a651c14180aa768948a096..dfe20e2a8130c0278965a7a119ad2193d397bb52 100644 --- a/Source/AvatarPlugin/Public/CalibrationPawn.h +++ b/Source/AvatarPlugin/Public/CalibrationPawn.h @@ -82,19 +82,16 @@ public: void RumbleController(EControllerHand which, bool stop); - //additions for the gamified calibration process - UFUNCTION(BlueprintCallable) - void LevelFinished(); - void FinishCalibration(); + + UPROPERTY(BlueprintReadWrite) bool isCalibrationFinished = false; + //Delegate informing about level progress DECLARE_DELEGATE(FLevelFinished); FLevelFinished LevelStateChanged; - DECLARE_DELEGATE(FCalibrationFinished); - FCalibrationFinished CalibrationFinished; - - - + //picked up in the GameCalPawn blueprint. Does not need an implementation + UFUNCTION(BlueprintImplementableEvent) void SwapVisibleHands(); + };