public bool LoadFile(string filename) { if (String.IsNullOrEmpty(Path.GetExtension(filename)) || Path.GetExtension(filename) != Params.ExtentionOfMate) { filename += Params.ExtentionOfMate; } baseMateFile = new MateFile(); this.filename = Path.GetFileNameWithoutExtension(filename); baseMateFile.filename = Path.GetFileNameWithoutExtension(filename); byte[] cd = null; try { using (AFileBase aFileBase = global::GameUty.FileOpen(filename)) { if (!aFileBase.IsValid()) { logger.ErrorLog("マテリアルファイルが見つかりません。", filename); return false; } cd = aFileBase.ReadAll(); } } catch (Exception ex2) { logger.ErrorLog("マテリアルファイルが読み込めませんでした。", filename, ex2.Message); return false; } using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(cd), Encoding.UTF8)) { string text = binaryReader.ReadString(); if (text != materialHeaderString) { logger.ErrorLog("例外: ヘッダーファイルが不正です。" + text); return false; } version = binaryReader.ReadInt32(); baseMateFile.version = version; name = binaryReader.ReadString(); baseMateFile.name = name; string pmat = binaryReader.ReadString(); pmatFile = new PmatFile(); pmatFile.LoadFile(pmat); shader1 = binaryReader.ReadString(); baseMateFile.shader1 = shader1; shader2 = binaryReader.ReadString(); baseMateFile.shader2 = shader2; while (true) { string key = binaryReader.ReadString(); if (key == "end") { break; } string propertyName = binaryReader.ReadString(); if (key == "tex") { TexParams tex = new TexParams(); tex.mateFile = this; tex.propertyName = propertyName; tex.type = binaryReader.ReadString(); if (tex.type == "null") { } else if (tex.type == TexParams.TexTypeTex2d) { tex.filename = binaryReader.ReadString(); tex.assets = binaryReader.ReadString(); Vector2 offset; offset.x = binaryReader.ReadSingle(); offset.y = binaryReader.ReadSingle(); tex.offset = offset; Vector2 scale; scale.x = binaryReader.ReadSingle(); scale.y = binaryReader.ReadSingle(); tex.scale = scale; tex.texFile = new TexFile(); tex.texFile.LoadFile(tex.filename); } else if (tex.type == TexParams.TexTypeTexRT) { tex.text7 = binaryReader.ReadString(); tex.text8 = binaryReader.ReadString(); } if (texs == null) { texs = new Dictionary<string, TexParams>(); } else if (texs.ContainsKey(propertyName)) { continue; } texs.Add(propertyName, tex); } else if (key == "col") { Color color; color.r = binaryReader.ReadSingle(); color.g = binaryReader.ReadSingle(); color.b = binaryReader.ReadSingle(); color.a = binaryReader.ReadSingle(); if (colors == null) { colors = new Dictionary<string, Color>(); } else if (colors.ContainsKey(propertyName)) { continue; } colors.Add(propertyName, color); } else if (key == "vec") { Vector4 vector; vector.x = binaryReader.ReadSingle(); vector.y = binaryReader.ReadSingle(); vector.z = binaryReader.ReadSingle(); vector.w = binaryReader.ReadSingle(); if (vecs == null) { vecs = new Dictionary<string, Vector4>(); } else if (vecs.ContainsKey(propertyName)) { continue; } vecs.Add(propertyName, vector); } else if (key == "f") { float value = binaryReader.ReadSingle(); if (parameters == null) { parameters = new Dictionary<string, float>(); } else if (parameters.ContainsKey(propertyName)) { continue; } parameters.Add(propertyName, value); } else { logger.ErrorLog("マテリアルが読み込めません。不正なマテリアルプロパティ型です ", key); return false; } } } return true; }
/// <summary> /// メニューファイルを読み込む /// </summary> /// <returns></returns> bool loadMenu() { nodes = new Dictionary<string, int>(); foreach (var nodekey in Params.Nodenames.Keys) { if (menuFile.delNodes.Contains(nodekey)) { nodes.Add(nodekey, 1); } else if (menuFile.showNodes.Contains(nodekey)) { nodes.Add(nodekey, 2); } else { nodes.Add(nodekey, 0); } } masks = new Dictionary<string, bool>(); foreach (var slotkey in Params.Slotnames.Keys) { if (menuFile.maskItems.Contains(slotkey)) { masks.Add(slotkey, true); } else { masks.Add(slotkey, false); } } addItems = new List<ModelFile>(); foreach (var target in menuFile.addItems) { if (Params.Slotnames.Keys.Contains(target[1])) { ModelFile model = new ModelFile(); if (model.LoadFile(target[0])) { model.category = menuFile.category; model.slotname = target[1]; if (Params.AttachPoints.ContainsKey(target[1])) { //手持ちアイテム model.addItemType = ModelFile.AddItemType.handItem; model.attachSlot = MenuFile.AttachBoneString; model.attachName = Params.AttachPoints[target[1]]; } else if (target.Length == 4 && target[2] == MenuFile.AttachBoneString) { //ボーンにアタッチ model.addItemType = ModelFile.AddItemType.attachBone; model.attachSlot = MenuFile.AttachBoneString; model.attachName = target[3]; } else if (target.Length == 5 && target[2] == MenuFile.AttachString) { //アタッチ model.addItemType = ModelFile.AddItemType.attach; model.attachSlot = target[3]; model.attachName = target[4]; } addItems.Add(model); } } } mateFiles = new List<MateFile>(); foreach (var target in menuFile.materials) { if (Params.Slotnames.Keys.Contains(target[0])) { int matno; if (int.TryParse(target[1], out matno)) { MateFile mate = new MateFile(); if (mate.LoadFile(target[2])) { mate.matno = matno; mate.category = menuFile.category; mate.slotname = target[0]; mateFiles.Add(mate); } } } } resourceFiles = new List<MenuFile>(); foreach (var target in menuFile.resources) { MenuFile menu = new MenuFile(); if (menu.LoadFile(target[1])) { menu.resourceName = target[0]; resourceFiles.Add(menu); } } delItems = new Dictionary<string, bool>(); foreach (var slot in Params.Slotnames.Keys) { // 削除アイテムのチェック bool exists = false; foreach (var target in menuFile.items) { if (target.Contains(slot) && target.Contains("_del")) { exists = true; break; } } delItems.Add(slot, exists); } scrollPos = Vector2.zero; wearMpnsCombo.SelectedItemIndex = 0; foreach (var category in wearMpns) { if (category.text == menuFile.category) { break; } wearMpnsCombo.SelectedItemIndex++; } return true; }