Puntatori sul porting di una lingua specifica del dominio di workflow c ++ su javascript

1

Sto scrivendo un gioco in c ++ con il motore javascript v8 incorporato in esso. Ho un sistema di flusso di lavoro c ++ che uso per dire cose come fare cose specifiche. È bello e mi piace, ma ho bisogno che funzioni anche in javascript.

Il codice descrive l'intero processo, ma è asincrono-ish e esegue solo selettivamente la parte del flusso di lavoro "corrente". Salta tutto ciò che è già stato fatto o tutto ciò che non ha ancora bisogno di essere fatto.

Non sto cercando qualcuno che scriva questo codice per me. Sto cercando qualcuno che mi indichi i costrutti del linguaggio javascript che possono essere "abusati" per scrivere una lingua specifica del dominio , in particolare le cose relative a ES6.

Un esempio semplificato del codice c ++ per dire a un camion di andare in un deposito di carburante e fare rifornimento è:

workflow().label("pick fuel storage location").do_once([this](WorkflowCommand & c) {
    auto fuel_storage = /* find a fuel depot */

    /* persist selected fuel depot to workflow */
    c.get_workflow().store("fuelstorage", *fuel_storage);
});
// load that value for easy use - will be the same value every run through
FuelStorage * fuel_storage = workflow.get_stored_values().get_p<FuelStorage>("fuelstorage");

workflow().label("drive truck to fuel tank").do_once([this, fuel_storage](WorkflowCommand & c){
    // generate a path to the fuel depot
    c.get_possessed()->get_object().path_to({fuel_storage->extents.center(), Heading(0.0f)});
  // don't execute anything past here until the fuel truck has arrived
}).wait_for_path_completion();

// run this callback until it returns true
workflow().label("pumping gas").do_until([this, fuel_storage](WorkflowCommand & c) {
    this->fuel_truck.fuel_tank.transfer_from(*fuel_storage->fuel_tank,
                                             fuel_storage->fuel_tank->get_transfer_rate() *
                                                     c.get_time().get_game_delta());
    return this->fuel_truck.fuel_tank.is_full();
});

La mia versione javascript ha bisogno di usare le stesse primitive (dato che chiamerà il c ++ dietro le quinte, ma posso mescolare quei primitivi in ogni modo che voglio.

Grazie.

    
posta xaxxon 21.06.2016 - 08:51
fonte

0 risposte

Leggi altre domande sui tag