Meine Engine verwendet intern ein komponentenbasiertes Entitätssystem, und ich möchte es für die Skripterstellung an Lua binden.
Jetzt möchte ich Leute retten, die Skripte für die Schreibarbeit schreiben. In C ++ gehen Sie wie folgt vor, um die Position einer Entität festzulegen:
pEntity->GetComponent< CPoint >()->SetPos( Vector( X, Y ) );
Das heißt, wenn ich es an Lua 1: 1 binden würde, müssten Sie auch:
ent:GetComponent( CP_POINT ):SetPos( 123, 456 )
Aber seien wir ehrlich, möchten Sie so viel eingeben, nur um die Position eines Unternehmens festzulegen?
Ich glaube nicht, deshalb habe ich das Komponentensystem vor Lua "versteckt":
Was Sie jetzt tun, ist
ent:SetPos( 123, 456 )
Das Komponentenmaterial wird intern behandelt. Sie können Lua weiterhin manuell mit ent: AddComponent und ent: RemoveComponent usw. zu Lua hinzufügen und daraus entfernen.
Das scheint auch nicht perfekt zu sein:
Das Entity-Metatable wird unübersichtlich, da es alle Funktionen aller Komponenten übernehmen muss
Namensprobleme: Auch hier
ent:SetJointMotorEnabled()
scheint es irgendwie schlecht
Haben Sie Ideen, wie ich ein besseres Benennungsschema für Komponentenfunktionen finden könnte, ohne die Bequemlichkeit der Skripterstellung zu gefährden?
ent:"Point":SetPos(...)
... was fast wieder die erste Methode ist. Verwenden Sie möglicherweise die zweite Methode für allgemeine Komponenten?