Exemplo n.º 1
0
        /// <summary>
        /// Creates a substance from the given element entry
        /// </summary>
        /// <param name="entry">The entry</param>
        /// <returns></returns>
        public static Substance CreateSubstance(ElementLoader.ElementEntry entry)
        {
            var state = entry.state;
            var id    = GetElementID(entry);
            var ext   = entry is ElementEntryExtended ? (ElementEntryExtended)entry : null;

            var material         = ElementManager.GetBaseMaterialForState(state, substanceTable);
            var materialOverride = ext != null ? ext.material : null;

            if (material == null)
            {
                string materialName = id.ToLower();
                var    tex          = Assets.GetTexture(materialOverride ?? materialName);
                if (tex != null)
                {
                    material.mainTexture = tex;
                }
                else
                {
                    ElementManager.Logger.Verbose("No material texture '{0}', using default: {1}", materialName, material.mainTexture.name);
                }
                material.name = materialName;
            }

            // get anim
            var       animName = ((ext != null ? ext.anim : null) ?? id.ToLower()) + PLUtil.SUFFIX_ANIM;
            KAnimFile animFile = Assets.Anims.Find(a => a.name == animName);

            if (animFile == null)
            {
                animFile = ElementManager.GetDefaultKAnimForState(state, substanceTable);
                if (state == Element.State.Solid)
                {
                    Logger.Verbose("No anim '{0}' found for {1}, using default: {2}", animName, id, animFile.name);
                }
            }

            // colors
            var color        = CreateColor32(ext != null ? ext.color : null);
            var uiColor      = CreateColor32(ext != null ? ext.colorUI ?? ext.color : null);
            var conduitColor = CreateColor32(ext != null ? ext.colorUI ?? ext.color : null);

            Logger.Verbose("Created Substance: {0}({1})", id, (int)GetElementHash(entry));
            return(ModUtil.CreateSubstance(id, state, animFile, material, color, uiColor, conduitColor));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Merges the given element entries into the given source value
 /// </summary>
 /// <param name="source">The source entry to load into</param>
 /// <param name="from">The entries to load from</param>
 public static void MergeElementEntries(ElementLoader.ElementEntry source, params ElementLoader.ElementEntry[] from)
 {
     foreach (var entry in from)
     {
         foreach (var field in entry.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
         {
             var value = field.GetValue(entry);
             if (value != null)
             {
                 field.SetValue(source, value);
             }
         }
         foreach (var prop in entry.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
         {
             var value = prop.GetGetMethod().Invoke(entry, new object[0]);
             if (value != null)
             {
                 prop.GetSetMethod().Invoke(source, new object[1] {
                     value
                 });
             }
         }
     }
 }
Exemplo n.º 3
0
 /// <summary>
 /// Gets a <see cref="SimHashes"/> representing this entry
 /// </summary>
 /// <param name="entry">The entry</param>
 /// <returns></returns>
 public static SimHashes GetElementHash(ElementLoader.ElementEntry entry)
 {
     return(GetElementHash(GetElementID(entry)));
 }
Exemplo n.º 4
0
 /// <summary>
 /// Gets an element's ID from a given entry
 /// </summary>
 /// <param name="entry">The entry to get the ID from</param>
 /// <returns></returns>
 public static string GetElementID(ElementLoader.ElementEntry entry)
 {
     return(entry.elementId);
 }