Code Dokumentation

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Code Dokumentation

      Guten Tag,
      da ich neben meiner Ausbildung endlich mal Zeit gefunden habe, wollte ich mal eine Teeworlds Mod. Doch ich musste leider schnell feststellen, das man in der Community nicht wirklich viele Tutorials oder Hilfe zum Code bekommt. Somit musste ich mich oft Stunden damit beschäftigen, bis ich mal etwas fertig gestellt habe.


      Nun die Frage: Gibt eine Dokumentation über den Teeworlds Code gibt, wo ich nicht in den einzelnen Dateien rumblättern muss?
      Wenn Nein, wie kann ich mich am besten im Code einarbeiten?
      Meine HP könnte dich auch intressieren
    • Hey,

      eine Dokumentation existiert meines Erachtens leider noch nicht. Allerdings kann man sich gut an der Ordnerstruktur und den Dateinamen orientieren.
      So gibt es die Hauptorder Engine und Game.
      In Game/ liegen einige Dateien, die vom Server und Client gebraucht werden (sowie der editor-ordner).

      Meist verwende ich die Suchfunktion über ganze Ordner und Unterordner, um mich in den Code einzuarbeiten.

      Der Server an sich befindet sich mit den Network Handlern etc. in dem engine-Ordner, während die Spielmechanik im gleichnamigen game/server-Ordner liegt.
      Gamecore in game/ ist für das Movement zuständig, variables.h für config-variablen und tunings.h für Tuning Variablen (:, collision ist selbsterklärend und mapitems.h definiert unter anderem die Tiles und Entities für die Map.

      Im Serverordner liegen wie gesagt, die dateien, die für die eigentliche Spielmechanik wichtig sind:

      player-definiert einen Spieler ( keinen Tee ) mit ID, Punktzahl und Team
      gamecontext - verarbeitung von chat, sounds, eintretende und austretende clients
      gamecontroller - grundgerüst für die einzelnen Spieltypen im /gamemodes ordner
      gameworld - handhabung von entities

      im Entities Ordner liegen im Allgemeinen die sich bewegenden Objekte, sprich Tees, Projektile, Pickups aber auch der Laser ist hier zu finden.
      Für kleinere Modifkationen an diesen Datein verweise ich an die vorhandenen Tutorials.

      Mit freundlichen Grüßen,

      Pata

      EDIT: Ich denke auch nicht, dass ich die Source noch weiter kommentiere, da meiner Meinung nach eine grundlegende Dokumentation über den Aufbau sinvoller wäre. BTW ist die Source gar nicht mehr auf Github zu finden, weshalb ich den Thread wohl schließen werde ...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Patafix ()

    • @KingteE

      Ich mache eine Ausbildung zum Fachinformatiker im Bereich Anwendungsentwicklung, weswegen ich schon mal mit der Programmierung gut vertraut bin :;):

      @Patafix
      Vielen Dank, das ist schonmal ein guter Anfang.
      Doch wie mache ich das, wenn ich eine neue Klasse erstellen möchte? Wo müsste ich das Objekt definieren, um von anderen Klassen aus Zugriff zu erlangen?
      Meine HP könnte dich auch intressieren
    • Nette Frage :D
      [...] da war Pata wohl um einiges schneller und sogar detaillierter :P

      Was vlt noch interessant wäre vorallem server.cpp da dort die main() Funktion ist, also der Start des ganzen Geplänkels ^^
      Man kann also dort anfangen, da dort einige andere Klassen erstellt werden wie zB CGameContext.

      Oft wird aber nicht solch ein Code "IGameServer *pGameServer = new CGameContext();" benutzt
      sondern " IGameServer *pGameServer = CreateGameServer(); "
      In einer anderen Datei, (in diesem Fall in GameContext) wird dann dieser Code angewendet: " IGameServer *CreateGameServer() { return new CGameContext; } "
      Kommt aber aufs selbe hinaus :D

      Man könnte also anfangen nach "new " bzw "new Konstruktor" zu suchen.
      So wird zB klar, dass in Server.cpp der GameContext erstellt, in GameContext der Player und in Player der Character. Solche "Verbindungen" könnten möglicherweise hilfreich sein, um sich einen Überblick in der Source zu machen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von warkid ()

    • Shadow_Man schrieb:

      @Patafix
      Vielen Dank, das ist schonmal ein guter Anfang.
      Doch wie mache ich das, wenn ich eine neue Klasse erstellen möchte? Wo müsste ich das Objekt definieren, um von anderen Klassen aus Zugriff zu erlangen?
      Also Teeworlds ist zwar schon in veraltetem C++ geschrieben, jedoch kannst du Objekte bzw. Klassen genauso definieren, wie du es aus deiner Ausbildung gewohnt sein solltest ( wenn ihr denn schon mit C++ gearbeitet habt, ansonsten kannst du dir die Definition und Implementierung durch Tutorials oder die Teeworlds-Source aneignen).
      Für den Zugriff aus anderen Dateien musst du die Headerdatei in anderen vlt. bereits vorhandenen Dateien inkludieren und erhälst so Zugriff darauf.
      Für die Wo? Frage gibt es nur die Antwort: Da, wo es deiner Meinung nach am besten hinpasst. So macht es wenig Sinn eine Server-Datei in den Client-Ordner zu schieben, auch wenn das theoretisch möglich wäre. Genauso solltest du versuchen, keine Unordnung in eine Source zu bringen, also Dateien und Klassen immer möglichst deutlich Bennen und eben die Orderstruktur waren, womöglich eigene Ordner hinzufügen.

      Beachten solltest du eigene Grundfunktionen: so sind allocation-Funktionen, sowie einige C-String-Funktionen in Teeworlds für bessere Kontrolle der Aufrufe noch einmal mit einem Aufruf der eigentlichen Funktion eingebaut.
      Zudem wurde in 0.6 eine neue Syntax eingeführt, die am Anfang vielleicht etwas gewöhnungsbedürftig ist, aber man sich schnell daran gewöhnt und sie zu schätzen weiß.

      Leider ist die Teeworlds-Community noch zu klein und der Support von Modifikationen gering, sodass eine saubere Dokumentation noch nicht realisiert wurde.

      Als Ergäzung zu Warkid: Die von ihm erwähnte Datei server.cpp findest du im engine/server/ ordner.

      Mit freundlichen Grüßen,

      Pata

      EDIT: Ich denke, die Seite, die Shadow Man gefunden hat, bietet eine gute Grundlage :)