public ForgedWeapon(ForgedWeapon weapon, IMaterialComponent component)
        {
            ComponentName         = string.Format("{0}, {1}", weapon.ComponentName, component.ComponentName);
            GivenName             = weapon.GivenName;
            WeaponName            = string.Format("{0} {1}", component.ComponentName, weapon.WeaponName);
            Proficiency           = weapon.Proficiency;
            WeaponCategory        = weapon.WeaponCategory;
            WeaponSubCategory     = weapon.WeaponSubCategory;
            WeaponUse             = weapon.WeaponUse;
            Damage                = weapon.Damage;
            CriticalDamage        = weapon.CriticalDamage;
            DamageType            = weapon.DamageType;
            MaxRange              = weapon.MaxRange;
            RangeIncrement        = weapon.RangeIncrement;
            ThreatRange           = weapon.ThreatRange;
            ThreatRangeLowerBound = weapon.ThreatRangeLowerBound;
            WeaponSize            = weapon.WeaponSize;
            Hardness              = weapon.Hardness;
            HitPoints             = weapon.HitPoints;

            WeaponCost = component.ApplyCostModifier(weapon);
            AdditionalEnchantmentCost = weapon.AdditionalEnchantmentCost;
            ToHitModifier             = component.ApplyToHitModifier();
            DamageBonus  = weapon.DamageBonus;
            Weight       = component.ApplyWeightModifer(weapon);
            SpecialInfo  = component.AppendSpecialInfo(weapon);
            IsMasterwork = component.VerifyMasterwork(weapon);
        }
Exemple #2
0
        public ForgedWeapon(ForgedWeapon weapon, IMaterialComponent component)
        {
            ComponentName = string.Format("{0}, {1}",weapon.ComponentName, component.ComponentName);
            GivenName = weapon.GivenName;
            WeaponName = string.Format("{0} {1}", component.ComponentName, weapon.WeaponName);
            Proficiency = weapon.Proficiency;
            WeaponCategory = weapon.WeaponCategory;
            WeaponSubCategory = weapon.WeaponSubCategory;
            WeaponUse = weapon.WeaponUse;
            Damage = weapon.Damage;
            CriticalDamage = weapon.CriticalDamage;
            DamageType = weapon.DamageType;
            MaxRange = weapon.MaxRange;
            RangeIncrement = weapon.RangeIncrement;
            ThreatRange = weapon.ThreatRange;
            ThreatRangeLowerBound = weapon.ThreatRangeLowerBound;
            WeaponSize = weapon.WeaponSize;
            Hardness = weapon.Hardness;
            HitPoints = weapon.HitPoints;

            WeaponCost = component.ApplyCostModifier(weapon);
            AdditionalEnchantmentCost = weapon.AdditionalEnchantmentCost;
            ToHitModifier = component.ApplyToHitModifier();
            DamageBonus = weapon.DamageBonus;
            Weight = component.ApplyWeightModifer(weapon);
            SpecialInfo = component.AppendSpecialInfo(weapon);
            IsMasterwork = component.VerifyMasterwork(weapon);
        }
        public void OnLoad()
        {
            _vertexArrayObject = GL.GenVertexArray();
            GL.BindVertexArray(_vertexArrayObject);
            GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
            foreach (ISceneObject sceneObject in _sceneManager.Scene.SceneObjects)
            {
                //Find model component in scene object.
                if (sceneObject.components.TryGetValue("ModelSceneObjectComponent", out _modelObjectComponent))
                {
                    //Get model from scene object.
                    IModelComponent currentModelComponent = (IModelComponent)_modelObjectComponent;
                    //Generate buffer on OGL side and assign id of that buffer to model.
                    currentModelComponent.Model.VertexBufferObjectId = GL.GenBuffer();
                    //Bind created buffer to ArrayBuffer target.
                    GL.BindBuffer(BufferTarget.ArrayBuffer, currentModelComponent.Model.VertexBufferObjectId);
                    //Get all vertices from model.
                    float[] VBOData = currentModelComponent.GetVBODataOfModel();

                    //VBO Data consist of 5 digits(for now) 1st three - vertex positions, 4th and 4th item - texture coordinate
                    StringBuilder sb = new StringBuilder("Vertex coordinates:");
                    for (int i = 0; i < VBOData.Length; i++)
                    {
                        if (i != 0 && (i % 4 == 0 || i % 3 == 0))
                        {
                            continue;
                        }
                        else
                        {
                            sb.Append(" ");
                            sb.Append(VBOData[i]);
                        }
                    }
                    Console.WriteLine(sb.ToString());
                    //Load model data to GPU.
                    GL.BufferData(BufferTarget.ArrayBuffer, VBOData.Length * sizeof(float), VBOData, BufferUsageHint.StaticDraw);
                }

                if (sceneObject.components.TryGetValue("MaterialSceneObjectComponent", out _materialObjectComponent))
                {
                    //Get material from scene object.
                    IMaterialComponent currentMaterialComponent = (IMaterialComponent)_materialObjectComponent;
                    GL.VertexAttribPointer(currentMaterialComponent.ShaderProgram.GetAttributeAddress("aPosition"),
                                           3, VertexAttribPointerType.Float, false, 5 * sizeof(float), 0);
                }
            }
        }
        public void OnRender()
        {
            GL.Clear(ClearBufferMask.ColorBufferBit);

            foreach (ISceneObject sceneObject in _sceneManager.Scene.SceneObjects)
            {
                if (sceneObject.components.TryGetValue("MaterialSceneObjectComponent", out _materialObjectComponent))
                {
                    //Get material from scene object.
                    IMaterialComponent currentMaterialComponent = (IMaterialComponent)_materialObjectComponent;
                    currentMaterialComponent.ShaderProgram.EnableVertexAttribArrays();
                    currentMaterialComponent.ShaderProgram.UseProgram();
                }

                // Bind the VAO
                GL.BindVertexArray(_vertexArrayObject);
                GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
            }
        }