UE4 _ Shuffle for randomize Map Loading

#include "ML_MainCtrl.h"
#include "ML_SaveData.h"
#include "ML_GameInstance.h"

// Sets default values
AML_MainCtrl::AML_MainCtrl()
{
  // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
 PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AML_MainCtrl::BeginPlay()
{
 Super::BeginPlay();

 //PutIDX : Randomize index  ,   put00~02 : MapIDX Value 1~10
 int32 PutIDX[] = { 0,1,2 };
 int32 Put00[] = { 0,1,2 };
 int32 Put01[] = { 3,4,5 };
 int32 Put02[] = { 6,7,8,9 };
 FString Put03[] = { "A","B","C","D","E","F","G","H","I","J" };
 FString Put04[] = { "0","0","0" };
 Shuffle(PutIDX, 3);
 Shuffle(Put00, 3);
 Shuffle(Put01, 3);
 Shuffle(Put02, 3);
 _LevelInt.Append(PutIDX, ARRAY_COUNT(PutIDX));
 _LEVELNUM00.Append(Put00, ARRAY_COUNT(Put00));
 _LEVELNUM01.Append(Put01, ARRAY_COUNT(Put01));
 _LEVELNUM02.Append(Put02, ARRAY_COUNT(Put02));
 _LevelName.Append(Put03, ARRAY_COUNT(Put03));
 _LoadLevel.Append(Put04, ARRAY_COUNT(Put04));
 UE_LOG(LogTemp, Warning, TEXT("intLength:%d"), _LevelInt.Num());
 UE_LOG(LogTemp, Warning, TEXT("Start"));
 this->Algorithm();
}
// Called every frame
void AML_MainCtrl::Tick(float DeltaTime)
{
 Super::Tick(DeltaTime);
}
void AML_MainCtrl::Algorithm()
{
 UE_LOG(LogTemp, Warning, TEXT("AlgorithmStart"));
 int32 _INT[] = { 0,0,0 };
 //UML_SaveData* _SaveData = Cast<UML_SaveData>(UGameplayStatics::CreateSaveGameObject(UML_SaveData::StaticClass()));
 UML_GameInstance* _SaveData = Cast<UML_GameInstance>(GetGameInstance());
 for (int i = 0; i < _LevelInt.Num(); i++) {
  if (_LevelInt[i] == 0) {
   _INT[i] = _LEVELNUM00[0];
  }
  else if (_LevelInt[i] == 1) {
   _INT[i] = _LEVELNUM01[0];
  }
  else if (_LevelInt[i] == 2) {
   _INT[i] = _LEVELNUM02[0];
  }
  else {
   UE_LOG(LogTemp, Warning, TEXT("INT_Randomize_Error"));
  }
 }
 for (int i = 0; i < 3; i++) {
  _SaveData->_LEVELIDX[i] = _INT[i];
  UE_LOG(LogTemp, Warning, TEXT("LevelIDX:%d"), _SaveData->_LEVELIDX[i]);
 }
 UE_LOG(LogTemp, Warning, TEXT("LEVEL00:%d"), _SaveData->_LEVELIDX[0]);
 UE_LOG(LogTemp, Warning, TEXT("LEVEL01:%d"), _SaveData->_LEVELIDX[1]);
 UE_LOG(LogTemp, Warning, TEXT("LEVEL02:%d"), _SaveData->_LEVELIDX[2]);
 this->SetString();
}
void AML_MainCtrl::Shuffle(int deck[], int len) {
 int temp = 0;
 int randomIdx = 0;
 for (int i = 0; i < len; i++) {
  randomIdx = rand() % len;
  temp = deck[i];
  deck[i] = deck[randomIdx];
  deck[randomIdx] = temp;
 }
}

void AML_MainCtrl::SetString() {
 //UML_SaveData* _SaveData = Cast<UML_SaveData>(UGameplayStatics::CreateSaveGameObject(UML_SaveData::StaticClass()));
 UML_GameInstance* _GameInstance = Cast<UML_GameInstance>(GetGameInstance());
 for (int i = 0; i < 3; i++) {
  int A = _GameInstance->_LEVELIDX[i];
  _LoadLevel[i] = _LevelName[A];
 }
}

댓글

이 블로그의 인기 게시물

About AActor!!! "UObject" has no member "BeginPlay"

UNREAL Android build information

C++ 생성자 위임 (delegating constructor)