Действительно зависит от того, как вы спроектировали свой двигатель. Это не могут быть просто фрагменты библиотек, которые отвечают за разные вещи, такие как рендеринг, звук, ввод и т. Д. У вас должен быть фрагмент, который объединяет их вместе. Основными двумя подходами являются граф сцены или компонентная модель. Это модуль, который объединит все это. Получите входные данные, передайте его сущности или компоненту, выполните некоторый сценарий, воспроизведите некоторые sfx, примените некоторое преобразование, отправьте преобразованную сущность в конвейер рендеринга. В этом потоке выполняет некоторый скрипт - это то, что вы хотите интегрировать. Есть много способов сделать это. Лучший способ сделать это, если эти скрипты приходят из вашего редактора. Они будут связаны с шаблонами сущностей, экземплярами сущностей, триггерами, элементами пользовательского интерфейса, устройствами ввода. Двигатель не должен знать ничего конкретного о сущностях. Их шаблоны должны быть определены в редакторе и снова размещены в мире с помощью редактора.
Редактировать: некоторые подробности.
Предполагая, что вы полностью хотите пропустить часть приложения, и все, что связано с игрой, записано в вашем редакторе. Тогда ваш движок должен иметь основной цикл, обновить и нарисовать вашу сцену. Простым началом является обновление, а затем нарисуйте свою сцену так быстро, как вы можете без каких-либо ожиданий в цикле.
Теперь при условии, что у вас есть модель компонента ... Каждый компонент будет иметь свое обновление, и это обновление - это код, который вы пишете. Вы должны создать некоторые интерфейсы, к которым ваши компоненты могут получить доступ из движка. Например, ваш шаблон компонента рисования будет иметь модель свойств и при его обновлении вызовет DrawModel на движке и передаст эту модель. Некоторый другой компонент геймпада потребуется от его обновления, чтобы запросить, какие кнопки были нажаты или отпущены. Некоторым также понадобится найти другие компоненты в сущности, чтобы она могла изменить положение или скорость физического компонента.
Вы должны начать писать базовые компоненты базовой сущности, и вы выясните, к чему у вас нет доступа из сценариев. И тогда вы должны выставить его на ваш слой сценариев. Но подумайте дважды, прежде чем раскрывать каждую функцию. Чем проще API, тем лучше.
Редактировать: Как скомпилировать скрипт во время выполнения
IronPython может оценивать код без компиляции, если у вас есть .NET-реализация JavaScript, держу пари, он тоже может это делать. Вот способ C # для компиляции вашего скрипта ... Если ваш редактор находится в C #, я предлагаю вам скомпилировать отдельные сборки в вашем редакторе.
private Assembly Compile(string fileName)
{
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
cp.TreatWarningsAsErrors = false;
CompilerResults cr = provider.CompileAssemblyFromFile(cp, fileName);
return cr.CompiledAssembly;
}