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 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;
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue