JurassicParkTrespasser/jp2_pc/Tools/MAXScript/ObjPropsEdit.ms
2018-01-01 23:07:24 +01:00

242 lines
6.9 KiB
Plaintext

fn simplify b kwd acr =
(
if (CIndex = findString b kwd) != undefined then
(
b = replace b CIndex kwd.count acr
simplify b kwd acr
) else (
return b
)
)
fn simplifyProps o =
(
local CBuffer = getUserPropBuffer o
if CBuffer.count > 0 do
(
CBuffer = simplify CBuffer "string" "s"
CBuffer = simplify CBuffer "int" "i"
CBuffer = simplify CBuffer "bool" "b"
CBuffer = simplify CBuffer "float" "f"
CBuffer = simplify CBuffer "object" "o"
setUserPropBuffer o CBuffer
)
)
fn OPWordArray textline =
(
local c
local Line = ""
local Lines = #()
for i = 1 to textline.count do
(
c = textline[i]
if c != ";" then
if (c != "\n") and (c != "\r") do
Line = Line + c
else
(
Line = Line + ";"
append Lines Line
Line = ""
)
)
return Lines
)
Utility ObjPropsEditing "Obj Props Editing"
(
local CEditObject
group "Object Properties Editing"
(
Label EditingObjectLabel "Object:" align:#left
pickbutton ChooseEditObject width:100 offset:[20,-20]
ListBox CObjPropsList
edittext CLineText fieldwidth:143 offset:[-7,0]
button AddNewLine "Add" width:70 offset:[-37,0]
button RemoveLine "Remove" width:70 offset:[37,-26]
button ApplyToSelection "Apply to Selection" width:140
button AppendToSelection "Append to Selection" width:140
label PropsCount
)
group "Parsing Options"
(
edittext SearchString "Search for: "
editText ReplaceString "Replace value: "
button ParseSelection "Parse Selection"
)
group "Search and Replace"
(
edittext GeneralSearchString "Search for: "
editText GeneralReplaceString "Replace value: "
button SearchReplace "Search & Replace"
)
group "Simplification"
(
button SimplifySelection "Simplify Selection"
)
on SimplifySelection pressed do
for o in selection do simplifyProps o
on SearchReplace pressed do
(
ObjArray = for obj in selection collect obj
oc = ObjArray.count
SearchText = GeneralSearchString.text
stringLen = SearchText.count
for i = 1 to oc do
(
CObj = ObjArray[i]
if (CBuffer = getUserPropBuffer CObj) != undefined do
(
CIndex = undefined
if (CIndex = findString CBuffer SearchText) != undefined then
(
CBuffer = (replace CBuffer CIndex stringLen GeneralReplaceString.text)
setUserPropBuffer CObj CBuffer
) else (
format ("Could not find the search keyword \"" + SearchText + "\" in object " + CObj.name + "\n")
)
)
)
)
on AddNewLine pressed do
(
CString = ""
ListBoxtext = CObjPropsList.items
append ListBoxtext ""
CObjPropsList.items = ListBoxtext
for i = 1 to ListBoxText.count do (CString = (CString + ListBoxText[i] + "\r\r\n"))
CLineText.text = CObjPropsList.items[CObjPropsList.selection]
if CEditObject != undefined do
SetUserPropBuffer CEditObject CString
PropsCount.text = (CString.count as string + " characters in buffer")
)
on RemoveLine pressed do
(
CString = ""
s = CObjPropsList.selection
NewListBoxItems = #()
ListBoxtext = CObjPropsList.items
for i = 1 to ListBoxtext.count do
if i != s do append NewListBoxItems ListBoxtext[i]
CObjPropsList.items = NewListBoxItems
if CObjPropsList.selection > CObjPropsList.items.count do
(
CObjPropsList.selection -= 1
if CObjPropsList.selection < 1 do CObjPropsList.selection = 1
)
if CObjPropsList.items[CObjPropsList.selection] != undefined then
CLineText.text = CObjPropsList.items[CObjPropsList.selection]
else
CLineText.text = ""
for i = 1 to NewListBoxItems.count do (CString = (CString + NewListBoxItems[i] + "\r\r\n"))
if CEditObject != undefined do
SetUserPropBuffer CEditObject CString
PropsCount.text = (CString.count as string + " characters in buffer")
)
on AppendToSelection pressed do
(
ObjArray = for obj in selection collect obj
CString = ""
ListBoxtext = CObjPropsList.items
for i = 1 to ListBoxText.count do (CString = (CString + ListBoxText[i] + "\r\r\n"))
for i = 1 to ObjArray.count do
(
CObj = ObjArray[i]
CBuffer = getUserPropBuffer CObj
CBuffer += CString
SetUserPropBuffer CObj CBuffer
PropsCount.text = (CBuffer.count as string + " characters in buffer")
)
)
on ApplyToSelection pressed do
(
ObjArray = for obj in selection collect obj
CString = ""
ListBoxtext = CObjPropsList.items
for i = 1 to ListBoxText.count do (CString = (CString + ListBoxText[i] + "\r\r\n"))
for i = 1 to ObjArray.count do
(
CObj = ObjArray[i]
SetUserPropBuffer CObj CString
PropsCount.text = (CString.count as string + " characters in buffer")
)
)
on ChooseEditObject picked obj do
(
CEditObject = obj
if (CEditObjPropBuffer = getUserPropBuffer CEditObject).count != 0 then
(
LineArray = OPWordArray CEditObjPropBuffer
CObjPropsList.items = LineArray
CObjPropsList.selection = 1
CLineText.text = CObjPropsList.items[1]
PropsCount.text = (CEditObjPropBuffer.count as string + " characters in buffer")
ChooseEditObject.text = CEditObject.name
) else (
MessageBox "Nothing in this properties buffer."
)
)
on CObjPropsList selected s do
CLineText.text = CObjPropsList.items[s]
on CLineText entered text do
(
s = CObjPropsList.selection
ListBoxtext = CObjPropsList.items
ListBoxtext[s] = text
CObjPropsList.items = ListBoxtext
ListBoxText = CObjPropsList.items
CString = ""
for i = 1 to ListBoxText.count do (CString = (CString + ListBoxText[i] + "\r\r\n"))
if CEditObject != undefined do
SetUserPropBuffer CEditObject CString
PropsCount.text = (CString.count as string + " characters in buffer")
)
on ParseSelection pressed do
(
ObjArray = for obj in selection collect obj
oc = ObjArray.count
SearchText = SearchString.text
for i = 1 to oc do
(
CObj = ObjArray[i]
if (CBuffer = getUserPropBuffer CObj) != undefined do
CIndex = undefined
if (CIndex = findString CBuffer SearchString.text) != undefined then
(
CIndex = (CIndex + 3 + SearchText.count)
NewBuffer = substring CBuffer CIndex (CBuffer.count - CIndex)
CutOffPoint = 0
ExitCode = false
for j = 1 to NewBuffer.count do
if NewBuffer[j] == ";" do
if ExitCode != true do
(
CutOffPoint = (j - 1)
ExitCode = true
)
format "CutOffPoint:%\n" CutOffPoint
format "Replacing:%\n" (substring CBuffer CIndex CutOffPoint)
CBuffer = (replace CBuffer CIndex CutOffPoint ReplaceString.text)
setUserPropBuffer CObj CBuffer
) else (
format ("Could not find the search keyword \"" + SearchString.text + "\" in object " + CObj.name + "\n")
)
)
)
)