void ScriptSelection::internal_PingSceneObject(MonoObject* so) { ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(so); HSceneObject soHandle = static_object_cast<SceneObject>(scriptSO->getNativeHandle()); Selection::instance().ping(soHandle); }
MonoObject* ScriptUndoRedo::internal_CloneSO(ScriptSceneObject* soPtr, MonoString* description) { WString nativeDescription = MonoUtil::monoToWString(description); HSceneObject clone = CmdCloneSO::execute(soPtr->getNativeSceneObject(), nativeDescription); ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(clone); return cloneSoPtr->getManagedInstance(); }
MonoObject* ScriptPrefab::internal_Instantiate(ScriptPrefab* thisPtr) { HPrefab prefab = thisPtr->getHandle(); HSceneObject instance = prefab->instantiate(); ScriptSceneObject* scriptInstance = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(instance); return scriptInstance->getManagedInstance(); }
void ScriptEditorUtility::internal_CalculateBounds(MonoObject* so, AABox* bounds) { ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(so); if (scriptSO != nullptr) *bounds = EditorUtility::calculateBounds(static_object_cast<SceneObject>(scriptSO->getNativeHandle())); else *bounds = AABox(); }
MonoObject* ScriptUndoRedo::internal_Instantiate(ScriptPrefab* prefabPtr, MonoString* description) { HPrefab prefab = prefabPtr->getHandle(); if (!prefab.isLoaded()) return nullptr; WString nativeDescription = MonoUtil::monoToWString(description); HSceneObject clone = CmdInstantiateSO::execute(prefab, nativeDescription); ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(clone); return cloneSoPtr->getManagedInstance(); }
MonoArray* ScriptSceneObjectDragDropData::internal_GetObjects(ScriptSceneObjectDragDropData* instance) { ScriptArray objectsArray = ScriptArray::create<ScriptSceneObject>((UINT32)instance->mSceneObjects.size()); for (UINT32 i = 0; i < (UINT32)instance->mSceneObjects.size(); i++) { ScriptSceneObject* scriptSO = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(instance->mSceneObjects[i]); if (scriptSO != nullptr) objectsArray.set(i, scriptSO->getManagedInstance()); } return objectsArray.getInternal(); }
void ScriptSceneObjectDragDropData::internal_CreateInstance(MonoObject* managedInstance, MonoArray* objects) { ScriptArray objectsArray = ScriptArray(objects); Vector<HSceneObject> sceneObjects(objectsArray.size()); for (UINT32 i = 0; i < objectsArray.size(); i++) { ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(objectsArray.get<MonoObject*>(i)); if (scriptSO != nullptr) sceneObjects[i] = scriptSO->getNativeSceneObject(); } new (bs_alloc<ScriptSceneObjectDragDropData>()) ScriptSceneObjectDragDropData(managedInstance, sceneObjects); }
MonoObject* ScriptSceneObject::internal_findChild(ScriptSceneObject* nativeInstance, MonoString* name, bool recursive) { if (checkIfDestroyed(nativeInstance)) return nullptr; String nativeName = MonoUtil::monoToString(name); HSceneObject child = nativeInstance->getNativeSceneObject()->findChild(nativeName, recursive); if (child == nullptr) return nullptr; ScriptSceneObject* scriptChild = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(child); return scriptChild->getManagedInstance(); }
MonoObject* ScriptSceneObject::internal_getParent(ScriptSceneObject* nativeInstance) { if (checkIfDestroyed(nativeInstance)) return nullptr; HSceneObject parent = nativeInstance->mSceneObject->getParent(); if (parent != nullptr) { ScriptSceneObject* parentScriptSO = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(parent); return parentScriptSO->getManagedInstance(); } return nullptr; }
MonoObject* ScriptPrefabUtility::internal_getPrefabParent(ScriptSceneObject* nativeInstance) { if (ScriptSceneObject::checkIfDestroyed(nativeInstance)) return nullptr; HSceneObject so = nativeInstance->getNativeSceneObject(); HSceneObject parent = so->getPrefabParent(); if(parent != nullptr) { ScriptSceneObject* scriptParent = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(parent); return scriptParent->getManagedInstance(); } return nullptr; }
void ScriptUndoRedo::internal_ReparentSOMulti(MonoArray* soPtrs, ScriptSceneObject* parentSOPtr, MonoString* description) { HSceneObject parent; if (parentSOPtr != nullptr) parent = parentSOPtr->getNativeSceneObject(); WString nativeDescription = MonoUtil::monoToWString(description); ScriptArray input(soPtrs); for (UINT32 i = 0; i < input.size(); i++) { ScriptSceneObject* soPtr = input.get<ScriptSceneObject*>(i); HSceneObject so = soPtr->getNativeSceneObject(); CmdReparentSO::execute(so, parent, nativeDescription); } }
void ScriptSelection::internal_GetSceneObjectSelection(MonoArray** selection) { Vector<HSceneObject> sceneObjects = Selection::instance().getSceneObjects(); ::MonoClass* sceneObjectMonoClass = ScriptSceneObject::getMetaData()->scriptClass->_getInternalClass(); ScriptArray sceneObjectArray(sceneObjectMonoClass, (UINT32)sceneObjects.size()); for (UINT32 i = 0; i < (UINT32)sceneObjects.size(); i++) { ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObjects[i]); MonoObject* sceneMonoObject = scriptSceneObject->getManagedInstance(); sceneObjectArray.set(i, sceneMonoObject); } *selection = sceneObjectArray.getInternal(); }
void ScriptGUISceneTreeView::resourceDropped(const HSceneObject& parent, const Vector<Path>& resourcePaths) { MonoObject* sceneMonoObject = nullptr; if (parent != nullptr) { ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(parent); sceneMonoObject = scriptSceneObject->getManagedInstance(); } UINT32 numPaths = (UINT32)resourcePaths.size(); ScriptArray array = ScriptArray::create<WString>(numPaths); for (UINT32 i = 0; i < numPaths; i++) array.set(i, resourcePaths[i].toWString()); MonoUtil::invokeThunk(onResourceDroppedThunk, getManagedInstance(), sceneMonoObject, array.getInternal()); }
void ScriptEditorUtility::internal_CalculateArrayCenter(MonoArray* objects, Vector3* center) { Vector<HSceneObject> sceneObjects; ScriptArray scriptArray(objects); UINT32 arrayLen = scriptArray.size(); for (UINT32 i = 0; i < arrayLen; i++) { MonoObject* curObject = scriptArray.get<MonoObject*>(i); ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(curObject); if (scriptSO != nullptr) sceneObjects.push_back(static_object_cast<SceneObject>(scriptSO->getNativeHandle())); } *center = EditorUtility::calculateCenter(sceneObjects); }
MonoObject* ScriptSceneObjectDragDropData::create(const Vector<HSceneObject>& sceneObjects) { ScriptArray arrSceneObjects = ScriptArray::create<ScriptSceneObject>((UINT32)sceneObjects.size()); UINT32 idx = 0; for (auto& so : sceneObjects) { ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(so); arrSceneObjects.set(idx, scriptSceneObject->getManagedInstance()); idx++; } void* params[1] = { arrSceneObjects.getInternal() }; MonoObject* instance = metaData.scriptClass->createInstance(params, 1); return instance; }
MonoArray* ScriptUndoRedo::internal_CloneSOMulti(MonoArray* soPtrs, MonoString* description) { WString nativeDescription = MonoUtil::monoToWString(description); ScriptArray input(soPtrs); ScriptArray output = ScriptArray::create<ScriptSceneObject>(input.size()); for (UINT32 i = 0; i < input.size(); i++) { ScriptSceneObject* soPtr = input.get<ScriptSceneObject*>(i); HSceneObject clone = CmdCloneSO::execute(soPtr->getNativeSceneObject(), nativeDescription); ScriptSceneObject* cloneSoPtr = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(clone); output.set(i, cloneSoPtr->getManagedInstance()); } return output.getInternal(); }
MonoObject* ScriptSceneObject::internal_getChild(ScriptSceneObject* nativeInstance, UINT32 idx) { if (checkIfDestroyed(nativeInstance)) return nullptr; UINT32 numChildren = nativeInstance->mSceneObject->getNumChildren(); if(idx >= numChildren) { LOGWRN("Attempting to access an out of range SceneObject child. Provided index: \"" + toString(idx) + "\". Valid range: [0 .. " + toString(numChildren) + ")"); return nullptr; } HSceneObject childSO = nativeInstance->mSceneObject->getChild(idx); ScriptSceneObject* childScriptSO = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(childSO); return childScriptSO->getManagedInstance(); }
void ScriptSelection::onSelectionChanged(const Vector<HSceneObject>& sceneObjects, const Vector<Path>& resPaths) { UINT32 numObjects = (UINT32)sceneObjects.size(); ScriptArray scriptObjects = ScriptArray::create<ScriptSceneObject>(numObjects); for (UINT32 i = 0; i < numObjects; i++) { ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObjects[i]); scriptObjects.set(i, scriptSceneObject->getManagedInstance()); } UINT32 numPaths = (UINT32)resPaths.size(); ScriptArray scriptPaths = ScriptArray::create<String>(numPaths); for (UINT32 i = 0; i < numPaths; i++) scriptPaths.set(i, resPaths[i].toString()); MonoArray* monoObjects = scriptObjects.getInternal(); MonoArray* monoPaths = scriptPaths.getInternal(); MonoUtil::invokeThunk(OnSelectionChangedThunk, monoObjects, monoPaths); }
void ScriptSelection::internal_SetSceneObjectSelection(MonoArray* selection) { Vector<HSceneObject> sceneObjects; if (selection != nullptr) { ScriptArray scriptArray(selection); UINT32 arrayLen = scriptArray.size(); for (UINT32 i = 0; i < arrayLen; i++) { MonoObject* monoSO = scriptArray.get<MonoObject*>(i); ScriptSceneObject* scriptSO = ScriptSceneObject::toNative(monoSO); if (scriptSO == nullptr) continue; HSceneObject so = static_object_cast<SceneObject>(scriptSO->getNativeHandle()); sceneObjects.push_back(so); } } Selection::instance().setSceneObjects(sceneObjects); }
MonoArray* ScriptSceneObject::internal_findChildren(ScriptSceneObject* nativeInstance, MonoString* name, bool recursive) { if (checkIfDestroyed(nativeInstance)) { ScriptArray emptyArray = ScriptArray::create<ScriptSceneObject>(0); return emptyArray.getInternal(); } String nativeName = MonoUtil::monoToString(name); Vector<HSceneObject> children = nativeInstance->getNativeSceneObject()->findChildren(nativeName, recursive); UINT32 numChildren = (UINT32)children.size(); ScriptArray output = ScriptArray::create<ScriptSceneObject>(numChildren); for (UINT32 i = 0; i < numChildren; i++) { HSceneObject child = children[i]; ScriptSceneObject* scriptChild = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(child); output.set(i, scriptChild->getManagedInstance()); } return output.getInternal(); }
void ScriptSelection::onSceneObjectPing(const HSceneObject& sceneObject) { ScriptSceneObject* scriptSceneObject = ScriptGameObjectManager::instance().getOrCreateScriptSceneObject(sceneObject); MonoUtil::invokeThunk(OnPingSceneObjectThunk, scriptSceneObject->getManagedInstance()); }