コード例 #1
0
ファイル: Material.cs プロジェクト: newb23/FFXIVDeviare
        public Material(MaterialDefinition definition, IO.File file, ImcVariant variant)
        {
            this.Definition = definition;
            this.File       = file;
            this.Variant    = variant;

            Build();
        }
コード例 #2
0
        public Material Get(ImcVariant variant)
        {
            string path = _DefaultPath;

            if (VariantsAvailable)
            {
                path = string.Format(_PathFormat, variant.Variant & 0xFF);
            }
            return(Create(path, variant));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
 private Material Create(string path, ImcVariant variant)
 {
     var file = _Packs.GetFile(path);
     return new Material(this, file, variant);
 }
コード例 #5
0
        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);
        }
コード例 #6
0
 public Material Get(ImcVariant variant)
 {
     var path = _DefaultPath;
     if (VariantsAvailable)
         path = string.Format(_PathFormat, variant.Variant & 0xFF);
     return Create(path, variant);
 }
コード例 #7
0
 private Material Create(string path, ImcVariant variant)
 {
     IO.File file = _Packs.GetFile(path);
     return(new Material(this, file, variant));
 }
コード例 #8
0
        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;
            }
        }
コード例 #9
0
        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;
        }