public ComponentStats(SerializableComponentStats stats, Database database)
        {
            ItemId = new ItemId <ComponentStats>(stats.Id, stats.FileName);

            Type = stats.Type;

            ArmorPoints                 = new NumericValue <float>(stats.ArmorPoints, -1000, 1000);
            ArmorRepairRate             = new NumericValue <float>(stats.ArmorRepairRate, -1000, 1000);
            ArmorRepairCooldownModifier = new NumericValue <float>(stats.ArmorRepairCooldownModifier, -1f, 1f);

            EnergyPoints                   = new NumericValue <float>(stats.EnergyPoints, -1000, 1000);
            EnergyRechargeRate             = new NumericValue <float>(stats.EnergyRechargeRate, -1000, 1000);
            EnergyRechargeCooldownModifier = new NumericValue <float>(stats.EnergyRechargeCooldownModifier, -1f, 1f);

            ShieldPoints                   = new NumericValue <float>(stats.ShieldPoints, -1000, 1000);
            ShieldRechargeRate             = new NumericValue <float>(stats.ShieldRechargeRate, -1000, 1000);
            ShieldRechargeCooldownModifier = new NumericValue <float>(stats.ShieldRechargeCooldownModifier, -1f, 1f);

            Weight = new NumericValue <float>(stats.Weight, -10000, 10000);

            KineticResistance = new NumericValue <float>(stats.KineticResistance, -1000, 1000);
            EnergyResistance  = new NumericValue <float>(stats.EnergyResistance, -1000, 1000);
            ThermalResistance = new NumericValue <float>(stats.ThermalResistance, -1000, 1000);

            RammingDamage    = new NumericValue <float>(stats.RammingDamage, 0, 1000);
            EnergyAbsorption = new NumericValue <float>(stats.EnergyAbsorption, 0, 1000);

            EnginePower = new NumericValue <float>(stats.EnginePower, 0, 20);
            TurnRate    = new NumericValue <float>(stats.TurnRate, 0, 20);

            Autopilot = stats.Autopilot;

            DroneDamageModifier    = new NumericValue <float>(stats.DroneDamageModifier, -5, 5);
            DroneRangeModifier     = new NumericValue <float>(stats.DroneRangeModifier, -5, 5);
            DroneDefenseModifier   = new NumericValue <float>(stats.DroneDefenseModifier, -5, 5);
            DroneSpeedModifier     = new NumericValue <float>(stats.DroneSpeedModifier, -5, 5);
            DronesBuiltPerSecond   = new NumericValue <float>(stats.DronesBuiltPerSecond, 0, 10);
            DroneBuildTimeModifier = new NumericValue <float>(stats.DroneBuildTimeModifier, 0, 10);

            WeaponFireRateModifier   = new NumericValue <float>(stats.WeaponFireRateModifier, -1, 1);
            WeaponDamageModifier     = new NumericValue <float>(stats.WeaponDamageModifier, -1, 1);
            WeaponRangeModifier      = new NumericValue <float>(stats.WeaponRangeModifier, -1, 1);
            WeaponEnergyCostModifier = new NumericValue <float>(stats.WeaponEnergyCostModifier, -1, 1);

            AlterWeaponPlatform = stats.AlterWeaponPlatform;
        }
        public void Save(SerializableComponentStats serializable)
        {
            serializable.Type = Type;

            serializable.ArmorPoints                 = ArmorPoints.Value;
            serializable.ArmorRepairRate             = ArmorRepairRate.Value;
            serializable.ArmorRepairCooldownModifier = ArmorRepairCooldownModifier.Value;

            serializable.EnergyPoints                   = EnergyPoints.Value;
            serializable.EnergyRechargeRate             = EnergyRechargeRate.Value;
            serializable.EnergyRechargeCooldownModifier = EnergyRechargeCooldownModifier.Value;

            serializable.ShieldPoints                   = ShieldPoints.Value;
            serializable.ShieldRechargeRate             = ShieldRechargeRate.Value;
            serializable.ShieldRechargeCooldownModifier = ShieldRechargeCooldownModifier.Value;

            serializable.Weight = Weight.Value;

            serializable.RammingDamage    = RammingDamage.Value;
            serializable.EnergyAbsorption = EnergyAbsorption.Value;

            serializable.KineticResistance = KineticResistance.Value;
            serializable.EnergyResistance  = EnergyResistance.Value;
            serializable.ThermalResistance = ThermalResistance.Value;

            serializable.EnginePower = EnginePower.Value;
            serializable.TurnRate    = TurnRate.Value;

            serializable.Autopilot = Autopilot;

            serializable.DroneRangeModifier     = DroneRangeModifier.Value;
            serializable.DroneDamageModifier    = DroneDamageModifier.Value;
            serializable.DroneDefenseModifier   = DroneDefenseModifier.Value;
            serializable.DroneSpeedModifier     = DroneSpeedModifier.Value;
            serializable.DronesBuiltPerSecond   = DronesBuiltPerSecond.Value;
            serializable.DroneBuildTimeModifier = DroneBuildTimeModifier.Value;

            serializable.WeaponFireRateModifier   = WeaponFireRateModifier.Value;
            serializable.WeaponDamageModifier     = WeaponDamageModifier.Value;
            serializable.WeaponRangeModifier      = WeaponRangeModifier.Value;
            serializable.WeaponEnergyCostModifier = WeaponEnergyCostModifier.Value;

            serializable.AlterWeaponPlatform = AlterWeaponPlatform;
        }