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.