rework done
TODO: clean
This commit is contained in:
parent
6ffaeb801a
commit
117da9d24a
3 changed files with 50 additions and 45 deletions
|
@ -214,47 +214,52 @@ EPortalCommand GetPortalCommandFromChar(unsigned char Char)
|
|||
|
||||
FPortalStatusData ParsePortalStatus(const uint8* StatusResponse)
|
||||
{
|
||||
FPortalStatusData result;
|
||||
result.Counter = StatusResponse[5];
|
||||
result.bIsReady = (StatusResponse[6] == 0x01);
|
||||
FPortalStatusData result;
|
||||
result.Counter = StatusResponse[5];
|
||||
result.bIsReady = (StatusResponse[6] == 0x01);
|
||||
|
||||
// Parse the figure status array (little-endian 32-bit integer)
|
||||
uint32 FigureStatusArray = 0;
|
||||
// Reading the 32-bit integer (character status array) from the buffer
|
||||
FigureStatusArray |= StatusResponse[1]; // 1st byte
|
||||
FigureStatusArray |= (StatusResponse[2] << 8); // 2nd byte
|
||||
FigureStatusArray |= (StatusResponse[3] << 16); // 3rd byte
|
||||
FigureStatusArray |= (StatusResponse[4] << 24); // 4th byte
|
||||
// Parse the figure status array (little-endian 32-bit integer)
|
||||
uint32 FigureStatusArray = 0;
|
||||
// Reading the 32-bit integer (character status array) from the buffer
|
||||
FigureStatusArray |= StatusResponse[1]; // 1st byte
|
||||
FigureStatusArray |= (StatusResponse[2] << 8); // 2nd byte
|
||||
FigureStatusArray |= (StatusResponse[3] << 16); // 3rd byte
|
||||
FigureStatusArray |= (StatusResponse[4] << 24); // 4th byte
|
||||
|
||||
bool bChangeBitsSet = false;
|
||||
bool bChangeBitsSet = false;
|
||||
|
||||
TStaticArray<EFigureStatus, 16> tempArray;
|
||||
// For each of the 16 entries, extract the 2-bit status and map it to EFigureStatus
|
||||
for (int32 i = 0; i < 16; ++i)
|
||||
TStaticArray<EFigureStatus, 16> tempArray;
|
||||
// For each of the 16 entries, extract the 2-bit status and map it to EFigureStatus
|
||||
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
|
||||
EFigureStatus FigureStatus;
|
||||
|
||||
switch (StatusBits)
|
||||
{
|
||||
case 0b00:
|
||||
FigureStatus = EFigureStatus::NOT_PRESENT;
|
||||
case 0b01:
|
||||
FigureStatus = EFigureStatus::PRESENT;
|
||||
case 0b11:
|
||||
FigureStatus = EFigureStatus::ADDED;
|
||||
case 0b10:
|
||||
FigureStatus = EFigureStatus::REMOVED;
|
||||
default:
|
||||
FigureStatus = EFigureStatus::NOT_PRESENT; // Default case
|
||||
}
|
||||
|
||||
// Add to the array of figure statuses
|
||||
//PortalStatusData.StatusArray.Insert(FigureStatus, i);
|
||||
tempArray[i] = FigureStatus;
|
||||
case 0b00:
|
||||
FigureStatus = EFigureStatus::NOT_PRESENT;
|
||||
break;
|
||||
case 0b01:
|
||||
FigureStatus = EFigureStatus::PRESENT;
|
||||
break;
|
||||
case 0b11:
|
||||
FigureStatus = EFigureStatus::ADDED; // When it's a new NUID detected
|
||||
break;
|
||||
case 0b10:
|
||||
FigureStatus = EFigureStatus::REMOVED; // New NUID removed
|
||||
break;
|
||||
default:
|
||||
FigureStatus = EFigureStatus::NOT_PRESENT; // Default case
|
||||
break;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -56,10 +56,11 @@ void FPortalStatusChecker::CheckPortalStatus()
|
|||
{
|
||||
case S:
|
||||
CurrentStatusData = ParsePortalStatus(output);
|
||||
UE_LOG(LogSkyportalIO, Verbose, TEXT("Output Data: %s"), *BytesToHex(output, sizeof(output)));
|
||||
|
||||
//Send delegate when new informations are received
|
||||
if (OldStatusData != CurrentStatusData) {
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < CurrentStatusData.StatusArray.Num(); i++) {
|
||||
if (CurrentStatusData.StatusArray[i] != OldStatusData.StatusArray[i]) {
|
||||
|
@ -79,18 +80,17 @@ void FPortalStatusChecker::CheckPortalStatus()
|
|||
case EFigureStatus::ADDED:
|
||||
//FigureData = ReadFigureBlocks(i);
|
||||
//subref->OnSkylanderAdded.Broadcast(GetFigureID(FigureData), i);
|
||||
break;
|
||||
case EFigureStatus::REMOVED:
|
||||
subref->OnSkylanderRemoved.Broadcast(00, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
OldStatusData = CurrentStatusData;
|
||||
subref->StatusData = CurrentStatusData;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
|
|
|
@ -13,7 +13,7 @@ void USkyPortalSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
|||
|
||||
Super::Initialize(Collection);
|
||||
// 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);
|
||||
|
||||
UE_LOG(LogTemp, Log, TEXT("SkyPortalSubsystem Initialized"));
|
||||
|
@ -92,7 +92,7 @@ FPortalStatusData USkyPortalSubsystem::PortalStatus() {
|
|||
output = PortalHandle->Read();
|
||||
} while (output[0] != 'S');
|
||||
|
||||
|
||||
|
||||
|
||||
return ParsePortalStatus(output);
|
||||
}
|
||||
|
@ -266,7 +266,7 @@ bool USkyPortalSubsystem::IsPortalReady()
|
|||
|
||||
SKYPORTAL_API void USkyPortalSubsystem::PortalMusic(const USoundWave* Sound)
|
||||
{
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue