예제 #1
0
        public Ship(ShipSerializable serializable, Database database)
        {
            Id                 = new ItemId <Ship>(serializable.Id, serializable.FileName);
            ShipCategory       = serializable.ShipCategory;
            Name               = serializable.Name;
            Faction            = database.GetFactionId(serializable.Faction);
            SizeClass          = serializable.SizeClass;
            IconImage          = serializable.IconImage;
            IconScale          = new NumericValue <float>(serializable.IconScale, 0.1f, 100f);
            ModelImage         = serializable.ModelImage;
            ModelScale         = new NumericValue <float>(serializable.ModelScale, 0.1f, 100f);
            EnginePosition     = serializable.EnginePosition;
            EngineColor        = Helpers.ColorFromString(serializable.EngineColor);
            EngineSize         = new NumericValue <float>(serializable.EngineSize, 0f, 1f);
            Engines            = serializable.Engines?.Select(item => new Engine(item, database)).ToArray();
            EnergyResistance   = new NumericValue <float>(serializable.EnergyResistance, -100f, 100f);
            KineticResistance  = new NumericValue <float>(serializable.KineticResistance, -100f, 100f);
            HeatResistance     = new NumericValue <float>(serializable.HeatResistance, -100f, 100f);
            Regeneration       = serializable.Regeneration;
            BaseWeightModifier = new NumericValue <float>(serializable.BaseWeightModifier, -0.9f, 1000f);
            BuiltinDevices     = serializable.BuiltinDevices?.Select(id => new Wrapper <Device> {
                Item = database.GetDeviceId(id)
            }).ToArray();
            Layout  = new Layout(serializable.Layout);
            Barrels = serializable.Barrels?.Select(item => new Barrel(item, database)).ToArray();

            OnDataDeserialized(serializable, database);
        }
예제 #2
0
        private Ship(ShipSerializable serializable, Database.Loader loader)
        {
            Id = new ItemId <Ship>(serializable.Id);
            loader.AddShip(serializable.Id, this);

            ShipCategory       = serializable.ShipCategory;
            Name               = serializable.Name;
            Faction            = loader.GetFaction(new ItemId <Faction>(serializable.Faction));
            SizeClass          = serializable.SizeClass;
            IconImage          = new SpriteId(serializable.IconImage, SpriteId.Type.ShipIcon);
            IconScale          = UnityEngine.Mathf.Clamp(serializable.IconScale, 0.1f, 100f);
            ModelImage         = new SpriteId(serializable.ModelImage, SpriteId.Type.Ship);
            ModelScale         = UnityEngine.Mathf.Clamp(serializable.ModelScale, 0.1f, 100f);
            _enginePosition    = serializable.EnginePosition;
            EngineColor        = new ColorData(serializable.EngineColor);
            _engineSize        = UnityEngine.Mathf.Clamp(serializable.EngineSize, 0f, 1f);
            Engines            = new ImmutableCollection <Engine>(serializable.Engines?.Select(item => Engine.Create(item, loader)));
            EnergyResistance   = UnityEngine.Mathf.Clamp(serializable.EnergyResistance, -100f, 100f);
            KineticResistance  = UnityEngine.Mathf.Clamp(serializable.KineticResistance, -100f, 100f);
            HeatResistance     = UnityEngine.Mathf.Clamp(serializable.HeatResistance, -100f, 100f);
            Regeneration       = serializable.Regeneration;
            BaseWeightModifier = UnityEngine.Mathf.Clamp(serializable.BaseWeightModifier, -0.9f, 1000f);
            BuiltinDevices     = new ImmutableCollection <Device>(serializable.BuiltinDevices?.Select(item => loader.GetDevice(new ItemId <Device>(item), true)));
            Layout             = new Layout(serializable.Layout);
            Barrels            = new ImmutableCollection <Barrel>(serializable.Barrels?.Select(item => Barrel.Create(item, loader)));

            OnDataDeserialized(serializable, loader);
        }
예제 #3
0
        public ShipSerializable Serialize()
        {
            var serializable = new ShipSerializable();

            serializable.Id                 = ItemId.Id;
            serializable.FileName           = ItemId.Name;
            serializable.ItemType           = (int)ItemType.Ship;
            serializable.ShipCategory       = ShipCategory;
            serializable.Name               = Name;
            serializable.Faction            = Faction.Id;
            serializable.SizeClass          = SizeClass;
            serializable.IconImage          = IconImage.ToString();
            serializable.IconScale          = IconScale.Value;
            serializable.ModelImage         = ModelImage.ToString();
            serializable.ModelScale         = ModelScale.Value;
            serializable.EnginePosition     = EnginePosition;
            serializable.EngineColor        = Utils.ColorUtils.ColorToString(EngineColor);
            serializable.EngineSize         = EngineSize.Value;
            serializable.EnergyResistance   = EnergyResistance.Value;
            serializable.KineticResistance  = KineticResistance.Value;
            serializable.HeatResistance     = HeatResistance.Value;
            serializable.Regeneration       = Regeneration;
            serializable.BaseWeightModifier = BaseWeightModifier.Value;
            serializable.BuiltinDevices     = BuiltinDevices?.Select(item => item.Item.Id).ToArray();
            serializable.Layout             = Layout.Data;
            serializable.Barrels            = Barrels?.Select(item => item.Serialize()).ToArray();
            return(serializable);
        }
예제 #4
0
 public void Save(ShipSerializable serializable)
 {
     serializable.ShipCategory   = ShipCategory;
     serializable.Name           = Name;
     serializable.Faction        = Faction.Value;
     serializable.SizeClass      = SizeClass;
     serializable.IconImage      = IconImage;
     serializable.IconScale      = IconScale.Value;
     serializable.ModelImage     = ModelImage;
     serializable.ModelScale     = ModelScale.Value;
     serializable.EnginePosition = EnginePosition;
     serializable.EngineColor    = Helpers.ColorToString(EngineColor);
     serializable.EngineSize     = EngineSize.Value;
     if (Engines == null || Engines.Length == 0)
     {
         serializable.Engines = null;
     }
     else
     {
         serializable.Engines = Engines.Select(item => item.Serialize()).ToArray();
     }
     serializable.EnergyResistance   = EnergyResistance.Value;
     serializable.KineticResistance  = KineticResistance.Value;
     serializable.HeatResistance     = HeatResistance.Value;
     serializable.Regeneration       = Regeneration;
     serializable.BaseWeightModifier = BaseWeightModifier.Value;
     if (BuiltinDevices == null || BuiltinDevices.Length == 0)
     {
         serializable.BuiltinDevices = null;
     }
     else
     {
         serializable.BuiltinDevices = BuiltinDevices.Select(wrapper => wrapper.Item.Value).ToArray();
     }
     serializable.Layout = Layout.Data;
     if (Barrels == null || Barrels.Length == 0)
     {
         serializable.Barrels = null;
     }
     else
     {
         serializable.Barrels = Barrels.Select(item => item.Serialize()).ToArray();
     }
     OnDataSerialized(ref serializable);
 }
예제 #5
0
 public static Ship Create(ShipSerializable serializable, Database.Loader loader)
 {
     return(new Ship(serializable, loader));
 }
예제 #6
0
 partial void OnDataDeserialized(ShipSerializable serializable, Database.Loader loader);
예제 #7
0
 partial void OnDataSerialized(ref ShipSerializable serializable);
예제 #8
0
 partial void OnDataDeserialized(ShipSerializable serializable, Database database);
예제 #9
0
 public static ShipData Deserialize(ShipSerializable serializable, Database database)
 {
     return(new ShipData(serializable, database));
 }