mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 19:49:19 +02:00
update lua api (details on wiki)
This commit is contained in:
@@ -819,7 +819,7 @@ event_manager::FindEvent( std::string const &Name ) {
|
|||||||
|
|
||||||
// legacy method, inserts specified event in the event query
|
// legacy method, inserts specified event in the event query
|
||||||
bool
|
bool
|
||||||
event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) {
|
event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner, double delay ) {
|
||||||
|
|
||||||
if( ( false == Event->m_ignored ) && ( true == Event->bEnabled ) ) {
|
if( ( false == Event->m_ignored ) && ( true == Event->bEnabled ) ) {
|
||||||
// jeśli może być dodany do kolejki (nie używany w skanowaniu)
|
// jeśli może być dodany do kolejki (nie używany w skanowaniu)
|
||||||
@@ -869,7 +869,7 @@ event_manager::AddToQuery( TEvent *Event, TDynamicObject *Owner ) {
|
|||||||
// standardowe dodanie do kolejki
|
// standardowe dodanie do kolejki
|
||||||
++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki
|
++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki
|
||||||
WriteLog( "EVENT ADDED TO QUEUE" + ( Owner ? ( " by " + Owner->asName ) : "" ) + ": " + Event->asName );
|
WriteLog( "EVENT ADDED TO QUEUE" + ( Owner ? ( " by " + Owner->asName ) : "" ) + ": " + Event->asName );
|
||||||
Event->fStartTime = std::abs( Event->fDelay ) + Timer::GetTime(); // czas od uruchomienia scenerii
|
Event->fStartTime = delay + std::abs( Event->fDelay ) + Timer::GetTime(); // czas od uruchomienia scenerii
|
||||||
if( Event->fRandomDelay > 0.0 ) {
|
if( Event->fRandomDelay > 0.0 ) {
|
||||||
// doliczenie losowego czasu opóźnienia
|
// doliczenie losowego czasu opóźnienia
|
||||||
Event->fStartTime += Event->fRandomDelay * Random( 10000 ) * 0.0001;
|
Event->fStartTime += Event->fRandomDelay * Random( 10000 ) * 0.0001;
|
||||||
|
|||||||
2
Event.h
2
Event.h
@@ -140,7 +140,7 @@ public:
|
|||||||
FindEvent( std::string const &Name );
|
FindEvent( std::string const &Name );
|
||||||
// legacy method, inserts specified event in the event query
|
// legacy method, inserts specified event in the event query
|
||||||
bool
|
bool
|
||||||
AddToQuery( TEvent *Event, TDynamicObject *Owner );
|
AddToQuery( TEvent *Event, TDynamicObject *Owner, double delay = 0.0 );
|
||||||
// legacy method, executes queued events
|
// legacy method, executes queued events
|
||||||
bool
|
bool
|
||||||
CheckQuery();
|
CheckQuery();
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ void TIsolated::DeleteAll() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TIsolated * TIsolated::Find(std::string const &n)
|
TIsolated * TIsolated::Find(std::string const &n, bool create)
|
||||||
{ // znalezienie obiektu albo utworzenie nowego
|
{ // znalezienie obiektu albo utworzenie nowego
|
||||||
TIsolated *p = pRoot;
|
TIsolated *p = pRoot;
|
||||||
while (p)
|
while (p)
|
||||||
@@ -92,6 +92,8 @@ TIsolated * TIsolated::Find(std::string const &n)
|
|||||||
return p;
|
return p;
|
||||||
p = p->pNext;
|
p = p->pNext;
|
||||||
}
|
}
|
||||||
|
if (!create)
|
||||||
|
return nullptr;
|
||||||
pRoot = new TIsolated(n, pRoot); // BUG: source of a memory leak
|
pRoot = new TIsolated(n, pRoot); // BUG: source of a memory leak
|
||||||
return pRoot;
|
return pRoot;
|
||||||
};
|
};
|
||||||
|
|||||||
2
Track.h
2
Track.h
@@ -102,7 +102,7 @@ public:
|
|||||||
TIsolated(const std::string &n, TIsolated *i);
|
TIsolated(const std::string &n, TIsolated *i);
|
||||||
// methods
|
// methods
|
||||||
static void DeleteAll();
|
static void DeleteAll();
|
||||||
static TIsolated * Find(const std::string &n); // znalezienie obiektu albo utworzenie nowego
|
static TIsolated * Find(const std::string &n, bool create = true); // znalezienie obiektu albo utworzenie nowego
|
||||||
void Modify(int i, TDynamicObject *o); // dodanie lub odjęcie osi
|
void Modify(int i, TDynamicObject *o); // dodanie lub odjęcie osi
|
||||||
bool Busy() {
|
bool Busy() {
|
||||||
return (iAxles > 0); };
|
return (iAxles > 0); };
|
||||||
|
|||||||
25
lua.cpp
25
lua.cpp
@@ -65,13 +65,14 @@ int lua::openffi(lua_State *s)
|
|||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
EXPORT TEvent* scriptapi_event_create(const char* name, lua::eventhandler_t handler, double delay)
|
EXPORT TEvent* scriptapi_event_create(const char* name, double delay, double randomdelay, lua::eventhandler_t handler)
|
||||||
{
|
{
|
||||||
TEvent *event = new TEvent();
|
TEvent *event = new TEvent();
|
||||||
event->bEnabled = true;
|
event->bEnabled = true;
|
||||||
event->Type = tp_Lua;
|
event->Type = tp_Lua;
|
||||||
event->asName = std::string(name);
|
event->asName = std::string(name);
|
||||||
event->fDelay = delay;
|
event->fDelay = delay;
|
||||||
|
event->fRandomDelay = randomdelay;
|
||||||
event->Params[0].asPointer = (void*)handler;
|
event->Params[0].asPointer = (void*)handler;
|
||||||
if (simulation::Events.insert(event))
|
if (simulation::Events.insert(event))
|
||||||
return event;
|
return event;
|
||||||
@@ -108,6 +109,24 @@ extern "C"
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT TIsolated* scriptapi_isolated_find(const char* name)
|
||||||
|
{
|
||||||
|
std::string str(name);
|
||||||
|
TIsolated *isolated = TIsolated::Find(name, false);
|
||||||
|
if (isolated)
|
||||||
|
return isolated;
|
||||||
|
else
|
||||||
|
WriteLog("lua: missing isolated: " + str);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT bool scriptapi_isolated_isoccupied(TIsolated* isolated)
|
||||||
|
{
|
||||||
|
if (isolated)
|
||||||
|
return isolated->Busy();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
EXPORT const char* scriptapi_event_getname(TEvent *e)
|
EXPORT const char* scriptapi_event_getname(TEvent *e)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
@@ -122,10 +141,10 @@ extern "C"
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT void scriptapi_event_dispatch(TEvent *e, TDynamicObject *activator)
|
EXPORT void scriptapi_event_dispatch(TEvent *e, TDynamicObject *activator, double delay)
|
||||||
{
|
{
|
||||||
if (e)
|
if (e)
|
||||||
simulation::Events.AddToQuery(e, activator);
|
simulation::Events.AddToQuery(e, activator, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT double scriptapi_random(double a, double b)
|
EXPORT double scriptapi_random(double a, double b)
|
||||||
|
|||||||
18
lua_ffi.h
18
lua_ffi.h
@@ -4,18 +4,22 @@ const char lua_ffi[] = "local ffi = require(\"ffi\")\n"
|
|||||||
"\n"
|
"\n"
|
||||||
"typedef struct TEvent TEvent;\n"
|
"typedef struct TEvent TEvent;\n"
|
||||||
"typedef struct TTrack TTrack;\n"
|
"typedef struct TTrack TTrack;\n"
|
||||||
|
"typedef struct TIsolated TIsolated;\n"
|
||||||
"typedef struct TDynamicObject TDynamicObject;\n"
|
"typedef struct TDynamicObject TDynamicObject;\n"
|
||||||
"typedef struct TMemCell TMemCell;\n"
|
"typedef struct TMemCell TMemCell;\n"
|
||||||
"typedef struct memcell_values memcell_values;\n"
|
"typedef struct memcell_values memcell_values;\n"
|
||||||
"\n"
|
"\n"
|
||||||
"TEvent* scriptapi_event_create(const char* name, void (*handler)(TEvent*, TDynamicObject*), double delay);\n"
|
"TEvent* scriptapi_event_create(const char* name, double delay, double randomdelay, void (*handler)(TEvent*, TDynamicObject*));\n"
|
||||||
"TEvent* scriptapi_event_find(const char* name);\n"
|
"TEvent* scriptapi_event_find(const char* name);\n"
|
||||||
"const char* scriptapi_event_getname(TEvent *e);\n"
|
"const char* scriptapi_event_getname(TEvent *e);\n"
|
||||||
"void scriptapi_event_dispatch(TEvent *e, TDynamicObject *activator);\n"
|
"void scriptapi_event_dispatch(TEvent *e, TDynamicObject *activator, double delay);\n"
|
||||||
"\n"
|
"\n"
|
||||||
"TTrack* scriptapi_track_find(const char* name);\n"
|
"TTrack* scriptapi_track_find(const char* name);\n"
|
||||||
"bool scriptapi_track_isoccupied(TTrack *track);\n"
|
"bool scriptapi_track_isoccupied(TTrack *track);\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
"TIsolated* scriptapi_isolated_find(const char* name);\n"
|
||||||
|
"bool scriptapi_isolated_isoccupied(TIsolated *isolated);\n"
|
||||||
|
"\n"
|
||||||
"const char* scriptapi_train_getname(TDynamicObject *dyn);\n"
|
"const char* scriptapi_train_getname(TDynamicObject *dyn);\n"
|
||||||
"void scriptapi_dynobj_putvalues(TDynamicObject *dyn, const char *str, double num1, double num2);\n"
|
"void scriptapi_dynobj_putvalues(TDynamicObject *dyn, const char *str, double num1, double num2);\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -37,8 +41,8 @@ const char lua_ffi[] = "local ffi = require(\"ffi\")\n"
|
|||||||
" return ffi.string(ns.scriptapi_event_getname(a))\n"
|
" return ffi.string(ns.scriptapi_event_getname(a))\n"
|
||||||
"end\n"
|
"end\n"
|
||||||
"module.event_dispatch = ns.scriptapi_event_dispatch\n"
|
"module.event_dispatch = ns.scriptapi_event_dispatch\n"
|
||||||
"function module.event_dispatch_n(a, b)\n"
|
"function module.event_dispatch_n(a, b, c)\n"
|
||||||
" ns.scriptapi_event_dispatch(ns.scriptapi_event_find(a), b)\n"
|
" ns.scriptapi_event_dispatch(ns.scriptapi_event_find(a), b, c)\n"
|
||||||
"end\n"
|
"end\n"
|
||||||
"\n"
|
"\n"
|
||||||
"module.track_find = ns.scriptapi_track_find\n"
|
"module.track_find = ns.scriptapi_track_find\n"
|
||||||
@@ -47,6 +51,12 @@ const char lua_ffi[] = "local ffi = require(\"ffi\")\n"
|
|||||||
" return ns.scriptapi_track_isoccupied(ns.scriptapi_track_find(a))\n"
|
" return ns.scriptapi_track_isoccupied(ns.scriptapi_track_find(a))\n"
|
||||||
"end\n"
|
"end\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
"module.isolated_find = ns.scriptapi_isolated_find\n"
|
||||||
|
"module.isolated_isoccupied = ns.scriptapi_isolated_isoccupied\n"
|
||||||
|
"function module.isolated_isoccupied_n(a)\n"
|
||||||
|
" return ns.scriptapi_isolated_isoccupied(ns.scriptapi_isolated_find(a))\n"
|
||||||
|
"end\n"
|
||||||
|
"\n"
|
||||||
"function module.train_getname(a)\n"
|
"function module.train_getname(a)\n"
|
||||||
" return ffi.string(ns.scriptapi_train_getname(a))\n"
|
" return ffi.string(ns.scriptapi_train_getname(a))\n"
|
||||||
"end\n"
|
"end\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user