public Material(MaterialDefinition definition, IO.File file, ImcVariant variant) { this.Definition = definition; this.File = file; this.Variant = variant; Build(); }
public Material Get(ImcVariant variant) { string path = _DefaultPath; if (VariantsAvailable) { path = string.Format(_PathFormat, variant.Variant & 0xFF); } return(Create(path, variant)); }
public Material Get(ImcVariant variant, int stainKey) { if (!StainsAvailable) { throw new NotSupportedException(); } string path = string.Format(_StainedPathFormat, variant.Variant & 0xFF, stainKey); return(Create(path, variant)); }
private Material Create(string path, ImcVariant variant) { var file = _Packs.GetFile(path); return new Material(this, file, variant); }
public Material Get(ImcVariant variant, int stainKey) { if (!StainsAvailable) throw new NotSupportedException(); var path = string.Format(_StainedPathFormat, variant.Variant & 0xFF, stainKey); return Create(path, variant); }
public Material Get(ImcVariant variant) { var path = _DefaultPath; if (VariantsAvailable) path = string.Format(_PathFormat, variant.Variant & 0xFF); return Create(path, variant); }
private Material Create(string path, ImcVariant variant) { IO.File file = _Packs.GetFile(path); return(new Material(this, file, variant)); }
private bool TryGetModel(out Skeleton skeleton, out ModelDefinition model, out ImcVariant variant, out int m, out int b) { model = null; skeleton = null; variant = ImcVariant.Default; m = 0; b = 0; var asVariant = SelectedEntry as Models.ModelCharaVariant; if (asVariant == null) return false; int v = asVariant.Value; b = asVariant.Parent.Value; m = asVariant.Parent.Parent.Value; var imcPath = string.Format(ImcPathFormat, m, b); var mdlPath = string.Format(ModelPathFormat, m, b); var sklPath = string.Format(SkeletonPathFormat, m, 1);// b); SaintCoinach.IO.File imcFileBase; SaintCoinach.IO.File mdlFileBase; if (!Parent.Realm.Packs.TryGetFile(imcPath, out imcFileBase) || !Parent.Realm.Packs.TryGetFile(mdlPath, out mdlFileBase) || !(mdlFileBase is ModelFile)) { System.Windows.MessageBox.Show(string.Format("Unable to find files for {0}.", asVariant), "File not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error); return false; } SaintCoinach.IO.File sklFileBase; if(!Parent.Realm.Packs.TryGetFile(sklPath, out sklFileBase)) { System.Windows.MessageBox.Show(string.Format("Unable to find skeleton for {0}.", asVariant), "File not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error); return false; } skeleton = new Skeleton(new SklbFile(sklFileBase)); try { var imcFile = new ImcFile(imcFileBase); model = ((ModelFile)mdlFileBase).GetModelDefinition(); variant = imcFile.GetVariant(v); return true; } catch (Exception e) { System.Windows.MessageBox.Show(string.Format("Unable to load model for {0}:{1}{2}", asVariant, Environment.NewLine, e), "Failure to load", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error); return false; } }
private IComponent CreateModel(Engine engine, Skeleton skeleton, ModelDefinition model, ImcVariant variant, int m, int b) { const string PapPathFormat = "chara/monster/m{0:D4}/animation/a0001/bt_common/resident/monster.pap"; var component = new AnimatedModel(engine, skeleton, variant, model, ModelQuality.High) { }; var papPath = string.Format(PapPathFormat, m, b); SaintCoinach.IO.File papFileBase; if (Parent.Realm.Packs.TryGetFile(papPath, out papFileBase)) { var anim = new AnimationContainer(skeleton, new PapFile(papFileBase)); var hasAnim = false; for(var i = 0; i < DefaultAnimationNames.Length && !hasAnim; ++i) { var n = DefaultAnimationNames[i]; if (anim.AnimationNames.Contains(n)) { component.AnimationPlayer.Animation = anim.Get(n); hasAnim = true; } } if (!hasAnim) component.AnimationPlayer.Animation = anim.Get(0); } return component; }