Normaler C++ Code zu einem Bluerpint?

  • Normaler C++ Code zu einem Bluerpint?

    Hallo zusammen


    Ich habe da eine Frage ...
    Ich habe für die UNI in C++ einen Graphen Entwickeln müssen und habe mir gedacht ich nehme den Code und baller ihn mal in mein UE4 Projekt rein.
    Und zwar brauche ich einen Skill-Tree, wo jeder Knoten mehr als ein Vater haben kann (daher kein Baum).
    Der Grund ist, ein Skilltree der auch wirklich optisch vor einem ist (in Blueprints), ist auch übersichtlicher, Wartbarer und es wäre leichter Sachen zu ändern als das alles in C++ Code.


    Hier mal meinen Code:

    CSS-Quellcode: Graph.h

    1. /*
    2. * Graph.h
    3. *
    4. * Created on: 22.04.2018
    5. * Author: evd
    6. */
    7. #include <iostream>
    8. #include <list>
    9. template<class T>
    10. class Graph
    11. {
    12. public:
    13. T element;
    14. std::list<Graph<T>*> childs;
    15. std::list<Graph<T>*> parents;
    16. Graph(T);
    17. ~Graph();
    18. Graph<T>* makeNewChild(T);
    19. bool pushChildtoParent(Graph<T>*);
    20. Graph<T>* makeNewChild(Graph<T>*);
    21. bool deleteChild(Graph<T>*);
    22. bool makeParent(Graph<T>*);
    23. T getElement();
    24. bool leaf;
    25. };
    26. template<class T>
    27. Graph<T>::Graph(T element) : element(element)
    28. {
    29. leaf = true;
    30. }
    31. template<class T>
    32. Graph<T>::~Graph()
    33. {
    34. if(!leaf)
    35. {
    36. for (auto it = childs.begin(); it != childs.end();)
    37. {
    38. // wenn das kind nicht mehrere Väter hat, denen ich es nicht weg nehmen will
    39. if ((**it).parents.size()<2)
    40. {
    41. delete *it ++;
    42. }
    43. else{
    44. (**it).parents.remove(this);
    45. it ++;
    46. }
    47. }
    48. }
    49. if (!(*this).parents.empty())
    50. {
    51. for (auto it = parents.begin(); it != parents.end(); it++)
    52. {
    53. //alle Väter vergessen dieses Kind, damit es ohne folgen beseitigt werden kann
    54. (**it).deleteChild(this);
    55. }
    56. }
    57. }
    58. template<class T>
    59. T Graph<T>::getElement()
    60. {
    61. return (*this).element;
    62. }
    63. template<class T>
    64. bool Graph<T>::deleteChild(Graph<T>* tokill)
    65. {
    66. for (auto it = childs.begin(); it != childs.end(); it++)
    67. {
    68. if( (*it)==tokill){
    69. childs.erase(it);
    70. return true;
    71. }
    72. }
    73. // Error code hier einfügen
    74. std::cout<<"Leider dieses Kind nicht gefunden. Error main2.h at line 61"<<std::endl;
    75. return false;
    76. }
    77. //eingane der zu setzende Vater. Wenn setzen des Vaters gelingt, wird er in die Liste der Väter aufgenommen
    78. template<class T>
    79. bool Graph<T>::makeParent (Graph<T>* newParent){
    80. if ((*newParent).pushChildtoParent(this)){
    81. parents.push_back(newParent);
    82. return true;
    83. }
    84. else{
    85. //Error code hier einfügen
    86. std::cout<<"das Erzeugen dieses Kindes bei dem Vater war nicht möglich. Error main2.h at line 76"<<std::endl;
    87. return false;
    88. }
    89. }
    90. template<class T>
    91. bool Graph<T>::pushChildtoParent(Graph<T>* inTree){
    92. childs.push_back(inTree);
    93. leaf = false;
    94. return true;
    95. }
    96. template<class T>
    97. Graph<T>* Graph<T>::makeNewChild(T inValue)
    98. {
    99. Graph<T>* contain = new Graph<T>(inValue);
    100. childs.push_back(contain);
    101. (*contain).parents.push_back(this);
    102. leaf = false;
    103. return contain;
    104. }
    105. template<class T>
    106. Graph<T>* Graph<T>::makeNewChild(Graph<T>* inTree)
    107. {
    108. childs.push_back(inTree);
    109. (*inTree).parents.push_back(this);
    110. leaf = false;
    111. return inTree;
    112. }
    Alles anzeigen


    Jetzt die Frage... wie bekomme ich das zu einer UCLASS(Blueprintable) bei der ich eine UFUNCTION definieren kann ...
    ich habe ja schon gehört das ich das std::list mal getrost vergessen kann unter UE4, das wehre dann so was wie eine TList oder so ...


    und dann vielleicht noch eine etwas gröbere Frage...
    Ich habe mal das ganze Geschlontz in eine Actour Class rein kopiert ... drüber UCLASS(Blueprintable) geschrieben und über z.b. getParent UFUNCTION(BlueprintCallable, Category=Graph) geschrieben.
    Sollte ich dann nicht auch get Parent finden?
    Oder wo ist denn eine ganz nette Deutsche Seite bei der ich mich da mal schlau lesen kann?


    Liebe grüße
    EvD

    EDIT: da ich noch blutiger Anfänger bin, bin ich über jede noch so kleine Hilfe erfreut und hoffe das ihr über meine Unwissenheit hinweg sehen könnt :)




    EDIT(29.04.18): wie ich gerade gelesen habe, kann ich anscheinend vermutlich (man sieht, ich bin mir da ganz sicher ;D ) keine Templates in UE4 benutzen, wenn man auch gleichzeitig eine UCLASS() daraus machen will xD

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von EvD ()

Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.