rework done

TODO: clean
This commit is contained in:
Lucas Peter 2024-09-26 13:10:47 +02:00
parent 6ffaeb801a
commit 117da9d24a
No known key found for this signature in database
3 changed files with 50 additions and 45 deletions

View file

@ -214,47 +214,52 @@ EPortalCommand GetPortalCommandFromChar(unsigned char Char)
FPortalStatusData ParsePortalStatus(const uint8* StatusResponse) FPortalStatusData ParsePortalStatus(const uint8* StatusResponse)
{ {
FPortalStatusData result; FPortalStatusData result;
result.Counter = StatusResponse[5]; result.Counter = StatusResponse[5];
result.bIsReady = (StatusResponse[6] == 0x01); result.bIsReady = (StatusResponse[6] == 0x01);
// Parse the figure status array (little-endian 32-bit integer) // Parse the figure status array (little-endian 32-bit integer)
uint32 FigureStatusArray = 0; uint32 FigureStatusArray = 0;
// Reading the 32-bit integer (character status array) from the buffer // Reading the 32-bit integer (character status array) from the buffer
FigureStatusArray |= StatusResponse[1]; // 1st byte FigureStatusArray |= StatusResponse[1]; // 1st byte
FigureStatusArray |= (StatusResponse[2] << 8); // 2nd byte FigureStatusArray |= (StatusResponse[2] << 8); // 2nd byte
FigureStatusArray |= (StatusResponse[3] << 16); // 3rd byte FigureStatusArray |= (StatusResponse[3] << 16); // 3rd byte
FigureStatusArray |= (StatusResponse[4] << 24); // 4th byte FigureStatusArray |= (StatusResponse[4] << 24); // 4th byte
bool bChangeBitsSet = false; bool bChangeBitsSet = false;
TStaticArray<EFigureStatus, 16> tempArray; TStaticArray<EFigureStatus, 16> tempArray;
// For each of the 16 entries, extract the 2-bit status and map it to EFigureStatus // For each of the 16 entries, extract the 2-bit status and map it to EFigureStatus
for (int32 i = 0; i < 16; ++i) for (int32 i = 0; i < 16; ++i)
{
uint8 StatusBits = (FigureStatusArray >> (i * 2)) & 0b11; // Extract 2 bits
EFigureStatus FigureStatus;
switch (StatusBits)
{ {
uint8 StatusBits = (FigureStatusArray >> (i * 2)) & 0b11; // Extract 2 bits case 0b00:
EFigureStatus FigureStatus; FigureStatus = EFigureStatus::NOT_PRESENT;
break;
switch (StatusBits) case 0b01:
{ FigureStatus = EFigureStatus::PRESENT;
case 0b00: break;
FigureStatus = EFigureStatus::NOT_PRESENT; case 0b11:
case 0b01: FigureStatus = EFigureStatus::ADDED; // When it's a new NUID detected
FigureStatus = EFigureStatus::PRESENT; break;
case 0b11: case 0b10:
FigureStatus = EFigureStatus::ADDED; FigureStatus = EFigureStatus::REMOVED; // New NUID removed
case 0b10: break;
FigureStatus = EFigureStatus::REMOVED; default:
default: FigureStatus = EFigureStatus::NOT_PRESENT; // Default case
FigureStatus = EFigureStatus::NOT_PRESENT; // Default case break;
}
// Add to the array of figure statuses
//PortalStatusData.StatusArray.Insert(FigureStatus, i);
tempArray[i] = FigureStatus;
} }
result.StatusArray.SetNum(0);
result.StatusArray.Append(tempArray);
return result; // Add to the array of figure statuses
//PortalStatusData.StatusArray.Insert(FigureStatus, i);
tempArray[i] = FigureStatus;
} }
result.StatusArray.SetNum(0);
result.StatusArray.Append(tempArray);
return result;
}

View file

@ -56,10 +56,11 @@ void FPortalStatusChecker::CheckPortalStatus()
{ {
case S: case S:
CurrentStatusData = ParsePortalStatus(output); CurrentStatusData = ParsePortalStatus(output);
UE_LOG(LogSkyportalIO, Verbose, TEXT("Output Data: %s"), *BytesToHex(output, sizeof(output)));
//Send delegate when new informations are received //Send delegate when new informations are received
if (OldStatusData != CurrentStatusData) { if (OldStatusData != CurrentStatusData) {
for (int i = 0; i < CurrentStatusData.StatusArray.Num(); i++) { for (int i = 0; i < CurrentStatusData.StatusArray.Num(); i++) {
if (CurrentStatusData.StatusArray[i] != OldStatusData.StatusArray[i]) { if (CurrentStatusData.StatusArray[i] != OldStatusData.StatusArray[i]) {
@ -79,18 +80,17 @@ void FPortalStatusChecker::CheckPortalStatus()
case EFigureStatus::ADDED: case EFigureStatus::ADDED:
//FigureData = ReadFigureBlocks(i); //FigureData = ReadFigureBlocks(i);
//subref->OnSkylanderAdded.Broadcast(GetFigureID(FigureData), i); //subref->OnSkylanderAdded.Broadcast(GetFigureID(FigureData), i);
break;
case EFigureStatus::REMOVED: case EFigureStatus::REMOVED:
subref->OnSkylanderRemoved.Broadcast(00, i); subref->OnSkylanderRemoved.Broadcast(00, i);
break;
} }
} }
} }
}
OldStatusData = CurrentStatusData; OldStatusData = CurrentStatusData;
subref->StatusData = CurrentStatusData; subref->StatusData = CurrentStatusData;
} }
}
break; break;
default: default:
return; return;

View file

@ -13,7 +13,7 @@ void USkyPortalSubsystem::Initialize(FSubsystemCollectionBase& Collection)
Super::Initialize(Collection); Super::Initialize(Collection);
// Start the status checker thread // Start the status checker thread
StatusChecker = new FPortalStatusChecker(this, 0.1f); // Check every 50 milliseconds StatusChecker = new FPortalStatusChecker(this, 0.01f); // Check every 10 milliseconds
StatusCheckerThread = FRunnableThread::Create(StatusChecker, TEXT("PortalStatusCheckerThread"), 0, TPri_AboveNormal); StatusCheckerThread = FRunnableThread::Create(StatusChecker, TEXT("PortalStatusCheckerThread"), 0, TPri_AboveNormal);
UE_LOG(LogTemp, Log, TEXT("SkyPortalSubsystem Initialized")); UE_LOG(LogTemp, Log, TEXT("SkyPortalSubsystem Initialized"));
@ -92,7 +92,7 @@ FPortalStatusData USkyPortalSubsystem::PortalStatus() {
output = PortalHandle->Read(); output = PortalHandle->Read();
} while (output[0] != 'S'); } while (output[0] != 'S');
return ParsePortalStatus(output); return ParsePortalStatus(output);
} }
@ -266,7 +266,7 @@ bool USkyPortalSubsystem::IsPortalReady()
SKYPORTAL_API void USkyPortalSubsystem::PortalMusic(const USoundWave* Sound) SKYPORTAL_API void USkyPortalSubsystem::PortalMusic(const USoundWave* Sound)
{ {
return ; return;
} }