// Copyright Epic Games, Inc. All Rights Reserved. #ifdef NEW_DIRECTLINK_PLUGIN #include "DatasmithMaxDirectLink.h" #include "DatasmithExporterManager.h" #include "Logging/LogMacros.h" #include "Windows/AllowWindowsPlatformTypes.h" MAX_INCLUDES_START #include "impexp.h" #include "max.h" #include "maxscript/maxwrapper/mxsobjects.h" #include "maxscript/maxscript.h" #include "maxscript/foundation/numbers.h" #include "maxscript/foundation/arrays.h" #include "maxscript\macros\define_instantiation_functions.h" MAX_INCLUDES_END namespace DatasmithMaxDirectLink { /************************************* MaxScript exports *********************************/ Value* OnLoad_cf(Value**, int); Primitive OnLoad_pf(_M("Datasmith_OnLoad"), OnLoad_cf); Value* OnLoad_cf(Value **arg_list, int count) { check_arg_count(OnLoad, 2, count); Value* pEnableUI= arg_list[0]; Value* pEnginePath = arg_list[1]; bool bEnableUI = pEnableUI->to_bool(); const TCHAR* EnginePathUnreal = (const TCHAR*)pEnginePath->to_string(); if (CreateExporter(bEnableUI, EnginePathUnreal)) { return &false_value; } GetExporter()->ParseScene(); return bool_result(true); } Value* OnUnload_cf(Value**, int); Primitive OnUnload_pf(_M("Datasmith_OnUnload"), OnUnload_cf); Value* OnUnload_cf(Value **arg_list, int count) { check_arg_count(OnUnload, 0, count); ShutdownExporter(); return bool_result(true); } Value* SetOutputPath_cf(Value**, int); Primitive SetOutputPath_pf(_M("Datasmith_SetOutputPath"), SetOutputPath_cf); Value* SetOutputPath_cf(Value** arg_list, int count) { check_arg_count(CreateScene, 1, count); Value* pOutputPath = arg_list[0]; GetExporter()->SetOutputPath(pOutputPath->to_string()); return bool_result(true); } Value* CreateScene_cf(Value**, int); Primitive CreateScene_pf(_M("Datasmith_CreateScene"), CreateScene_cf); Value* CreateScene_cf(Value** arg_list, int count) { check_arg_count(CreateScene, 1, count); Value* pName = arg_list[0]; GetExporter()->SetName(pName->to_string()); return bool_result(true); } Value* UpdateScene_cf(Value**, int); Primitive UpdateScene_pf(_M("Datasmith_UpdateScene"), UpdateScene_cf); Value* UpdateScene_cf(Value** arg_list, int count) { check_arg_count_with_keys(UpdateScene, 0, count); bool bQuiet = key_arg_or_default(quiet, &false_value)->to_bool(); if(!GetExporter()) { return bool_result(false); } bool bResult = GetExporter()->UpdateScene(bQuiet); return bool_result(bResult); } Value* Export_cf(Value**, int); Primitive Export_pf(_M("Datasmith_Export"), Export_cf); Value* Export_cf(Value** arg_list, int count) { check_arg_count_with_keys(Export, 2, count); Value* pName = arg_list[0]; Value* pOutputPath = arg_list[1]; bool bQuiet = key_arg_or_default(quiet, &false_value)->to_bool(); bool bResult = Export(pName->to_string(), pOutputPath->to_string(), bQuiet);; return bool_result(bResult); } Value* Reset_cf(Value**, int); Primitive Reset_pf(_M("Datasmith_Reset"), Reset_cf); Value* Reset_cf(Value** arg_list, int count) { check_arg_count(Reset, 0, count); if (!GetExporter()) { return bool_result(false); } GetExporter()->Reset(); return bool_result(true); } Value* StartSceneChangeTracking_cf(Value**, int); Primitive StartSceneChangeTracking_pf(_M("Datasmith_StartSceneChangeTracking"), StartSceneChangeTracking_cf); Value* StartSceneChangeTracking_cf(Value** arg_list, int count) { check_arg_count(StartSceneChangeTracking, 0, count); GetExporter()->StartSceneChangeTracking(); return bool_result(true); } Value* DirectLinkInitializeForScene_cf(Value** arg_list, int count) { check_arg_count(DirectLinkInitializeForScene, 0, count); GetExporter()->InitializeDirectLinkForScene(); return bool_result(true); } Primitive DirectLinkInitializeForScene_pf(_M("Datasmith_DirectLinkInitializeForScene"), DirectLinkInitializeForScene_cf); Value* DirectLinkUpdateScene_cf(Value** arg_list, int count) { check_arg_count(DirectLinkUpdateScene, 0, count); LogDebug(TEXT("DirectLink::UpdateScene: start")); GetExporter()->UpdateDirectLinkScene(); LogDebug(TEXT("DirectLink::UpdateScene: done")); return bool_result(true); } Primitive DirectLinkUpdateScene_pf(_M("Datasmith_DirectLinkUpdateScene"), DirectLinkUpdateScene_cf); Value* OpenDirectlinkUi_cf(Value** arg_list, int count) { check_arg_count(OpenDirectlinkUi, 0, count); return bool_result(OpenDirectLinkUI()); } Primitive OpenDirectlinkUi_pf(_M("Datasmith_OpenDirectlinkUi"), OpenDirectlinkUi_cf); Value* GetDirectlinkCacheDirectory_cf(Value** arg_list, int count) { check_arg_count(GetDirectlinkCacheDirectory, 0, count); const TCHAR* Path = GetDirectlinkCacheDirectory(); if (Path) { return new String(Path); } return &undefined; } Primitive GetDirectlinkCacheDirectory_pf(_M("Datasmith_GetDirectlinkCacheDirectory"), GetDirectlinkCacheDirectory_cf); Value* LogFlush_cf(Value** arg_list, int count) { LogFlush(); return &undefined; } Primitive LogFlush_pf(_M("Datasmith_LogFlush"), LogFlush_cf); Value* Crash_cf(Value** arg_list, int count) { volatile int* P; P = nullptr; *P = 666; return &undefined; } Primitive Crash_pf(_M("Datasmith_Crash"), Crash_cf); Value* LogInfo_cf(Value** arg_list, int count) { check_arg_count(CreateScene, 1, count); Value* Message = arg_list[0]; LogInfo(Message->to_string()); return bool_result(true); } Primitive LogInfo_pf(_M("Datasmith_LogInfo"), LogInfo_cf); } #include "Windows/HideWindowsPlatformTypes.h" #endif // NEW_DIRECTLINK_PLUGIN