Merged develop

--HG--
branch : dfighter-tools
This commit is contained in:
dfighter1985 2014-09-19 20:10:00 +02:00
commit 447aac5821
8 changed files with 1040 additions and 139 deletions

View file

@ -234,10 +234,6 @@ CDriverGL::CDriverGL()
_CursorScale = 1.f; _CursorScale = 1.f;
_MouseCaptured = false; _MouseCaptured = false;
#if defined(NL_OS_WINDOWS)
_BorderlessFullscreen = false;
#endif
_NeedToRestaureGammaRamp = false; _NeedToRestaureGammaRamp = false;
_win = EmptyWindow; _win = EmptyWindow;

View file

@ -996,12 +996,6 @@ private:
EWindowStyle getWindowStyle() const; EWindowStyle getWindowStyle() const;
bool setWindowStyle(EWindowStyle windowStyle); bool setWindowStyle(EWindowStyle windowStyle);
#if defined(NL_OS_WINDOWS)
static BOOL CALLBACK monitorEnumProcFullscreen(HMONITOR hMonitor, HDC, LPRECT, LPARAM dwData);
bool _BorderlessFullscreen;
#endif
std::string _CurrentDisplayDevice;
// Methods to manage screen resolutions // Methods to manage screen resolutions
bool restoreScreenMode(); bool restoreScreenMode();
bool saveScreenMode(); bool saveScreenMode();

View file

