feat: expand editor scripting asset and viewport flow
This commit is contained in:
@@ -63,8 +63,19 @@ void ScriptEngine::SetRuntime(IScriptRuntime* runtime) {
|
||||
m_runtime = runtime ? runtime : &m_nullRuntime;
|
||||
}
|
||||
|
||||
void ScriptEngine::SetRuntimeFixedDeltaTime(float fixedDeltaTime) {
|
||||
if (fixedDeltaTime > 0.0f) {
|
||||
m_runtimeFixedDeltaTime = fixedDeltaTime;
|
||||
return;
|
||||
}
|
||||
|
||||
m_runtimeFixedDeltaTime = DefaultFixedDeltaTime;
|
||||
}
|
||||
|
||||
void ScriptEngine::OnRuntimeStart(Components::Scene* scene) {
|
||||
const float configuredFixedDeltaTime = m_runtimeFixedDeltaTime;
|
||||
OnRuntimeStop();
|
||||
m_runtimeFixedDeltaTime = configuredFixedDeltaTime;
|
||||
|
||||
if (!scene) {
|
||||
return;
|
||||
@@ -109,6 +120,7 @@ void ScriptEngine::OnRuntimeStop() {
|
||||
m_runtimeScene = nullptr;
|
||||
m_scriptStates.clear();
|
||||
m_scriptOrder.clear();
|
||||
m_runtimeFixedDeltaTime = DefaultFixedDeltaTime;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -125,6 +137,7 @@ void ScriptEngine::OnRuntimeStop() {
|
||||
m_scriptOrder.clear();
|
||||
m_runtimeRunning = false;
|
||||
m_runtimeScene = nullptr;
|
||||
m_runtimeFixedDeltaTime = DefaultFixedDeltaTime;
|
||||
m_runtime->OnRuntimeStop(stoppedScene);
|
||||
}
|
||||
|
||||
@@ -239,6 +252,33 @@ void ScriptEngine::OnScriptComponentDestroyed(ScriptComponent* component) {
|
||||
StopTrackingScript(*state, false);
|
||||
}
|
||||
|
||||
void ScriptEngine::OnScriptComponentClassChanged(ScriptComponent* component) {
|
||||
if (!component) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!m_runtimeRunning) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ScriptInstanceState* state = FindState(component)) {
|
||||
StopTrackingScript(*state, false);
|
||||
}
|
||||
|
||||
if (!component->HasScriptClass()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ScriptInstanceState* state = TrackScriptComponent(component);
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ShouldScriptRun(*state)) {
|
||||
EnsureScriptReady(*state, true);
|
||||
}
|
||||
}
|
||||
|
||||
bool ScriptEngine::HasTrackedScriptComponent(const ScriptComponent* component) const {
|
||||
return FindState(component) != nullptr;
|
||||
}
|
||||
@@ -248,6 +288,45 @@ bool ScriptEngine::HasRuntimeInstance(const ScriptComponent* component) const {
|
||||
return state && state->instanceCreated;
|
||||
}
|
||||
|
||||
bool ScriptEngine::TryGetAvailableScriptClasses(
|
||||
std::vector<ScriptClassDescriptor>& outClasses,
|
||||
const std::string& assemblyName) const {
|
||||
outClasses.clear();
|
||||
|
||||
std::vector<ScriptClassDescriptor> runtimeClasses;
|
||||
if (!m_runtime->TryGetAvailableScriptClasses(runtimeClasses)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
outClasses.reserve(runtimeClasses.size());
|
||||
for (const ScriptClassDescriptor& descriptor : runtimeClasses) {
|
||||
if (!assemblyName.empty() && descriptor.assemblyName != assemblyName) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (descriptor.className.empty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
outClasses.push_back(descriptor);
|
||||
}
|
||||
|
||||
std::sort(
|
||||
outClasses.begin(),
|
||||
outClasses.end(),
|
||||
[](const ScriptClassDescriptor& lhs, const ScriptClassDescriptor& rhs) {
|
||||
if (lhs.assemblyName != rhs.assemblyName) {
|
||||
return lhs.assemblyName < rhs.assemblyName;
|
||||
}
|
||||
if (lhs.namespaceName != rhs.namespaceName) {
|
||||
return lhs.namespaceName < rhs.namespaceName;
|
||||
}
|
||||
return lhs.className < rhs.className;
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScriptEngine::TrySetScriptFieldValue(
|
||||
ScriptComponent* component,
|
||||
const std::string& fieldName,
|
||||
|
||||
Reference in New Issue
Block a user