Ergebnis 1 bis 6 von 6

Thema: ManiaScript Builder und Compressor für PHP

  1. #1
    PsyduckTechnischer Administrator
    Enton, Zweton, Dreton, ...
    Avatar von Marcel
    Registriert
    10.06.2010
    Alter
    31
    Beiträge
    1.125
    ManiaPlanet
    FT»Marcel
    Login: m4rcel
    Nickname: FT»Marcel
    Zone: World » Europe » Germany » Thüringen » Erfurt
    Clan: FunTrackers
    ManiaLinks: Tetris
    TrackMania
    FT»Marcel
    Login: m4rcel United
    Nickname: FT»Marcel
    Zone: World » Germany » Thuringia » Erfurt
    Clan: FunTrackers
    ManiaLinks: FunTrackers, Marcel
    Links: TM-Ladder
    Blog-Einträge
    11

    ManiaScript Builder und Compressor für PHP

    Ich habe mir mal die Zeit genommen, und meine PHP-Klassen für ManiaScript ein wenig aufgeräumt und auf github hochegladen. Benötigt wird PHP5.3 oder neuer.

    Einbinden der Klassen

    Das Einbinden der Klassen in euer Projekt ist sehr einfach: Bindet die Datei src/autoload.php ein, um das Laden der Klassen zu initialisieren. Ab dann könnt ihr die Klassen einfach Verwenden als wären sie alle da
    Solltet ihr in eurem Projekt Composer einsetzen, könnt ihr alternativ das Paket "bluepsyduck/maniascript" hinzufügen und wie gewphnt die vendor/autoload.php nutzen.

    ManiaScript Builder

    Der ManiaScript Builder kümmert sich um das Zusammenbauen des gesamten ManiaScripts, inklusive der Direktiven am Anfang und der main()-Funktion mitsamst EventHandler-Loop am Ende. Während der Script-Ausführung könnt ihr beliebig die Code-Schnipsel an den Builder übergeben, welcher am Ende beim Aufruf von build() zum ManiaScript zusammenbaut.

    Es gibt zwei Möglichkeiten, den Builder einzusetzen. Entweder ihr nutzt den vollständig objektorientierten Ansatz, wo die einzelnen Events und Direktiven Instanzen der entsprechenden Klassen sind und diese an den Builder übergeben werden, oder ihr nutzt die ManiaScript\Builder\Facade, welche die Objektorientiertheit zurück auf einfache Methoden runterbricht. Die Funktionalität ist in beiden Fällen identisch, es kommt also rein auf eure Vorlieben an: OOP oder kein OOP ^^

    An dieser Stelle soll nur ein kleines Beispiel folgen. Eine detaillierte Beschreibung der Klasse inklusive weiterer Beispiel-Schnipsel findet ihr im Wiki auf github.

    Beispiel: Objektorientierter Ansatz
    PHP-Code:
    <?php
    // Create Builder instance
    $builder = new \ManiaScript\Builder();

    // #Include a library
    $directive = new \ManiaScript\Builder\Directive\Library();
    $directive->setName('TextLib');
    $builder->addDirective($directive);

    // Add an Event to the Builder
    $event = new \ManiaScript\Builder\Event\MouseClick();
    $event->setControlIds(array('MyQuad'))
          ->
    setCode('log("Handle MouseClick: MyQuad");')
          ->
    setInline(true);
    $builder->addEvent($event);

    // Create the ManiaScript code
    $maniaScriptCode $builder->build()
                               ->
    getCode();
    Beispiel: Ansatz mit einfachen Methoden (Facade)
    PHP-Code:
    <?php
    $facade 
    = new \ManiaScript\Builder\Facade();

    // #Include a Library
    $facade->addLibrary('TextLib');

    // Add an Event to the Builder
    $facade->addMouseClick('log("Handle MouseClick: MyQuad");', array('MyQuad'), 5true);

    // Create the ManiaScript code
    $maniaScriptCode $facade->build();
    Es sei noch erwähnt, dass der Builder das gesamte ManiaScript aufbaut, da er auch die Direktiven übernimmt. Es müssen also ebenfalls alle Funktionen zum Builder hinzugefügt werden, die im ManiaScript verfügbar sein sollen, da diese bekanntlich zwischen Direktiven und der main()-Funktion landen

    ManiaScript Compressor

    Unabhängig vom Builder könnt ihr den ManiaScript Compressor auch als alleinstehende Komponente nutzen. Der Compressor minimiert die Größe des ManiaScriptes, indem nicht erforderliche Leerzeichen und Zeilenumbrüche entfernt werden. Dabei werden Variablen- und Funktionsnamen selbst nicht verändert, es ist also wirklich nur einm Compressor und kein Obfuscator

    Auch hier soll nur ein Beispiel folgen, zusätzliche Informationen findet ihr ebenfalls im Wiki auf github
    PHP-Code:
    <?php
    $compressor 
    = new \ManiaScript\Compressor();
    $compressedCode $compressor->setCode($yourManiaScriptCode)
                                 ->
    compress()
                                 ->
    getCompressedCode();


    Falls jemand Feedback oder Verbesserungsvorschläge hat, kann diese gerne posten. Bugs in den Klassen natürlich auch
    Geändert von Marcel (22.09.2013 um 11:35 Uhr)

  2. #2
    Sieht gut aus.
    Ich steh' zwar nicht so auf das Fluent Interface Konzept außerhalb von funktionaler, seiteneffektfreier Programmierung (wo man nicht ohne auskommt), aber vielleicht unterschätze ich auch einfach nur das Potenzial dahinter. ^^
    */

  3. #3
    Benutzer Avatar von Jojo_44
    Registriert
    28.08.2010
    Ort
    Bayern->Oberfranken
    Alter
    26
    Beiträge
    81
    ManiaPlanet
    zero| つoっo
    Login: jojo95183
    Nickname: zero| つoっo
    Zone: World » Europe » Germany » Bayern » Nürnberg
    Multiplayer: 11.470 (59.063 LP)
    Soloplayer: 443 (227.475 SP)
    Clan: Zero
    ManiaLinks: zeroesports
    TrackMania
    zero| つoっo
    Login: jojo_dragon United
    Nickname: zero| つoっo
    Zone: World » Germany » Bavaria » Nürnberg
    Clan: Zero
    ManiaLinks: zero
    Links: TM-Ladder
    Sehr nettes Script

    Zitat Zitat von Marcel Beitrag anzeigen
    Falls jemand Feedback oder Verbesserungsvorschläge hat, kann diese gerne posten.
    Decompressor ?

    mfg Jojo

  4. #4
    Zitat Zitat von Jojo_44 Beitrag anzeigen
    Decompressor ?
    Ein Formatierer ist nach ersten Schätzungen auf jeden Fall aufwändiger.
    */

  5. #5
    PsyduckTechnischer Administrator
    Enton, Zweton, Dreton, ...
    Avatar von Marcel
    Registriert
    10.06.2010
    Alter
    31
    Beiträge
    1.125
    ManiaPlanet
    FT»Marcel
    Login: m4rcel
    Nickname: FT»Marcel
    Zone: World » Europe » Germany » Thüringen » Erfurt
    Clan: FunTrackers
    ManiaLinks: Tetris
    TrackMania
    FT»Marcel
    Login: m4rcel United
    Nickname: FT»Marcel
    Zone: World » Germany » Thuringia » Erfurt
    Clan: FunTrackers
    ManiaLinks: FunTrackers, Marcel
    Links: TM-Ladder
    Blog-Einträge
    11
    So, ich habe nun zum Compressor noch meinen ManiaScript Builder hinzugefügt, den ich unter anderem (leicht abgewandelt, da älter ^^) auch in Tetris einsetze. Der Builder übernimmt hauptsächlichst das Aufbauen der main()-Funktion mit dem gesamten EventHandler-Loop, sodass es im Script selbst relativ egal ist, wer wann noch ein MouseClick zu einem Quad hinzufügt.

    Ich habe den ersten Post entsprechend erweitert, also ruhig mal nen Schluck nach oben scrollen und dort schauen

  6. #6
    Erdooo
    Gast
    Danke!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •