public TankObjectViewModel(CommandBindingCollection commandBindings, ITankObject tankObject)
     : base(commandBindings, tankObject)
 {
 }
Example #2
0
        public Model(ModelViewModel modelViewerViewModel, ITankObject tankObject, ModuleViewModel moduleViewModel)
        {
            ModuleViewModel       = moduleViewModel;
            _modelViewerViewModel = modelViewerViewModel;
            _tankObject           = tankObject;
            DispatchUniqueProperty();

            var model = this.ModelObject.Model.Undamaged;

            LoadingTask = Task.Factory.StartNew(() =>
            {
                try
                {
                    using (Diagnostics.PotentialExceptionRegion)
                    {
                        using (var visualStream = this.OpenVisualFile(model))
                        {
                            this.Visual = ModelVisual.ReadFrom(visualStream);
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Info("exception occurred when load visual", e);
                }
            }).ContinueWith((_) =>
            {
                try
                {
                    using (Diagnostics.PotentialExceptionRegion)
                    {
                        using (var modelStream = this.OpenPrimitiveFile(model))
                        {
                            this.Primitive = ModelPrimitive.ReadFrom(modelStream, this.Visual, false);
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Info("exception occurred when load primitive", e);
                }
            });


            var collisionModel = this.ModelObject.Model.Collision;

            LoadingTask = LoadingTask.ContinueWith((_) =>
            {
                try
                {
                    using (Diagnostics.PotentialExceptionRegion)
                    {
                        using (var visualStream = this.OpenVisualFile(collisionModel))
                        {
                            this.CollisionVisual = ModelVisual.ReadFrom(visualStream);
                            foreach (var rendetSet in CollisionVisual.RenderSets)
                            {
                                foreach (var groupKv in rendetSet.Geometry.ModelPrimitiveGroups)
                                {
                                    var material       = groupKv.Value.Material;
                                    material.ShowArmor = true;

                                    if (ArmorObject.Armor.TryGetArmorValue(material.Identifier, out ArmorGroup armor))
                                    {
                                        material.Armor = armor;
                                    }
                                    else
                                    {
                                        material.Armor = new ArmorGroup();
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Info("exception occurred when load collision visual", e);
                }
            }).ContinueWith((_) =>
            {
                try
                {
                    using (Diagnostics.PotentialExceptionRegion)
                    {
                        using (var modelStream = OpenPrimitiveFile(collisionModel))
                        {
                            this.CollisionPrimitive = ModelPrimitive.ReadFrom(modelStream, CollisionVisual, true);
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Info("exception occurred when load collision primitive", e);
                }
            });
        }