public static ModSrcFile FromFile(string file) { var data = new ModSrcFile() { FileName= file }; var lines = File.ReadAllLines(file, Encoding.UTF8); var delim = " \t".ToArray(); foreach(var i in lines) { var line = i.Trim(); var enabled = true; if(line.StartsWith("//")) { enabled = false; line = line.Substring(2).Trim(); } var t = line.Trim().Split(delim, StringSplitOptions.RemoveEmptyEntries); if(t.Length == 0) continue; switch(t[0]) { case "アイテム変更": break; case "スロット名": var slot= new ModSlot(data) { Name= t[1] }; data.Slots.Add(slot); break; case "マテリアル番号": var mtrl= new ModMaterial(data.CurrentSlot) { No= int.Parse(t[1]) }; data.CurrentSlot.Materials.Add(mtrl); break; case "テクスチャ設定": var tex = new ModTex() { Enabled = enabled, Name = t[1], Texture = t[2] }; data.CurrentMaterial.Textures.Add(tex); break; case "色設定": var col = new ModCol() { Enabled = enabled, Name = t[1], R = int.Parse(t[2]), G = int.Parse(t[3]), B = int.Parse(t[4]), A = int.Parse(t[5]) }; data.CurrentMaterial.Colors.Add(col); break; case "数値設定": var val = new ModValue() { Enabled = enabled, Name = t[1], Value = decimal.Parse(t[2]) }; data.CurrentMaterial.Values.Add(val); break; default: if(t.Length >= 2) data.Descriptions.Add(t[0], string.Join(" ", t.Skip(1).ToArray())); break; } } return data; }
private void UpdateF(ModValue val) { var nud = (NumericUpDown)Controls["nud"+val.Name]; val.Value = nud.Value; }
private void cb_f_CheckedChanged(object sender, EventArgs e) { if(Data == null) return; var cb = (CheckBox)sender; var name= cb.Name.Substring(2, cb.Name.Length-2); var val = Data.Values.FirstOrDefault(i => i.Name == name); if(val != null) { val.Enabled = cb.Checked; } else if(cb.Checked) { val = new ModValue() { Name= name, Enabled= true }; UpdateF(val); Data.Values.Add(val); } }
private void SetF(ModValue val, CheckBox cb, NumericUpDown nud) { cb.Checked = val.Enabled; nud.Value = val.Value; }