Esempio n. 1
0
        /// <summary>
        /// Adds the draw call (single model drawing). Calculates target mesh level of detail and picks a proper meshes to draw (based on a material slot index).
        /// </summary>
        /// <param name="model">The model mesh to render. Cannot be null.</param>
        /// <param name="materialSlotIndex">The material slot index to draw.</param>
        /// <param name="material">The material to apply during rendering. Cannot be null.</param>
        /// <param name="lodIndex">The model Level Of Detail to draw (zero-based index).</param>
        /// <param name="world">The world matrix used to transform mesh geometry during rendering. Use <see cref="Matrix.Identity"/> to render mesh 'as is'.</param>
        /// <param name="flags">The static flags. Used to describe type of the geometry.</param>
        /// <param name="receiveDecals">True if rendered geometry can receive decals, otherwise false.</param>
        public void AddDrawCall(Model model, int materialSlotIndex, MaterialBase material, int lodIndex, ref Matrix world, StaticFlags flags = StaticFlags.None, bool receiveDecals = true)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            // Pick a proper LOD
            var lods = model.LODs;

            if (lods == null || lods.Length < lodIndex || lodIndex < 0)
            {
                return;
            }
            var lod = lods[lodIndex];

            // Draw meshes
            for (int i = 0; i < lod.Meshes.Length; i++)
            {
                if (lod.Meshes[i].MaterialSlotIndex == materialSlotIndex)
                {
                    AddDrawCall(lod.Meshes[i], material, ref world, flags);
                }
            }
        }
        public static MaterialParameter[] GetPublicParameters(MaterialBase material)
        {
            var materialParameters = material.Parameters;
            int parameterCount     = 0;

            for (int i = 0; i < materialParameters.Length; i++)
            {
                if (!materialParameters[i].IsPublic)
                {
                    continue;
                }
                parameterCount++;
            }

            var publicParameters = new MaterialParameter[parameterCount];

            for (int i = 0, j = 0; i < materialParameters.Length; i++)
            {
                if (!materialParameters[i].IsPublic)
                {
                    continue;
                }
                publicParameters[j] = materialParameters[i];
                j++;
            }

            return(publicParameters);
        }
Esempio n. 3
0
        private void InitDrawing()
        {
            // Load content (but async - don't wait and don't block execution)
            _modelTranslateAxis = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/TranslateAxis");
            _modelScaleAxis     = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/ScaleAxis");
            _modelBox           = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/WireBox");
            _modelCircle        = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Gizmo/WireCircle");
            _materialAxisX      = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisX");
            _materialAxisY      = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisY");
            _materialAxisZ      = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisZ");
            _materialAxisFocus  = FlaxEngine.Content.LoadAsyncInternal <MaterialInstance>("Editor/Gizmo/MaterialAxisFocus");
            _materialWire       = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>("Editor/Gizmo/MaterialWire");
            _materialWireFocus  = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>("Editor/Gizmo/MaterialWireFocus");

            // Ensure that every asset was loaded
            if (_modelTranslateAxis == null ||
                _modelScaleAxis == null ||
                _modelBox == null ||
                _modelCircle == null ||
                _materialAxisX == null ||
                _materialAxisY == null ||
                _materialAxisZ == null ||
                _materialAxisFocus == null ||
                _materialWire == null ||
                _materialWireFocus == null
                )
            {
                // Error
                Application.Fatal("Failed to load Transform Gizmo resources.");
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ViewportDebugDrawData" /> class.
 /// </summary>
 /// <param name="actorsCapacity">The actors capacity.</param>
 public ViewportDebugDrawData(int actorsCapacity = 0)
 {
     _actors                  = new List <IntPtr>(actorsCapacity);
     _highlights              = new List <HighlightData>(actorsCapacity);
     _highlightMaterial       = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>(EditorAssets.HighlightMaterial);
     _highlightTrianglesModel = FlaxEngine.Content.CreateVirtualAsset <Model>();
 }
Esempio n. 5
0
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            switch ((BatchType)((e.Source as ComboBox).SelectedItem))
            {
            case BatchType.Metal:
                matetrialRepository = new MetalRepository();
                break;

            case BatchType.Plastic:
                matetrialRepository = new PlasticRepository();
                break;

            case BatchType.PurchasedParts:
                matetrialRepository = new PurchasedPartsRepository();
                break;

            case BatchType.Accessories:
                matetrialRepository = new AccessoriesRepository();
                break;

            case BatchType.ProjectCost:
                matetrialRepository = new ProjectCostRepository();
                break;

            case BatchType.CostAdjustment:
                matetrialRepository = new CostAdjustmentRepository();
                break;

            default:
                break;
            }
            this.DataContext = matetrialRepository.CreateViewModel();
            editMetal        = null;
        }
Esempio n. 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ViewportDebugDrawData" /> class.
 /// </summary>
 /// <param name="actorsCapacity">The actors capacity.</param>
 public ViewportDebugDrawData(int actorsCapacity = 0)
 {
     _actors                  = new List <IntPtr>(actorsCapacity);
     _highlights              = new List <HighlightData>(actorsCapacity);
     _highlightMaterial       = EditorAssets.Cache.HighlightMaterialInstance;
     _highlightTrianglesModel = FlaxEngine.Content.CreateVirtualAsset <Model>();
 }
        /// <summary>
        /// Adds the draw call. Calculates target mesh level of detail and picks a proper meshes to draw (based on a material slot index).
        /// </summary>
        /// <param name="model">The model mesh to render. Cannot be null.</param>
        /// <param name="materialSlotIndex">The material slot index to draw.</param>
        /// <param name="material">The material to apply during rendering. Cannot be null.</param>
        /// <param name="bounds">The bounds of the model instance that is being drawn (model instance bounds).</param>
        /// <param name="world">The world matrix used to transform mesh geometry during rendering. Use <see cref="Matrix.Identity"/> to render mesh 'as is'.</param>
        /// <param name="flags">The static flags. Used to describe type of the geometry.</param>
        public void AddDrawCall(Model model, int materialSlotIndex, MaterialBase material, ref BoundingSphere bounds, ref Matrix world, StaticFlags flags = StaticFlags.None)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            // Pick a proper LOD
            int lodIndex = RenderTask.Internal_ComputeModelLOD(model.unmanagedPtr, ref bounds, IntPtr.Zero);
            var lods     = model.LODs;

            if (lods == null || lods.Length < lodIndex || lodIndex < 0)
            {
                return;
            }
            var lod = lods[lodIndex];

            // Draw meshes
            for (int i = 0; i < lod.Meshes.Length; i++)
            {
                if (lod.Meshes[i].MaterialSlotIndex == materialSlotIndex)
                {
                    AddDrawCall(lod.Meshes[i], material, ref world, flags);
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Removes the post fx material from the settings.
        /// </summary>
        /// <param name="material">The material.</param>
        public void RemovePostFxMaterial(MaterialBase material)
        {
            var materials = PostFxMaterials;

            materials.RemoveMaterial(material);
            PostFxMaterials = materials;
        }
Esempio n. 9
0
        /// <summary>
        /// Adds the post fx material to the settings.
        /// </summary>
        /// <param name="material">The material.</param>
        public void AddPostFxMaterial(MaterialBase material)
        {
            var materials = PostFxMaterials;

            materials.AddMaterial(material);
            PostFxMaterials = materials;
        }
Esempio n. 10
0
        /// <summary>
        /// Adds the draw call (single terrain patch drawing).
        /// </summary>
        /// <param name="terrain">The terrain to render. Cannot be null.</param>
        /// <param name="patchCoord">The terrain patch coordinates.</param>
        /// <param name="material">The material to apply during rendering. Cannot be null.</param>
        /// <param name="lodIndex">The geometry Level Of Detail index.</param>
        public void AddDrawCall(Terrain terrain, ref Int2 patchCoord, MaterialBase material, int lodIndex = -1)
        {
            if (terrain == null)
            {
                throw new ArgumentNullException(nameof(terrain));
            }
            if (material == null)
            {
                throw new ArgumentNullException(nameof(material));
            }

            for (int i = 0; i < 16; i++)
            {
                var drawCall = new RenderTask.DrawCall
                {
                    Type     = RenderTask.DrawCall.Types.TerrainChunk,
                    Flags    = StaticFlags.None,
                    LodIndex = lodIndex,
                    Index0   = patchCoord,
                    Index1   = new Int2(i % 4, i / 4),
                    Object   = terrain.unmanagedPtr,
                    Material = Object.GetUnmanagedPtr(material),
                };

                _drawCalls.Add(drawCall);
            }
        }
Esempio n. 11
0
    public static Dictionary <Guid, RecipeInformation> GetValue(List <BaseItem> ItemList)
    {
        //持っている装備を抽出
        BaseItem[] equips = ItemList.Where(i => i.IType == ItemType.Weapon || i.IType == ItemType.Shield).ToArray();

        //持っている強化素材を抽出
        long[] materials = ItemList.Where(i => (i.GetType() == typeof(MaterialBase) && ((MaterialBase)i).MType == MaterialType.Strength)).Select(i => i.ObjNo).Distinct().ToArray();

        //強化素材の一覧を抽出
        MaterialBase smate = TableMaterial.GetItem(MaterialType.Strength);
        //TableStrengthData[] datas = Array.FindAll(Table, i => i.RType == type);

        Dictionary <Guid, RecipeInformation> result = new Dictionary <Guid, RecipeInformation>();

        foreach (BaseItem d in equips)
        {
            int cnt = 0;
            if (materials.Length > 0)
            {
                foreach (long m in materials)
                {
                    MaterialBase mb = TableMaterial.GetItem(m, false);
                    if (d.StrengthValue < mb.StrengthValue)
                    {
                        RecipeInformation rec = new RecipeInformation();
                        rec.Weight           = d.Weight;
                        rec.RecipeTargetName = d.DisplayNameNormal;
                        rec.RecipeTargetNo   = d.ObjNo;
                        rec.RecipeTargetType = d.IType;
                        rec.SetRecipeValue(d.ObjNo, d.IType, 1, d.StrengthValue);
                        rec.SetRecipeValue(m, ItemType.Material, 1, d.StrengthValue + 1);

                        rec.IsStrength     = true;
                        rec.TargetStrength = d;

                        result.Add(rec.Name, rec);

                        cnt++;
                    }
                }
            }
            if (cnt == 0)
            {
                RecipeInformation rec = new RecipeInformation();
                rec.RecipeTargetName = d.DisplayNameNormal;
                rec.RecipeTargetNo   = d.ObjNo;
                rec.RecipeTargetType = d.IType;
                rec.SetRecipeValue(d.ObjNo, d.IType, 1, d.StrengthValue);
                rec.SetRecipeValue(smate.ObjNo, ItemType.Material, 1, d.StrengthValue + 1);

                rec.IsStrength     = true;
                rec.TargetStrength = d;

                result.Add(rec.Name, rec);
            }
        }

        return(result);
    }
Esempio n. 12
0
        public void DrawPostFxMaterial(MaterialBase material, RenderTarget output, RenderTarget input, SceneRenderTask sceneRenderTask)
        {
#if UNIT_TEST_COMPILANT
            throw new NotImplementedException("Unit tests, don't support methods calls. Only properties can be get or set.");
#else
            Internal_DrawPostFxMaterial2(unmanagedPtr, GetUnmanagedPtr(material), GetUnmanagedPtr(output), GetUnmanagedPtr(input), ref sceneRenderTask.View, Object.GetUnmanagedPtr(sceneRenderTask.Buffers));
#endif
        }
Esempio n. 13
0
        public void DrawPostFxMaterial(MaterialBase material, RenderTargetView view, ref Viewport viewport, RenderTarget input = null)
        {
#if UNIT_TEST_COMPILANT
            throw new NotImplementedException("Unit tests, don't support methods calls. Only properties can be get or set.");
#else
            Internal_DrawPostFxMaterial3(unmanagedPtr, Object.GetUnmanagedPtr(material), view, ref viewport, Object.GetUnmanagedPtr(input));
#endif
        }
Esempio n. 14
0
 internal MaterialParameter(int hash, MaterialBase material, int index, MaterialParameterType type, bool isPublic)
 {
     _hash     = hash;
     _material = material;
     _index    = index;
     _type     = type;
     _isPublic = isPublic;
 }
        public override void Calculate(MaterialBase material)
        {
            var projectCost = material as ProjectCost;

            var sum = viewModel.Details.Where(x => x.id != 18).Aggregate(0d, (totoal, x) => totoal + Convert.ToDouble(x.cost));

            viewModel.Details.Where(x => x.id == 18).First().cost = sum.ToString();
        }
        public override void Calculate(MaterialBase material)
        {
            var parts = material as CostAdjustment;

            if (parts != null)
            {
                parts.US = Math.Round(parts.RMB / Sys.ExchangeRate[0].Current, 2);
            }
        }
Esempio n. 17
0
        public override void Calculate(MaterialBase material)
        {
            var parts = material as PurchasedParts;

            if (parts != null)
            {
                parts.sum    = Math.Round(parts.qty * parts.unitPrice, 2);
                parts.remark = Math.Round(parts.sum / Sys.ExchangeRate[0].Current, 2);
            }
        }
    public static MaterialBase GetItem(MaterialType type)
    {
        TableMaterialData data = Array.Find(Table, i => i.Mtype == type);

        MaterialBase item = new MaterialBase();

        item.Initialize();
        AttachData(item, data, false);
        return(item);
    }
    public static MaterialBase GetItem(long objNo, bool isRandomValue)
    {
        TableMaterialData data = Array.Find(Table, i => i.ObjNo == objNo);
        MaterialBase      item = new MaterialBase();

        item.Initialize();
        AttachData(item, data, isRandomValue);

        return(item);
    }
Esempio n. 20
0
        private void GetAssets()
        {
            if (_planeModel)
            {
                return;
            }

            _planeModel = FlaxEngine.Content.LoadAsyncInternal <Model>("Editor/Primitives/Plane");
            _highlightTerrainMaterial = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>(EditorAssets.HighlightTerrainMaterial);
            _highlightMaterial        = EditorAssets.Cache.HighlightMaterialInstance;
        }
        public PostFxRenderer(MaterialBase material, Func <Int2> sizeGetter) : base(sizeGetter)
        {
            if (!material.IsPostFx)
            {
                throw new ArgumentException("PostFx Material expected", nameof(material));
            }
            if (!material)
            {
                throw new ArgumentNullException(nameof(material));
            }

            Material = material;
        }
    private static void AttachData(MaterialBase item, TableMaterialData data, bool isRandomValue)
    {
        item.ObjNo = data.ObjNo;
        item.MType = data.Mtype;
        if (GameStateInformation.IsEnglish == false)
        {
            item.DisplayName = data.DisplayName;
            item.Description = data.Description;
        }
        else
        {
            item.DisplayName = data.DisplayNameEn;
            item.Description = data.DescriptionEn;
        }
        item.ThrowDexterity = data.ThrowDexterity;
        item.StrengthValue  = data.Strength;

        if (isRandomValue == false)
        {
            return;
        }

        int optioncount = CommonFunction.ConvergenceRandom(data.OptionAddStart, data.OptionAddContinue, data.OptionAddReduce);
        int index       = 0;

        for (int i = 0; i < optioncount; i++)
        {
            //30回回して終わらなかったら強制終了
            if (index > 30)
            {
                break;
            }
            index++;
            uint       rnd    = CommonFunction.GetRandomUInt32();
            BaseOption newOpt = TableOptionCommon.GetValue(data.OBType, rnd, data.OptionPowStart, data.OptionPowContinue, data.OptionPowReduce);

            //同じオプションがすでに含まれていたらもう一度算出
            if (CommonFunction.IsNull(newOpt) == true)
            {
                i--;
                continue;
            }
            BaseOption containOpt = item.Options.Find(o => o.ObjNo == newOpt.ObjNo);
            if (CommonFunction.IsNull(containOpt) == false)
            {
                i--;
                continue;
            }
            item.Options.Add(newOpt);
        }
    }
Esempio n. 23
0
 private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
 {
     editMetal = e.Row.Item as MaterialBase;
     //editMetal.EndEdit();
     try
     {
         var content = (e.EditingElement as TextBox).Text;
         matetrialRepository.Calculate(editMetal, e.Column, content);
     }
     catch (Exception ex)
     {
         //log
     }
 }
Esempio n. 24
0
        public override void Calculate(MaterialBase material)
        {
            var metal = material as Metal;

            if (metal != null)
            {
                var cost   = Sys.metalMaterials.Find(x => x.id == metal.materialId)?.cost ?? 0;
                var t_cost = Sys.metalTonnages.Find(x => x.id == metal.tonnageId)?.cost ?? 0;
                //volume
                metal.m_volume = Math.Round((metal.m_length + 10) * (metal.m_width + 10) * metal.m_thick, 2);
                //m_weigth
                metal.m_weigth = Math.Round(metal.m_volume * 0.00000785, 3);
                //loss
                metal.loss = Math.Round(metal.m_weigth * 0.03, 4);

                // 加工成本
                metal.finishedCost1 = Math.Round(metal.m_workStation * metal.qty * t_cost, 2);

                //材料成本
                metal.costOfMeterial1 = Math.Round((metal.m_weigth + metal.loss) * cost * metal.qty, 2);

                //total(材料成本 + 加工成本 + CMF)/ 良率
                metal.total1 = Math.Round((metal.costOfMeterial1 + metal.finishedCost1 + metal.CMF1) / (metal.yield / 100), 2);

                if (double.IsNaN(metal.total1) || double.IsInfinity(metal.total1))
                {
                    metal.total1 = 0;
                }

                // 加工成本2
                metal.finishedCost2 = Math.Round(metal.finishedCost1 / Sys.ExchangeRate.First().Current, 2);

                //材料成本2
                metal.costOfMeterial2 = Math.Round(metal.costOfMeterial1 / Sys.ExchangeRate.First().Current, 2);

                //CMF2
                metal.CMF2 = Math.Round(metal.CMF1 / Sys.ExchangeRate.First().Current, 2);

                //total2
                metal.total2 = Math.Round(metal.total1 / Sys.ExchangeRate.First().Current, 2);

                if (double.IsNaN(metal.total2) || double.IsInfinity(metal.total2))
                {
                    metal.total2 = 0;
                }
            }
        }
    public static List <MaterialBase> GetItems(MaterialType type)
    {
        TableMaterialData[] datas = Array.FindAll(Table, i => i.Mtype == type);

        List <MaterialBase> list = new List <MaterialBase>();

        foreach (TableMaterialData data in datas)
        {
            MaterialBase item = new MaterialBase();
            item.Initialize();
            AttachData(item, data, false);

            list.Add(item);
        }

        return(list);
    }
Esempio n. 26
0
        /// <inheritdoc />
        public override void OnActivated()
        {
            base.OnActivated();

            _highlightMaterial = EditorAssets.Cache.HighlightMaterialInstance;

            if (_needSync)
            {
                _needSync = false;

                // Sync with main transform gizmo
                var mainTransformGizmo = Editor.Instance.MainTransformGizmo;
                ActiveMode                                = mainTransformGizmo.ActiveMode;
                ActiveTransformSpace                      = mainTransformGizmo.ActiveTransformSpace;
                mainTransformGizmo.ModeChanged           += () => ActiveMode = mainTransformGizmo.ActiveMode;
                mainTransformGizmo.TransformSpaceChanged += () => ActiveTransformSpace = mainTransformGizmo.ActiveTransformSpace;
            }
        }
Esempio n. 27
0
        /// <inheritdoc />
        public override void OnActivated()
        {
            base.OnActivated();

            _highlightMaterial = FlaxEngine.Content.LoadAsyncInternal <MaterialBase>(EditorAssets.HighlightMaterial);

            if (_needSync)
            {
                _needSync = false;

                // Sync with main transform gizmo
                var mainTransformGizmo = Editor.Instance.MainTransformGizmo;
                ActiveMode                                = mainTransformGizmo.ActiveMode;
                ActiveTransformSpace                      = mainTransformGizmo.ActiveTransformSpace;
                mainTransformGizmo.ModeChanged           += () => ActiveMode = mainTransformGizmo.ActiveMode;
                mainTransformGizmo.TransformSpaceChanged += () => ActiveTransformSpace = mainTransformGizmo.ActiveTransformSpace;
            }
        }
        public virtual void Calculate(MaterialBase materialBase, DataGridColumn column, Object value, Dictionary <string, ColumnProp> props)
        {
            try
            {
                var metal    = materialBase as T;
                var propName = props.Where(x => x.Value.description == column.Header.ToString()).First();
                System.Reflection.PropertyInfo prop = materialBase.GetType().GetProperty(propName.Key, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                var val = Convert.ChangeType(value, prop.PropertyType);
                prop.SetValue(metal, val, null);

                Calculate(materialBase);

                metal.NotifyAllProps();
            }
            catch (Exception ex)
            {
                //log
            }
        }
Esempio n. 29
0
        // Event handler for change in selected list box item.
        private void lbxMainStocks_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Get the selected material.
            MaterialBase selectedMaterial = (MaterialBase)lbxMainStocks.SelectedItem;
            // Get the stock in the main storeroom.
            decimal onHand = _services.AMS.Storeroom(new StoreroomService.StoreroomStocks {
                MaterialSid = selectedMaterial.MaterialSid
            }).Value[0].StockOnHand;

            // Change the rich text box below the stocks list to display information about the selected material.
            rtbStockInfo.Text =
                $"ID:\t\t{selectedMaterial.MaterialSid}\n" +
                $"Unit:\t\t{selectedMaterial.UnitOfMeasure}\n" +
                $"Quantity:\t\t{onHand}\n" +
                $"Unit Price:\t${selectedMaterial.UnitCost}";
            // Limit the maximum transferable quantity to the stock on hand.
            numTransferQuantity.Maximum = onHand;
            // Reset the transfer quantity.
            numTransferQuantity.Value = 0;
        }
Esempio n. 30
0
        /// <summary>
        /// Adds the draw call.
        /// </summary>
        /// <param name="mesh">The mesh to render. Cannot be null.</param>
        /// <param name="material">The material to apply during rendering. Cannot be null.</param>
        /// <param name="world">The world matrix used to transform mesh geometry during rendering. Use <see cref="Matrix.Identity"/> to render mesh 'as is'.</param>
        /// <param name="flags">The static flags. Used to describe type of the geometry.</param>
        public void AddDrawCall(Mesh mesh, MaterialBase material, ref Matrix world, StaticFlags flags = StaticFlags.None)
        {
            if (mesh == null)
            {
                throw new ArgumentNullException(nameof(mesh));
            }
            if (material == null)
            {
                throw new ArgumentNullException(nameof(material));
            }

            var drawCall = new RenderTask.DrawCall
            {
                Flags             = flags,
                LodIndex          = mesh._lodIndex,
                MeshIndex         = mesh._meshIndex,
                AssetModel        = Object.GetUnmanagedPtr(mesh.ParentModel),
                AssetMaterialBase = Object.GetUnmanagedPtr(material),
                World             = world
            };

            _drawCalls.Add(drawCall);
        }