Advertisement
Guest User

UnrealEngine4: Make a Drop Down for the Details Panel

a guest
May 20th, 2016
1,258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. .H
  2.  
  3.  
  4. #include "Runtime/Engine/Classes/Engine/DataTable.h"
  5.  
  6. USTRUCT(Blueprintable)
  7. struct FEventListDataTable : public FTableRowBase
  8. {
  9.     GENERATED_USTRUCT_BODY()
  10.     /** Full Path of Blueprint */
  11.     UPROPERTY(BlueprintReadOnly, Category = "EVT")
  12.         int32 EventFlowID;
  13.     UPROPERTY(BlueprintReadOnly, Category = "EVT")
  14.         int32 EventCatID;
  15.     UPROPERTY(BlueprintReadOnly, Category = "EVT")
  16.         int32 EventID;
  17. };
  18.  
  19.  
  20.  
  21. /**
  22.  *
  23.  */
  24. //UCLASS()
  25. UCLASS()
  26. class AAI_NPC_Character : public AAI_Character
  27. {
  28.     GENERATED_UCLASS_BODY()
  29.  
  30.     TArray<FEventArrayStruct*> EventList;
  31.  
  32.     UPROPERTY()
  33.         UDataTable * eventDatatable;
  34.  
  35.     //This will show up in the details panel as a TArray when you add a new element it
  36.     //will populate the rows table with the events data from the query in the loadEventListStrutData function.
  37.     UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Default_Events")
  38.         TArray<FDataTableRowHandle> EventListSelection;
  39.  
  40.  
  41. //...
  42. //...
  43. //...
  44. //...
  45.  
  46.  
  47. Cpp:
  48.  
  49. void AAI_NPC_Character::loadEventListStrutData(){
  50.  
  51.     //begin Build Databale String
  52.     int32 result = 0;
  53.     FString SQLQuery = "";
  54.     FString TableString;
  55.     TArray<FString> err;
  56.     TableString = FString(",EventFlowID,EventCatID,EventID\n");
  57.  
  58.  
  59.     RPG_DATABASE_CONTROLLER = NewObject<URPG_Database>(this, URPG_Database::StaticClass());
  60.     if (!OpenDatabase(SourceDataBase))return;
  61.     /*TODO: Add event filtering*/
  62.     SQLQuery = "Select EventName, EventID, EventCategoryID, EventFlowGroupID from events;";
  63.  
  64.     result = RPG_DATABASE_CONTROLLER->BP_Query(SQLQuery);
  65.  
  66.     if (result == 0 || RPG_DATABASE_CONTROLLER->BP_EndOResult(result))
  67.     {
  68.         if (result)RPG_DATABASE_CONTROLLER->BP_ClearResult(result);
  69.         RPG_DATABASE_CONTROLLER->BP_CloseDatabase();
  70.         return;
  71.     }
  72.     else{
  73.  
  74.         while (!RPG_DATABASE_CONTROLLER->BP_EndOResult(result))
  75.         {
  76.             FString _EventName = (*RPG_DATABASE_CONTROLLER->BP_GetColumn(result, "EventName"));
  77.             FString _EventID = (*RPG_DATABASE_CONTROLLER->BP_GetColumn(result, "EventID"));
  78.             FString _EventCatID = (*RPG_DATABASE_CONTROLLER->BP_GetColumn(result, "EventCategoryID"));
  79.             FString _EventFlowID = (*RPG_DATABASE_CONTROLLER->BP_GetColumn(result, "EventFlowGroupID"));
  80.  
  81.             TableString += FString(_EventName + "," + _EventFlowID + "," + _EventCatID + "," + _EventID + "\n");
  82.             RPG_DATABASE_CONTROLLER->BP_NextRow(result);
  83.         }
  84.     }
  85.  
  86.     if (eventDatatable == nullptr)eventDatatable = NewObject<UDataTable>(this, "EListDataTable");
  87.     eventDatatable->RowStruct = FEventListDataTable().StaticStruct();
  88.  
  89. #if WITH_EDITORONLY_DATA
  90.     err = eventDatatable->CreateTableFromCSVString(TableString);
  91. #endif
  92.     if (err.Num() > 0)
  93.     {
  94.         for (FString tmp : err)UE_LOG(LogTemp, Error, TEXT("%s"), *tmp);
  95.     }else{
  96.         for (int32 i = 0; i < EventListSelection.Num();i++){
  97.             EventListSelection[i].DataTable = eventDatatable;
  98.         }
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement