Ejemplo n.º 1
0
 /// <summary>
 /// Converts a string to a plane.
 /// </summary>
 /// <param name="input">The plane string.</param>
 /// <returns>A plane.</returns>
 public static Plane FromString(string input)
 {
     string[] data = input.Replace("[", "").Replace("]", "").Replace(" ", "").SplitFast('/');
     if (data.Length < 3)
     {
         return(null);
     }
     return(new Plane(Location.FromString(data[0]), Location.FromString(data[1]), Location.FromString(data[2])));
 }
Ejemplo n.º 2
0
        public static void Populate(FileHandler files)
        {
            List <string>       fileList = files.ListFiles("info/blocks/");
            List <MaterialInfo> allmats  = new List <MaterialInfo>((int)Material.NUM_DEFAULT);

            foreach (string file in fileList)
            {
                string f = file.ToLowerFast().After("/blocks/").Before(".blk");
                if (TryGetFromNameOrNumber(allmats, f, out Material mat))
                {
                    continue;
                }
                mat = (Material)Enum.Parse(typeof(Material), f.ToUpperInvariant());
                string       data  = files.ReadText("info/blocks/" + f + ".blk");
                string[]     split = data.Replace("\r", "").Split('\n');
                MaterialInfo inf   = new MaterialInfo((int)mat);
                for (int i = 0; i < split.Length; i++)
                {
                    if (split[i].StartsWith("//") || !split[i].Contains("="))
                    {
                        continue;
                    }
                    string[] opt = split[i].SplitFast('=', 1);
                    switch (opt[0].ToLowerFast())
                    {
                    case "name":
                        inf.SetName(opt[1]);
                        break;

                    case "plant":
                        inf.Plant = opt[1];
                        break;

                    case "plantscale":
                        inf.PlantScale = float.Parse(opt[1]);
                        break;

                    case "plantmultiplier":
                        inf.PlantMultiplier        = float.Parse(opt[1]);
                        inf.InversePlantMultiplier = 1.0f / inf.PlantMultiplier;
                        break;

                    case "sound":
                        inf.Sound = (MaterialSound)Enum.Parse(typeof(MaterialSound), opt[1].ToUpperInvariant());
                        break;

                    case "solidity":
                        inf.Solidity = (MaterialSolidity)Enum.Parse(typeof(MaterialSolidity), opt[1].ToUpperInvariant());
                        break;

                    case "speedmod":
                        inf.SpeedMod = double.Parse(opt[1]);
                        break;

                    case "frictionmod":
                        inf.FrictionMod = double.Parse(opt[1]);
                        break;

                    case "lightdamage":
                        inf.LightDamage = double.Parse(opt[1]);
                        break;

                    case "lightemitrange":
                        inf.LightEmitRange = double.Parse(opt[1]);
                        break;

                    case "lightemit":
                        inf.LightEmit = Location.FromString(opt[1]);
                        break;

                    case "fogalpha":
                        inf.FogAlpha = double.Parse(opt[1]);
                        break;

                    case "opaque":
                        inf.Opaque = opt[1].ToLowerFast() == "true";
                        break;

                    case "spreads":
                        inf.Spreads = opt[1].ToLowerFast() == "true";
                        break;

                    case "rendersatall":
                        inf.RendersAtAll = opt[1].ToLowerFast() == "true";
                        break;

                    case "breaksfromothertools":
                        inf.BreaksFromOtherTools = opt[1].ToLowerFast() == "true";
                        break;

                    case "fogcolor":
                        inf.FogColor = Location.FromString(opt[1]);
                        break;

                    case "canrenderagainstself":
                        inf.CanRenderAgainstSelf = opt[1].ToLowerFast() == "true";
                        break;

                    case "anyopaque":
                        inf.AnyOpaque = opt[1].ToLowerFast() == "true";
                        break;

                    case "spawntype":
                        inf.SpawnType = (MaterialSpawnType)Enum.Parse(typeof(MaterialSpawnType), opt[1].ToUpperInvariant());
                        break;

                    case "hardness":
                        inf.Hardness = double.Parse(opt[1]);
                        break;

                    case "breaktime":
                        inf.BreakTime = opt[1].ToLowerFast() == "infinity" ? double.PositiveInfinity : double.Parse(opt[1]);
                        break;

                    case "breaker":
                        inf.Breaker = (MaterialBreaker)Enum.Parse(typeof(MaterialBreaker), opt[1].ToUpperInvariant());
                        break;

                    case "breaksinto":
                        inf.BreaksInto = (Material)Enum.Parse(typeof(Material), opt[1].ToUpperInvariant());
                        break;

                    case "solidifiesinto":
                        inf.SolidifiesInto = (Material)Enum.Parse(typeof(Material), opt[1].ToUpperInvariant());
                        break;

                    case "bigspreadsas":
                        inf.BigSpreadsAs = (Material)Enum.Parse(typeof(Material), opt[1].ToUpperInvariant());
                        break;

                    case "texturebasic":
                        for (int t = 0; t < (int)MaterialSide.COUNT; t++)
                        {
                            if (inf.Texture[t] == null)
                            {
                                inf.Texture[t] = new List <string>()
                                {
                                    opt[1].ToLowerFast()
                                };
                            }
                        }
                        break;

                    case "texture_top":
                        inf.Texture[(int)MaterialSide.TOP] = new List <string>()
                        {
                            opt[1].ToLowerFast()
                        };
                        break;

                    case "texture_bottom":
                        inf.Texture[(int)MaterialSide.BOTTOM] = new List <string>()
                        {
                            opt[1].ToLowerFast()
                        };
                        break;

                    case "texture_xp":
                        inf.Texture[(int)MaterialSide.XP] = new List <string>()
                        {
                            opt[1].ToLowerFast()
                        };
                        break;

                    case "texture_xm":
                        inf.Texture[(int)MaterialSide.XM] = new List <string>()
                        {
                            opt[1].ToLowerFast()
                        };
                        break;

                    case "texture_yp":
                        inf.Texture[(int)MaterialSide.YP] = new List <string>()
                        {
                            opt[1].ToLowerFast()
                        };
                        break;

                    case "texture_ym":
                        inf.Texture[(int)MaterialSide.YM] = new List <string>()
                        {
                            opt[1].ToLowerFast()
                        };
                        break;

                    case "texturebasic_add":
                        for (int t = 0; t < (int)MaterialSide.COUNT; t++)
                        {
                            inf.Texture[t].Add(opt[1].ToLowerFast());
                        }
                        break;

                    case "texture_top_add":
                        inf.Texture[(int)MaterialSide.TOP].Add(opt[1].ToLowerFast());
                        break;

                    case "texture_bottom_add":
                        inf.Texture[(int)MaterialSide.BOTTOM].Add(opt[1].ToLowerFast());
                        break;

                    case "texture_xp_add":
                        inf.Texture[(int)MaterialSide.XP].Add(opt[1].ToLowerFast());
                        break;

                    case "texture_xm_add":
                        inf.Texture[(int)MaterialSide.XM].Add(opt[1].ToLowerFast());
                        break;

                    case "texture_yp_add":
                        inf.Texture[(int)MaterialSide.YP].Add(opt[1].ToLowerFast());
                        break;

                    case "texture_ym_add":
                        inf.Texture[(int)MaterialSide.YM].Add(opt[1].ToLowerFast());
                        break;

                    default:
                        SysConsole.Output(OutputType.WARNING, "Invalid material option: " + opt[0]);
                        break;
                    }
                }
                while (allmats.Count <= (int)mat)
                {
                    MaterialInfo place = new MaterialInfo(allmats.Count);
                    place.SetName("errno_" + allmats.Count);
                    for (int t = 0; t < (int)MaterialSide.COUNT; t++)
                    {
                        place.Texture[t] = null;
                    }
                    allmats.Add(place);
                }
                allmats[(int)mat] = inf;
            }
            int c = 0;
            Dictionary <string, int> TexturesToIDs = new Dictionary <string, int>();

            for (int i = 0; i < allmats.Count; i++)
            {
                for (int t = 0; t < (int)MaterialSide.COUNT; t++)
                {
                    if (allmats[i].Texture[t] == null)
                    {
                        allmats[i].Texture[t] = new List <string>()
                        {
                            "white"
                        };
                        SysConsole.Output(OutputType.WARNING, "Texture unset for " + ((Material)i) + " side " + ((MaterialSide)t));
                    }
                    List <string> tex = allmats[i].Texture[t];
                    allmats[i].TID[t] = new int[tex.Count];
                    for (int x = 0; x < tex.Count; x++)
                    {
                        int res;
                        if (TexturesToIDs.ContainsKey(tex[x]))
                        {
                            res = TexturesToIDs[tex[x]];
                        }
                        else
                        {
                            TexturesToIDs[tex[x]] = c;
                            res = c;
                            c++;
                        }
                        (allmats[i].TID[t])[x] = res;
                    }
                }
            }
            Textures = new string[c];
            foreach (KeyValuePair <string, int> val in TexturesToIDs)
            {
                Textures[val.Value] = val.Key;
            }
            lock (ALL_MATS)
            {
                SysConsole.Output(OutputType.INIT, "Loaded: " + allmats.Count + " materials!");
                ALL_MATS = allmats;
            }
        }
Ejemplo n.º 3
0
 public static Location StringToLocation(string input)
 {
     return(Location.FromString(input));
 }