@ -1271,86 +1271,10 @@ static sint modeInfoToFrequency(XF86VidModeModeInfo *info)
// *************************************************************************** // ***************************************************************************
#if defined(NL_OS_WINDOWS)
struct CMonitorEnumParams
{
public:
CDriverGL *Driver;
const char *DeviceName;
bool Success;
};
BOOL CALLBACK CDriverGL::monitorEnumProcFullscreen(HMONITOR hMonitor, HDC, LPRECT, LPARAM dwData)
{
CMonitorEnumParams *p = reinterpret_cast<CMonitorEnumParams *>(dwData);
MONITORINFOEXA monitorInfo;
memset(&monitorInfo, 0, sizeof(monitorInfo));
monitorInfo.cbSize = sizeof(monitorInfo);
GetMonitorInfoA(hMonitor, &monitorInfo);
nldebug("3D: Monitor: '%s'", monitorInfo.szDevice);
size_t devLen = strlen(monitorInfo.szDevice);
size_t targetLen = strlen(p->DeviceName);
nlassert(devLen < 32);
size_t minLen = min(devLen, targetLen);
if (!memcmp(monitorInfo.szDevice, p->DeviceName, minLen))
{
if (devLen == targetLen
|| (devLen < targetLen && (p->DeviceName[minLen] == '\\'))
|| (devLen > targetLen && (monitorInfo.szDevice[minLen] == '\\')))
{
nldebug("3D: Remapping '%s' to '%s'", p->DeviceName, monitorInfo.szDevice);
nldebug("3D: Found requested monitor at %i, %i", monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.top);
p->Driver->_CurrentMode.Windowed = false;
p->Driver->setWindowStyle(CDriverGL::EWSWindowed);
p->Driver->setWindowSize(monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top);
LONG dwStyle = GetWindowLong(p->Driver->_win, GWL_STYLE);
SetWindowLong(p->Driver->_win, GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW);
SetWindowPos(p->Driver->_win, NULL,
monitorInfo.rcMonitor.left,
monitorInfo.rcMonitor.top,
monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left,
monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top,
SWP_FRAMECHANGED);
p->Driver->_WindowX = monitorInfo.rcMonitor.left;
p->Driver->_WindowY = monitorInfo.rcMonitor.top;
p->Driver->_CurrentDisplayDevice = std::string(p->DeviceName);
p->Driver->_BorderlessFullscreen = true;
p->Driver->_CurrentMode.Windowed = false;
p->Success = true;
return FALSE;
}
}
p->Success = false;
return TRUE; // continue
};
#endif
// ***************************************************************************
bool CDriverGL::setScreenMode(const GfxMode &mode) bool CDriverGL::setScreenMode(const GfxMode &mode)
{ {
H_AUTO_OGL(CDriverGL_setScreenMode) H_AUTO_OGL(CDriverGL_setScreenMode)
nldebug("3D: setScreenMode");
#if defined(NL_OS_WINDOWS)
if (_BorderlessFullscreen)
{
_BorderlessFullscreen = false;
LONG dwStyle = GetWindowLong(_win, GWL_STYLE);
dwStyle |= WS_OVERLAPPEDWINDOW;
if (!_Resizable) dwStyle ^= WS_MAXIMIZEBOX|WS_THICKFRAME;
SetWindowLong(_win, GWL_STYLE, dwStyle);
SetWindowPos(_win, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
_CurrentMode.Windowed = true;
}
#endif
if (mode.Windowed) if (mode.Windowed)
{ {
// if fullscreen, switch back to desktop screen mode // if fullscreen, switch back to desktop screen mode
@ -1360,17 +1284,13 @@ bool CDriverGL::setScreenMode(const GfxMode &mode)
return true; return true;
} }
if (_CurrentDisplayDevice != mode.DisplayDevice)
restoreScreenMode();
// save previous screen mode only if switching from windowed to fullscreen // save previous screen mode only if switching from windowed to fullscreen
if (_CurrentMode.Windowed) if (_CurrentMode.Windowed)
saveScreenMode(); saveScreenMode();
// if switching exactly to the same screen mode, doesn't change it // if switching exactly to the same screen mode, doesn't change it
GfxMode previousMode; GfxMode previousMode;
if (_CurrentDisplayDevice == mode.DisplayDevice if (getCurrentScreenMode(previousMode)
&& getCurrentScreenMode(previousMode)
&& mode.Width == previousMode.Width && mode.Width == previousMode.Width
&& mode.Height == previousMode.Height && mode.Height == previousMode.Height
&& mode.Depth == previousMode.Depth && mode.Depth == previousMode.Depth
@ -1379,9 +1299,7 @@ bool CDriverGL::setScreenMode(const GfxMode &mode)
#if defined(NL_OS_WINDOWS) #if defined(NL_OS_WINDOWS)
const char *deviceName = mode.DisplayDevice.c_str(); DEVMODE devMode;
DEVMODEA devMode;
memset(&devMode, 0, sizeof(DEVMODE)); memset(&devMode, 0, sizeof(DEVMODE));
devMode.dmSize = sizeof(DEVMODE); devMode.dmSize = sizeof(DEVMODE);
devMode.dmDriverExtra = 0; devMode.dmDriverExtra = 0;
@ -1389,42 +1307,22 @@ bool CDriverGL::setScreenMode(const GfxMode &mode)
devMode.dmPelsWidth = mode.Width; devMode.dmPelsWidth = mode.Width;
devMode.dmPelsHeight = mode.Height; devMode.dmPelsHeight = mode.Height;
if (mode.Depth > 0) if(mode.Depth > 0)
{ {
devMode.dmBitsPerPel = mode.Depth; devMode.dmBitsPerPel = mode.Depth;
devMode.dmFields |= DM_BITSPERPEL; devMode.dmFields |= DM_BITSPERPEL;
} }
if (mode.Frequency > 0) if(mode.Frequency > 0)
{ {
devMode.dmDisplayFrequency = mode.Frequency; devMode.dmDisplayFrequency = mode.Frequency;
devMode.dmFields |= DM_DISPLAYFREQUENCY; devMode.dmFields |= DM_DISPLAYFREQUENCY;
} }
if (deviceName[0]) if (ChangeDisplaySettings(&devMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{ {
// First attempt exclusive fullscreen nlwarning("3D: Fullscreen mode switch failed");
nldebug("3D: ChangeDisplaySettingsEx"); return false;
LONG resex;
if ((resex = ChangeDisplaySettingsExA(deviceName, &devMode, NULL, CDS_FULLSCREEN, NULL)) != DISP_CHANGE_SUCCESSFUL)
{
nlwarning("3D: Fullscreen mode switch failed (%i)", (sint)resex);
// Workaround, resize to monitor and make borderless
CMonitorEnumParams p;
p.DeviceName = deviceName;
p.Driver = this;
EnumDisplayMonitors(NULL, NULL, monitorEnumProcFullscreen, (LPARAM)&p);
return p.Success;
}
}
else
{
nldebug("3D: ChangeDisplaySettings");
if (ChangeDisplaySettingsA(&devMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
nlwarning("3D: Fullscreen mode switch failed");
return false;
}
} }
#elif defined(NL_OS_MAC) #elif defined(NL_OS_MAC)
@ -1830,11 +1728,7 @@ bool CDriverGL::setWindowStyle(EWindowStyle windowStyle)
dwNewStyle |= WS_VISIBLE; dwNewStyle |= WS_VISIBLE;
if (dwStyle != dwNewStyle) if (dwStyle != dwNewStyle)
{
SetWindowLong(_win, GWL_STYLE, dwNewStyle); SetWindowLong(_win, GWL_STYLE, dwNewStyle);
if (windowStyle == EWSWindowed)
SetWindowPos(_win, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
}
// if (windowStyle == EWSMaximized && isVisible && !isMaximized) // if (windowStyle == EWSMaximized && isVisible && !isMaximized)
// ShowWindow(_hWnd, SW_SHOWMAXIMIZED); // ShowWindow(_hWnd, SW_SHOWMAXIMIZED);
@ -1962,24 +1856,19 @@ bool CDriverGL::setMode(const GfxMode& mode)
&& ScreenToClient(_win, &cursorPos); && ScreenToClient(_win, &cursorPos);
sint curX = (sint)cursorPos.x * (sint)mode.Width; sint curX = (sint)cursorPos.x * (sint)mode.Width;
sint curY = (sint)cursorPos.y * (sint)mode.Height; sint curY = (sint)cursorPos.y * (sint)mode.Height;
if (_BorderlessFullscreen)
ReleaseCapture();
#endif #endif
if (!setScreenMode(mode)) if (!setScreenMode(mode))
return false; return false;
if (!_BorderlessFullscreen) // when changing window style, it's possible system change window size too
{ setWindowStyle(mode.Windowed ? EWSWindowed : EWSFullscreen);
// when changing window style, it's possible system change window size too
setWindowStyle(mode.Windowed ? EWSWindowed : EWSFullscreen);
if (!mode.Windowed) if (!mode.Windowed)
_CurrentMode.Depth = mode.Depth; _CurrentMode.Depth = mode.Depth;
setWindowSize(mode.Width, mode.Height); setWindowSize(mode.Width, mode.Height);
setWindowPos(_WindowX, _WindowY); setWindowPos(_WindowX, _WindowY);
}
switch (_CurrentMode.Depth) switch (_CurrentMode.Depth)
{ {
@ -1996,8 +1885,6 @@ bool CDriverGL::setMode(const GfxMode& mode)
cursorPos.y = curY / (sint)mode.Height; cursorPos.y = curY / (sint)mode.Height;
ClientToScreen(_win, &cursorPos); ClientToScreen(_win, &cursorPos);
SetCursorPos(cursorPos.x, cursorPos.y); SetCursorPos(cursorPos.x, cursorPos.y);
if (_BorderlessFullscreen)
SetCapture(_win);
} }
#endif #endif

View file

@ -0,0 +1,378 @@
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
fn findFile dir fileName =
(
if (doesFileExist (dir + "\\" + fileName)) then
(
return (dir + "\\" + fileName)
)
dirArr = GetDirectories (dir + "\\*")
for d in dirArr do
(
local fileFound = findFile d fileName
if (fileFound != "") then
return fileFound
)
return ""
)
fn getFixedPath ps =
(
if not (doesFileExist ps) then
(
local fileName = filenameFromPath ps
local fileFound = findFile "W:\\database\\sfx" fileName
if (fileFound != "") then
return fileFound
else
return fileName
)
else
(
return ps
)
)
fn renameParticleSystem ps =
(
local newFileName = getFixedPath ps.ps_file_name
if (newFileName != ps.ps_file_name) then
(
ps.ps_file_name = newFileName
return 1
)
else
(
return 0
)
)
rollout assets_ps_rollout "Properties"
(
fn do_it =
(
local result = 0
for m in getClassInstances nel_ps do
(
if (renameParticleSystem m) == 1 then
result = 1
)
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return result
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occured, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Open the max project
if loadMaxFile file quiet:true == true then
(
objXRefMgr.UpdateAllRecords()
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_ps_floater = newRolloutFloater "NeL Assets PS Database" 550 400
addrollout assets_ps_rollout assets_ps_floater rolledUp:false

View file

@ -0,0 +1,329 @@
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
rollout assets_resave_rollout "Properties"
(
fn do_it =
(
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return 1
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occured, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Open the max project
if loadMaxFile file quiet:true == true then
(
origAnimStart = animationRange.start
origAnimEnd = animationRange.end
origFrameRate = frameRate
resetMAXFile #noprompt
animationRange = interval origAnimStart origAnimEnd
frameRate = origFrameRate
-- Merge the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_resave_floater = newRolloutFloater "NeL Assets Resave Database" 550 874
addrollout assets_resave_rollout assets_resave_floater rolledUp:false

View file

@ -0,0 +1,316 @@
NEL3D_APPDATA_INTERFACE_FILE = 1423062700
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "W:/database/conversion.log"
nlErrorStream = openFile nlErrorFilename mode:"w"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Log a message
fn nllog message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
include "nel_utility.ms"
rollout assets_resave_rollout "Properties"
(
fn do_it =
(
max select none
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "40807" -- Views: Activate All Maps
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
max views redraw
return 1
)
-- This script is a base script to include to add multiple functionality to your script
-- To use this script
-- Include it in your script into the rollout at the beginning.
-- Implement a do_it function to do the job in your rollout.
-- The function should retun -1 if an arror occured, else the count of modification done
-- It the function returns <1, the project will not be overwritten
Group "Running properties"
(
RadioButtons SourceFiles "Source projects" labels:#("Current project", "All Projects in a folder") align:#left
Label DirectoryLabel "Source directory" align:#left
EditText Directory "" width:500 align:#left enabled:false
Button BrowseDirectory "Browse..." align:#left enabled:false
CheckBox Recurse "Look in subfolders" checked:true enabled:false
CheckBox Test "Test only, do not save" checked:false enabled:false
CheckBox BackupFiles "Backup files" checked:false enabled:false
CheckBox StopOnError "Stop on error" checked:false enabled:false
CheckBox UseTag "Use tag" checked:false enabled:false
Label ProgressText width:500 align:#left
ProgressBar Progress width:500 align:#left
Button GoButton "Go" width:500 align:#left
)
local countModifications
local countErrors
local fileModified
local fileParsed
fn UpdateData =
(
if SourceFiles.state == 2 then
isSourceDir = true
else
isSourceDir = false
if Test.checked == true then
isTest = true
else
isTest = false
Directory.enabled = isSourceDir
BrowseDirectory.enabled = isSourceDir
Recurse.enabled = isSourceDir
Test.enabled = isSourceDir
BackupFiles.enabled = isSourceDir and (isTest == false)
StopOnError.enabled = isSourceDir
UseTag.enabled = isSourceDir
)
on SourceFiles changed state do
(
UpdateData ()
)
on Test changed state do
(
UpdateData ()
)
fn call_do_it =
(
local result
-- One more project
fileParsed = fileParsed + 1
-- Call it
result = do_it ()
-- Error ?
if result < 0 then
countErrors = countErrors + 1
else
countModifications = countModifications + result
-- Return result
return result
)
fn BackupFile file =
(
local i
local newFilename
i = 0
while true do
(
-- New file name
newFilename = file + ".backup_" + (i as string)
-- File exist ?
if (fileExist newFilename) == false then
(
if (copyFile file newFilename) == false then
return false
else
return true
)
i = i + 1
)
)
fn RecurseFolder currentDirectory =
(
resetMAXFile #noprompt
local result
local file
local files
local origAnimStart
local origAnimEnd
local origFrameRate
-- Parse files
files = getFiles (currentDirectory+"/*.max")
-- For each files
for i = 1 to files.count do
(
-- File name
file = files[i]
-- Progress bar
ProgressText.text = "In directory "+currentDirectory+", compute file \"" + (getFilenameFile file) + "\""
Progress.value = i*100/files.count
if (UseTag.checked == false) or ((NeLTestFileDate file "W:/database/conversion.tag") == true) then
(
resetMAXFile #noprompt
nllog("CONVERT " + file)
-- Merge the max project
if mergeMaxFile file quiet:true == true then
(
result = call_do_it ()
-- Error ?
if result < 0 then
(
if StopOnError.checked == true then
Messagebox ("Error in file " + file)
)
else
(
-- Save the max project ?
if (Test.checked == false) and (result != 0) then
(
-- Backup the max project ?
local ok
ok = true
if BackupFiles.checked == true then
(
-- Backup the file
if (BackupFile file) == false then
(
-- Don't save the file because backup has failed
ok = false
if StopOnError.checked == true then
Messagebox ("Can't backup file " + file)
-- One more error
countErrors = countErrors + 1
)
)
-- Save the max project ?
if ok == true then
(
if (saveMaxFile file) == true then
(
fileModified = fileModified + 1
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't write file " + file)
-- One more error
countErrors = countErrors + 1
)
)
)
)
)
else
(
if StopOnError.checked == true then
Messagebox ("Can't load file " + file)
-- One more error
countErrors = countErrors + 1
)
)
else
(
nllog("SKIP " + file + " by tag")
)
)
-- Parse sub directory ?
if (Recurse.checked == true) then
(
local directories
-- Get the directories
directories = getDirectories (currentDirectory+"/*")
-- For each directories
for dir in directories do
(
RecurseFolder dir
)
)
)
on BrowseDirectory pressed do
(
local dir
try
(
dir = getSavePath () -- caption:"Select the projects directory"
if dir != undefined then
Directory.text = dir
)
catch
(
)
)
on GoButton pressed do
(
-- Reset count
countModifications = 0
countErrors = 0
fileModified = 0
fileParsed = 0
-- Get files in the shape_source_directory
if SourceFiles.state == 2 then
(
-- Should warning user ?
if (SourceFiles.state == 2) and (Test.checked == false) then
(
-- Warning !
if ((queryBox "Warning, all the files in the specified folders will be overwrited.\nYou should backup your files before executing this script.\nDo you want to continue executing this script ?" beep:true) == true) then
RecurseFolder (adjustPathStringForScript Directory.text)
)
else
(
RecurseFolder (adjustPathStringForScript Directory.text)
)
)
else
(
-- Just compute the current project
call_do_it ()
)
-- Show errors
ProgressText.text = (fileParsed as string) + " project(s) opened, " + (countModifications as string) + " project modification(s), " + (fileModified as string) + " project(s) saved, " + (countErrors as string) + " error(s)."
Progress.value = 100
)
)
assets_resave_floater = newRolloutFloater "NeL Assets Resave Database Hard" 550 874
addrollout assets_resave_rollout assets_resave_floater rolledUp:false

View file

@ -27,6 +27,7 @@
#include "nel/misc/system_utils.h" #include "nel/misc/system_utils.h"
// 3D Interface. // 3D Interface.
#include "nel/3d/bloom_effect.h" #include "nel/3d/bloom_effect.h"
#include "nel/3d/fxaa.h"
#include "nel/3d/fasthls_modifier.h" #include "nel/3d/fasthls_modifier.h"
#include "nel/3d/particle_system_manager.h" #include "nel/3d/particle_system_manager.h"
#include "nel/3d/particle_system.h" #include "nel/3d/particle_system.h"
@ -661,7 +662,7 @@ void release()
delete &CLuaManager::getInstance(); delete &CLuaManager::getInstance();
NLGUI::CDBManager::release(); NLGUI::CDBManager::release();
CWidgetManager::release(); CWidgetManager::release();

View file

@ -27,7 +27,7 @@
#include "nel/misc/file.h" #include "nel/misc/file.h"
// Game share // Game share
#include "server_share/bmp4image.h" #include "game_share/bmp4image.h"
// AI share // AI share
#include "ai_share/world_map.h" #include "ai_share/world_map.h"