Any / vae /com3d /_CM3D2_Toolkit_PR2 /src /[CM3D2]mate編集.ahk
kitou's picture
Upload 646 files
4d3af08
raw
history blame
9.76 kB
#NoTrayIcon
FileEncoding, UTF-8-RAW
#SingleInstance OFF
SetBatchLines, -1
SetFormat, float, 0.99
file_path = %1%
Loop {
if (file_path == "") {
default_path := GetDefaultPath()
FileSelectFile, file_path, 3, %default_path%, .mateファイルを選択してください, マテリアルファイル(*.mate)
}
if (ErrorLevel == 1) {
ExitApp
}
if (FileExist(file_path) == "") {
Msgbox, ファイルが存在しません
file_path := ""
}
else {
break
}
}
file := FileOpen(file_path, "r")
if (file.Read(file.ReadChar()) != "CM3D2_MATERIAL") {
MsgBox, これはカスタムメイド3D2のマテリアルファイルではありません
ExitApp
}
version := file.ReadInt()
value1 := ReadString(file)
value2 := ReadString(file)
value3 := ReadString(file)
value4 := ReadString(file)
tex_data := Object()
col_data := Object()
f_data := Object()
Loop {
type := ReadString(file)
if (type == "end") {
break
}
else if (type == "tex") {
pos := GetMaxIndex(tex_data) + 1
tex_data[pos, 1] := ReadString(file)
tex_data[pos, 2] := ReadString(file)
if (tex_data[pos, 2] == "tex2d") {
tex_data[pos, 3] := ReadString(file)
tex_data[pos, 4] := ReadString(file)
tex_data[pos, 5, 1] := file.ReadFloat()
tex_data[pos, 5, 2] := file.ReadFloat()
tex_data[pos, 5, 3] := file.ReadFloat()
tex_data[pos, 5, 4] := file.ReadFloat()
}
}
else if (type == "col") {
pos := GetMaxIndex(col_data) + 1
col_data[pos, 1] := ReadString(file)
col_data[pos, 2, 1] := file.ReadFloat()
if (col_data[pos, 2, 1] != "null") {
col_data[pos, 2, 2] := file.ReadFloat()
col_data[pos, 2, 3] := file.ReadFloat()
col_data[pos, 2, 4] := file.ReadFloat()
}
else {
col_data[pos, 2, 2] := ""
col_data[pos, 2, 3] := ""
col_data[pos, 2, 4] := ""
}
}
else if (type == "f") {
pos := GetMaxIndex(f_data) + 1
f_data[pos, 1] := ReadString(file)
f_data[pos, 2] := file.ReadFloat()
}
else {
MsgBox, 未知のデータがありました(%type%)`n終了します
ExitApp
}
}
file.Close()
SplitPath, file_path, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
Gui, Add, Text, xm0 ym0 W450, %A_Space%%OutFileName%
Gui, Add, Text, x+0 yp+0 W100 H20, %A_Space%%A_Space%ファイルバージョン
Gui, Add, Edit, x+0 yp+0 W50 H20 VVversion, %version%
Gui, Add, Text, xm0 y+0 W50 H20, %A_Space%%A_Space%1
Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue1, %value1%
Gui, Add, Text, x+0 yp+0 W50 H20, %A_Space%%A_Space%2
Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue2, %value2%
Gui, Add, Text, xm0 y+0 W50 H20, %A_Space%%A_Space%3
Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue3, %value3%
Gui, Add, Text, x+0 yp+0 W50 H20, %A_Space%%A_Space%4
Gui, Add, Edit, x+0 yp+0 W250 H20 VVvalue4, %value4%
Gui, Add, Text, xm0 y+5 W50, %A_Space%%A_Space%texture
Gui, Add, TreeView, xm0 y+0 W550 H200 -ReadOnly VVtex_data
size := GetMaxIndex(tex_data)
Loop, %size% {
parent := TV_Add(tex_data[A_Index, 1], 0, "Expand")
TV_Add(tex_data[A_Index, 2], parent)
if (tex_data[A_Index, 2] == "tex2d") {
TV_Add(tex_data[A_Index, 3], parent)
TV_Add(tex_data[A_Index, 4], parent)
vector := TV_Add("色", parent)
TV_Add(SetFloat(tex_data[A_Index, 5, 1]), vector)
TV_Add(SetFloat(tex_data[A_Index, 5, 2]), vector)
TV_Add(SetFloat(tex_data[A_Index, 5, 3]), vector)
TV_Add(SetFloat(tex_data[A_Index, 5, 4]), vector)
}
}
Gui, Add, Button, x+0 yp+0 W50 H100 GtexAdd, +
Gui, Add, Button, xp+0 y+0 W50 H100 GtexDel, ×
Gui, Add, Text, xm0 y+5 W50, %A_Space%%A_Space%color
Gui, Add, TreeView, xm0 y+0 W550 H150 -ReadOnly VVcol_data
size := GetMaxIndex(col_data)
Loop, %size% {
parent := TV_Add(col_data[A_Index, 1], 0, "Expand")
vector := TV_Add("色", parent)
TV_Add(SetFloat(col_data[A_Index, 2, 1]), vector)
TV_Add(SetFloat(col_data[A_Index, 2, 2]), vector)
TV_Add(SetFloat(col_data[A_Index, 2, 3]), vector)
TV_Add(SetFloat(col_data[A_Index, 2, 4]), vector)
}
Gui, Add, Button, x+0 yp+0 W50 H75 GcolAdd, +
Gui, Add, Button, xp+0 y+0 W50 H75 GcolDel, ×
Gui, Add, Text, xm0 y+5 W50, %A_Space%%A_Space%float
Gui, Add, TreeView, xm0 y+0 W550 H100 -ReadOnly VVf_data
size := GetMaxIndex(f_data)
Loop, %size% {
parent := TV_Add(f_data[A_Index, 1], 0, "Expand")
TV_Add(SetFloat(f_data[A_Index, 2]), parent)
}
Gui, Add, Button, x+0 yp+0 W50 H50 GfAdd, +
Gui, Add, Button, xp+0 y+0 W50 H50 GfDel, ×
Gui, Add, Button, xm0 y+5 W600 H50 GMySubmit, 上書き保存
Gui, Show, AutoSize
return
MySubmit:
Gui, Submit, NoHide
file := FileOpen(file_path, "w")
WriteString(file, "CM3D2_MATERIAL")
file.WriteInt(Vversion)
WriteString(file, Vvalue1)
WriteString(file, Vvalue2)
WriteString(file, Vvalue3)
WriteString(file, Vvalue4)
Gui, TreeView, Vtex_data
parent_id = 0
Loop {
parent_id := TV_GetNext(parent_id)
if (parent_id == 0) {
break
}
WriteString(file, "tex")
TV_GetText(string, parent_id)
WriteString(file, string)
child_id := TV_GetChild(parent_id)
TV_GetText(string, child_id)
WriteString(file, string)
if (string == "null") {
continue
}
child_id := TV_GetNext(child_id)
TV_GetText(string, child_id)
WriteString(file, string)
child_id := TV_GetNext(child_id)
TV_GetText(string, child_id)
WriteString(file, string)
child_id := TV_GetNext(child_id)
child_id := TV_GetChild(child_id)
TV_GetText(string, child_id)
file.WriteFloat(string)
Loop, 3 {
child_id := TV_GetNext(child_id)
TV_GetText(string, child_id)
file.WriteFloat(string)
}
}
Gui, TreeView, Vcol_data
parent_id = 0
Loop {
parent_id := TV_GetNext(parent_id)
if (parent_id == 0) {
break
}
WriteString(file, "col")
TV_GetText(string, parent_id)
WriteString(file, string)
child_id := TV_GetChild(parent_id)
child_id := TV_GetChild(child_id)
TV_GetText(string, child_id)
file.WriteFloat(string)
Loop, 3 {
child_id := TV_GetNext(child_id)
TV_GetText(string, child_id)
file.WriteFloat(string)
}
}
Gui, TreeView, Vf_data
parent_id = 0
Loop {
parent_id := TV_GetNext(parent_id)
if (parent_id == 0) {
break
}
WriteString(file, "f")
TV_GetText(string, parent_id)
WriteString(file, string)
child_id := TV_GetChild(parent_id)
TV_GetText(string, child_id)
file.WriteFloat(string)
}
WriteString(file, "end")
file.close()
SplitPath, file_path, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
MsgBox, %OutFileName%を上書きしました
return
texAdd:
Gui, TreeView, SysTreeView321
InputBox, new_name, , 新規の名前を入力してください, , , , , , , , _
if (ErrorLevel == 0){
parent := TV_Add(new_name, 0, "Expand")
TV_Add("tex2d", parent)
TV_Add("XXX_XXX", parent)
TV_Add("Assets/texture/~*.png", parent)
vector := TV_Add("色情報?", parent)
TV_Add(1.0, vector)
TV_Add(1.0, vector)
TV_Add(1.0, vector)
TV_Add(1.0, vector)
}
return
texDel:
Gui, TreeView, SysTreeView321
parent := TV_GetSelection()
if (parent == 0) {
MsgBox, 項目を選択してください
return
}
Loop {
if (TV_GetParent(parent) != 0) {
parent := TV_GetParent(parent)
}
else {
break
}
}
TV_Delete(parent)
return
colAdd:
Gui, TreeView, SysTreeView322
InputBox, new_name, , 新規の名前を入力してください
if (ErrorLevel == 0){
parent := TV_Add(new_name, 0, "Expand")
vector := TV_Add("色情報", parent)
TV_Add(1.0, vector)
TV_Add(1.0, vector)
TV_Add(1.0, vector)
TV_Add(1.0, vector)
}
return
colDel:
Gui, TreeView, SysTreeView322
parent := TV_GetSelection()
if (parent == 0) {
MsgBox, 項目を選択してください
return
}
Loop {
if (TV_GetParent(parent) != 0) {
parent := TV_GetParent(parent)
}
else {
break
}
}
TV_Delete(parent)
return
fAdd:
Gui, TreeView, SysTreeView323
InputBox, new_name, , 新規の名前を入力してください
if (ErrorLevel == 0){
parent := TV_Add(new_name, 0, "Expand")
TV_Add(1.0, parent)
}
return
fDel:
Gui, TreeView, SysTreeView323
parent := TV_GetSelection()
if (parent == 0) {
MsgBox, 項目を選択してください
return
}
Loop {
if (TV_GetParent(parent) != 0) {
parent := TV_GetParent(parent)
}
else {
break
}
}
TV_Delete(parent)
return
GetMaxIndex(obj) {
value := obj.MaxIndex()
if (value == "") {
return 0
}
return value
}
GetStringLength(string) {
count = 0
Loop, Parse, string
{
if (RegExMatch(A_LoopField, "^[^\x01-\x7E]$") != 0) {
count += 3
}
else {
count += 1
}
}
return count
}
ReadString(file, size=-1) {
if (size <= -1) {
size := 0
chars := Object()
Loop {
char := file.ReadUChar()
chars[A_Index] := char
if (char < 128) {
break
}
}
num := GetMaxIndex(chars)
Loop, %num% {
char := chars[A_Index]
multi := 256 ** (A_Index - 1)
size += char * multi
if (1 < A_Index) {
size -= (multi / 2) * (char + 1)
}
}
}
string := ""
count = 0
Loop, 9999 {
if (size <= count) {
break
}
s := file.Read(1)
string := string . s
count += GetStringLength(s)
if (GetStringLength(s) == 0) {
pos := file.Pos
MsgBox, ファイルの読み込みに失敗しました(場所: %pos%)`n終了します
ExitApp
}
}
return string
}
WriteString(file, string) {
len := GetStringLength(string)
if (128 <= len) {
temp := Mod(len, 128) + 128
file.WriteChar(temp)
temp := Floor(len / 128)
file.WriteChar(temp)
}
else {
file.WriteChar(len)
}
file.Write(string)
}
GetDefaultPath() {
RegRead, path, HKEY_CURRENT_USER, Software\KISS\カスタムメイド3D2, InstallPath
if (ErrorLevel == 0) {
path = %path%GameData\
}
else {
path := A_ScriptDir
}
return path
}
SetFloat(f) {
f := RegExReplace(f, "(\.0)0+$", "$1")
f := RegExReplace(f, "([1-9])0+$", "$1")
return f
}
GuiEscape:
GuiClose:
ExitApp
return