mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 09:59:18 +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
|
||||
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 ) ) {
|
||||
// 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
|
||||
++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki
|
||||
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 ) {
|
||||
// doliczenie losowego czasu opóźnienia
|
||||
Event->fStartTime += Event->fRandomDelay * Random( 10000 ) * 0.0001;
|
||||
|
||||
2
Event.h
2
Event.h
@@ -140,7 +140,7 @@ public:
|
||||
FindEvent( std::string const &Name );
|
||||
// legacy method, inserts specified event in the event query
|
||||
bool
|
||||
AddToQuery( TEvent *Event, TDynamicObject *Owner );
|
||||
AddToQuery( TEvent *Event, TDynamicObject *Owner, double delay = 0.0 );
|
||||
// legacy method, executes queued events
|
||||
bool
|
||||
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
|
||||
TIsolated *p = pRoot;
|
||||
while (p)
|
||||
@@ -92,6 +92,8 @@ TIsolated * TIsolated::Find(std::string const &n)
|
||||
return p;
|
||||
p = p->pNext;
|
||||
}
|
||||
if (!create)
|
||||
return nullptr;
|
||||
pRoot = new TIsolated(n, pRoot); // BUG: source of a memory leak
|
||||
return pRoot;
|
||||
};
|
||||
|
||||
2
Track.h
2
Track.h
@@ -102,7 +102,7 @@ public:
|
||||
TIsolated(const std::string &n, TIsolated *i);
|
||||
// methods
|
||||
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
|
||||
bool Busy() {
|
||||
return (iAxles > 0); };
|
||||
|
||||
25
lua.cpp
25
lua.cpp
@@ -65,13 +65,14 @@ int lua::openffi(lua_State *s)
|
||||
|
||||
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();
|
||||
event->bEnabled = true;
|
||||
event->Type = tp_Lua;
|
||||
event->asName = std::string(name);
|
||||
event->fDelay = delay;
|
||||
event->fRandomDelay = randomdelay;
|
||||
event->Params[0].asPointer = (void*)handler;
|
||||
if (simulation::Events.insert(event))
|
||||
return event;
|
||||
@@ -108,6 +109,24 @@ extern "C"
|
||||
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)
|
||||
{
|
||||
if (e)
|
||||
@@ -122,10 +141,10 @@ extern "C"
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
EXPORT void scriptapi_event_dispatch(TEvent *e, TDynamicObject *activator)
|
||||
EXPORT void scriptapi_event_dispatch(TEvent *e, TDynamicObject *activator, double delay)
|
||||
{
|
||||
if (e)
|
||||
simulation::Events.AddToQuery(e, activator);
|
||||
simulation::Events.AddToQuery(e, activator, delay);
|
||||
}
|
||||
|
||||
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"
|
||||
"typedef struct TEvent TEvent;\n"
|
||||
"typedef struct TTrack TTrack;\n"
|
||||
"typedef struct TIsolated TIsolated;\n"
|
||||
"typedef struct TDynamicObject TDynamicObject;\n"
|
||||
"typedef struct TMemCell TMemCell;\n"
|
||||
"typedef struct memcell_values memcell_values;\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"
|
||||
"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"
|
||||
"TTrack* scriptapi_track_find(const char* name);\n"
|
||||
"bool scriptapi_track_isoccupied(TTrack *track);\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"
|
||||
"void scriptapi_dynobj_putvalues(TDynamicObject *dyn, const char *str, double num1, double num2);\n"
|
||||
"\n"
|
||||
@@ -37,8 +41,8 @@ const char lua_ffi[] = "local ffi = require(\"ffi\")\n"
|
||||
" return ffi.string(ns.scriptapi_event_getname(a))\n"
|
||||
"end\n"
|
||||
"module.event_dispatch = ns.scriptapi_event_dispatch\n"
|
||||
"function module.event_dispatch_n(a, b)\n"
|
||||
" ns.scriptapi_event_dispatch(ns.scriptapi_event_find(a), b)\n"
|
||||
"function module.event_dispatch_n(a, b, c)\n"
|
||||
" ns.scriptapi_event_dispatch(ns.scriptapi_event_find(a), b, c)\n"
|
||||
"end\n"
|
||||
"\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"
|
||||
"end\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"
|
||||
" return ffi.string(ns.scriptapi_train_getname(a))\n"
|
||||
"end\n"
|
||||
|
||||
Reference in New Issue
Block a user