mirror of
https://github.com/celisej567/LibBSP.git
synced 2026-01-05 10:10:12 +03:00
Resolve issues of decimal formatting in non-English locales.
This commit is contained in:
@@ -7,6 +7,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Globalization;
|
||||
#if UNITY
|
||||
using UnityEngine;
|
||||
#endif
|
||||
@@ -21,6 +22,8 @@ namespace LibBSP {
|
||||
/// </summary>
|
||||
[Serializable] public class Entity : Dictionary<string, string>, IComparable, IComparable<Entity>, ISerializable {
|
||||
|
||||
private static IFormatProvider _format = CultureInfo.CreateSpecificCulture("en-US");
|
||||
|
||||
public const char ConnectionMemberSeparater = (char)0x1B;
|
||||
|
||||
public List<EntityConnection> connections = new List<EntityConnection>();
|
||||
@@ -334,7 +337,7 @@ namespace LibBSP {
|
||||
target = connection[0],
|
||||
action = connection[1],
|
||||
param = connection[2],
|
||||
delay = Double.Parse(connection[3]),
|
||||
delay = Double.Parse(connection[3], _format),
|
||||
fireOnce = Int32.Parse(connection[4]),
|
||||
unknown0 = connection.Length > 5 ? connection[5] : "",
|
||||
unknown1 = connection.Length > 6 ? connection[6] : "",
|
||||
@@ -361,7 +364,7 @@ namespace LibBSP {
|
||||
if (connections.Count > 0) {
|
||||
output.Append("connections\n{\n");
|
||||
foreach (EntityConnection c in connections) {
|
||||
output.Append(string.Format("\"{0}\" \"{1},{2},{3},{4},{5},{6},{7}\"\n", c.name, c.target, c.action, c.param, c.delay, c.fireOnce, c.unknown0, c.unknown1));
|
||||
output.Append(string.Format("\"{0}\" \"{1},{2},{3},{4},{5},{6},{7}\"\n", c.name, c.target, c.action, c.param, c.delay.ToString(_format), c.fireOnce, c.unknown0, c.unknown1));
|
||||
}
|
||||
output.Append("}\n");
|
||||
}
|
||||
@@ -421,7 +424,7 @@ namespace LibBSP {
|
||||
/// <returns>The numeric value of the value corresponding to <paramref name="key"/>.</returns>
|
||||
public float GetFloat(string key, float? failDefault = null) {
|
||||
try {
|
||||
return Single.Parse(this[key]);
|
||||
return Single.Parse(this[key], _format);
|
||||
} catch (Exception e) {
|
||||
if (!failDefault.HasValue) {
|
||||
throw e;
|
||||
@@ -439,7 +442,7 @@ namespace LibBSP {
|
||||
/// <returns>The numeric value of the value corresponding to <paramref name="key"/>.</returns>
|
||||
public int GetInt(string key, int? failDefault = null) {
|
||||
try {
|
||||
return Int32.Parse(this[key]);
|
||||
return Int32.Parse(this[key], _format);
|
||||
} catch (Exception e) {
|
||||
if (!failDefault.HasValue) {
|
||||
throw e;
|
||||
@@ -459,7 +462,7 @@ namespace LibBSP {
|
||||
string[] nums = this[key].Split(' ');
|
||||
for (int i = 0; i < results.Length && i < nums.Length; ++i) {
|
||||
try {
|
||||
results[i] = System.Single.Parse(nums[i]);
|
||||
results[i] = Single.Parse(nums[i], _format);
|
||||
} catch {
|
||||
results[i] = 0;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
#if UNITY
|
||||
using UnityEngine;
|
||||
#endif
|
||||
@@ -17,6 +18,8 @@ namespace LibBSP {
|
||||
/// </summary>
|
||||
[Serializable] public class MAPBrushSide {
|
||||
|
||||
private static IFormatProvider _format = CultureInfo.CreateSpecificCulture("en-US");
|
||||
|
||||
public Vector3[] vertices;
|
||||
public Plane plane;
|
||||
public string texture;
|
||||
@@ -51,35 +54,35 @@ namespace LibBSP {
|
||||
|
||||
// If this succeeds, assume brushDef3
|
||||
if (Single.TryParse(tokens[4], out dist)) {
|
||||
plane = new Plane(new Vector3(Single.Parse(tokens[1]), Single.Parse(tokens[2]), Single.Parse(tokens[3])), dist);
|
||||
textureS = new Vector3(Single.Parse(tokens[8]), Single.Parse(tokens[9]), Single.Parse(tokens[10]));
|
||||
textureT = new Vector3(Single.Parse(tokens[13]), Single.Parse(tokens[14]), Single.Parse(tokens[15]));
|
||||
plane = new Plane(new Vector3(Single.Parse(tokens[1], _format), Single.Parse(tokens[2], _format), Single.Parse(tokens[3], _format)), dist);
|
||||
textureS = new Vector3(Single.Parse(tokens[8], _format), Single.Parse(tokens[9], _format), Single.Parse(tokens[10], _format));
|
||||
textureT = new Vector3(Single.Parse(tokens[13], _format), Single.Parse(tokens[14], _format), Single.Parse(tokens[15], _format));
|
||||
texture = tokens[18];
|
||||
} else {
|
||||
Vector3 v1 = new Vector3(Single.Parse(tokens[1]), Single.Parse(tokens[2]), Single.Parse(tokens[3]));
|
||||
Vector3 v2 = new Vector3(Single.Parse(tokens[6]), Single.Parse(tokens[7]), Single.Parse(tokens[8]));
|
||||
Vector3 v3 = new Vector3(Single.Parse(tokens[11]), Single.Parse(tokens[12]), Single.Parse(tokens[13]));
|
||||
Vector3 v1 = new Vector3(Single.Parse(tokens[1], _format), Single.Parse(tokens[2], _format), Single.Parse(tokens[3], _format));
|
||||
Vector3 v2 = new Vector3(Single.Parse(tokens[6], _format), Single.Parse(tokens[7], _format), Single.Parse(tokens[8], _format));
|
||||
Vector3 v3 = new Vector3(Single.Parse(tokens[11], _format), Single.Parse(tokens[12], _format), Single.Parse(tokens[13], _format));
|
||||
vertices = new Vector3[] { v1, v2, v3 };
|
||||
plane = new Plane(v1, v2, v3);
|
||||
texture = tokens[15];
|
||||
// GearCraft
|
||||
if (tokens[16] == "[") {
|
||||
textureS = new Vector3(Single.Parse(tokens[17]), Single.Parse(tokens[18]), Single.Parse(tokens[19]));
|
||||
textureShiftS = Double.Parse(tokens[20]);
|
||||
textureT = new Vector3(Single.Parse(tokens[23]), Single.Parse(tokens[24]), Single.Parse(tokens[25]));
|
||||
textureShiftT = Double.Parse(tokens[26]);
|
||||
texRot = Single.Parse(tokens[28]);
|
||||
texScaleX = Double.Parse(tokens[29]);
|
||||
texScaleY = Double.Parse(tokens[30]);
|
||||
textureS = new Vector3(Single.Parse(tokens[17], _format), Single.Parse(tokens[18], _format), Single.Parse(tokens[19], _format));
|
||||
textureShiftS = Double.Parse(tokens[20], _format);
|
||||
textureT = new Vector3(Single.Parse(tokens[23], _format), Single.Parse(tokens[24], _format), Single.Parse(tokens[25], _format));
|
||||
textureShiftT = Double.Parse(tokens[26], _format);
|
||||
texRot = Single.Parse(tokens[28], _format);
|
||||
texScaleX = Double.Parse(tokens[29], _format);
|
||||
texScaleY = Double.Parse(tokens[30], _format);
|
||||
flags = Int32.Parse(tokens[31]);
|
||||
material = tokens[32];
|
||||
} else {
|
||||
//<x_shift> <y_shift> <rotation> <x_scale> <y_scale> <content_flags> <surface_flags> <value>
|
||||
textureShiftS = Single.Parse(tokens[16]);
|
||||
textureShiftT = Single.Parse(tokens[17]);
|
||||
texRot = Single.Parse(tokens[18]);
|
||||
texScaleX = Double.Parse(tokens[19]);
|
||||
texScaleY = Double.Parse(tokens[20]);
|
||||
textureShiftS = Single.Parse(tokens[16], _format);
|
||||
textureShiftT = Single.Parse(tokens[17], _format);
|
||||
texRot = Single.Parse(tokens[18], _format);
|
||||
texScaleX = Double.Parse(tokens[19], _format);
|
||||
texScaleY = Double.Parse(tokens[20], _format);
|
||||
flags = Int32.Parse(tokens[22]);
|
||||
}
|
||||
}
|
||||
@@ -113,32 +116,32 @@ namespace LibBSP {
|
||||
case "plane": {
|
||||
string[] points = tokens[1].SplitUnlessBetweenDelimiters(' ', '(', ')', StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] components = points[0].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
Vector3 v1 = new Vector3(Single.Parse(components[0]), Single.Parse(components[1]), Single.Parse(components[2]));
|
||||
Vector3 v1 = new Vector3(Single.Parse(components[0], _format), Single.Parse(components[1], _format), Single.Parse(components[2], _format));
|
||||
components = points[1].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
Vector3 v2 = new Vector3(Single.Parse(components[0]), Single.Parse(components[1]), Single.Parse(components[2]));
|
||||
Vector3 v2 = new Vector3(Single.Parse(components[0], _format), Single.Parse(components[1], _format), Single.Parse(components[2], _format));
|
||||
components = points[2].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
Vector3 v3 = new Vector3(Single.Parse(components[0]), Single.Parse(components[1]), Single.Parse(components[2]));
|
||||
Vector3 v3 = new Vector3(Single.Parse(components[0], _format), Single.Parse(components[1], _format), Single.Parse(components[2], _format));
|
||||
plane = new Plane(v1, v2, v3);
|
||||
break;
|
||||
}
|
||||
case "uaxis": {
|
||||
string[] split = tokens[1].SplitUnlessBetweenDelimiters(' ', '[', ']', StringSplitOptions.RemoveEmptyEntries);
|
||||
texScaleX = Single.Parse(split[1]);
|
||||
texScaleX = Single.Parse(split[1], _format);
|
||||
split = split[0].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
textureS = new Vector3(Single.Parse(split[0]), Single.Parse(split[1]), Single.Parse(split[2]));
|
||||
textureShiftS = Single.Parse(split[3]);
|
||||
textureS = new Vector3(Single.Parse(split[0], _format), Single.Parse(split[1], _format), Single.Parse(split[2], _format));
|
||||
textureShiftS = Single.Parse(split[3], _format);
|
||||
break;
|
||||
}
|
||||
case "vaxis": {
|
||||
string[] split = tokens[1].SplitUnlessBetweenDelimiters(' ', '[', ']', StringSplitOptions.RemoveEmptyEntries);
|
||||
texScaleY = Single.Parse(split[1]);
|
||||
texScaleY = Single.Parse(split[1], _format);
|
||||
split = split[0].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
textureT = new Vector3(Single.Parse(split[0]), Single.Parse(split[1]), Single.Parse(split[2]));
|
||||
textureShiftT = Single.Parse(split[3]);
|
||||
textureT = new Vector3(Single.Parse(split[0], _format), Single.Parse(split[1], _format), Single.Parse(split[2], _format));
|
||||
textureShiftT = Single.Parse(split[3], _format);
|
||||
break;
|
||||
}
|
||||
case "rotation": {
|
||||
texRot = Single.Parse(tokens[1]);
|
||||
texRot = Single.Parse(tokens[1], _format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Globalization;
|
||||
#if UNITY
|
||||
using UnityEngine;
|
||||
#endif
|
||||
@@ -18,6 +19,8 @@ namespace LibBSP {
|
||||
/// </summary>
|
||||
[Serializable] public class MAPDisplacement {
|
||||
|
||||
private static IFormatProvider _format = CultureInfo.CreateSpecificCulture("en-US");
|
||||
|
||||
public int power;
|
||||
public Vector3 start;
|
||||
public Vector3[][] normals;
|
||||
@@ -82,7 +85,7 @@ namespace LibBSP {
|
||||
}
|
||||
case "startposition": {
|
||||
string[] point = tokens[1].Substring(1, tokens[1].Length - 2).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
start = new Vector3(Single.Parse(point[0]), Single.Parse(point[1]), Single.Parse(point[2]));
|
||||
start = new Vector3(Single.Parse(point[0], _format), Single.Parse(point[1], _format), Single.Parse(point[2], _format));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -116,9 +119,9 @@ namespace LibBSP {
|
||||
|
||||
foreach (int i in normalsTokens.Keys) {
|
||||
for (int j = 0; j < normalsTokens[i].Length / 3; j++) {
|
||||
normals[i][j] = new Vector3(Single.Parse(normalsTokens[i][j * 3]), Single.Parse(normalsTokens[i][(j * 3) + 1]), Single.Parse(normalsTokens[i][(j * 3) + 2]));
|
||||
distances[i][j] = Single.Parse(distancesTokens[i][j]);
|
||||
alphas[i][j] = Single.Parse(alphasTokens[i][j]);
|
||||
normals[i][j] = new Vector3(Single.Parse(normalsTokens[i][j * 3], _format), Single.Parse(normalsTokens[i][(j * 3) + 1], _format), Single.Parse(normalsTokens[i][(j * 3) + 2], _format));
|
||||
distances[i][j] = Single.Parse(distancesTokens[i][j], _format);
|
||||
alphas[i][j] = Single.Parse(alphasTokens[i][j], _format);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#endif
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
#if UNITY
|
||||
using UnityEngine;
|
||||
#else
|
||||
@@ -20,6 +21,8 @@ namespace LibBSP {
|
||||
/// </summary>
|
||||
[Serializable] public class MAPPatch {
|
||||
|
||||
private static IFormatProvider _format = CultureInfo.CreateSpecificCulture("en-US");
|
||||
|
||||
public UIVertex[] points;
|
||||
public Vector2 dims;
|
||||
public string texture;
|
||||
@@ -42,12 +45,12 @@ namespace LibBSP {
|
||||
case "patchDef3":
|
||||
case "patchDef2": {
|
||||
string[] line = lines[3].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
dims = new Vector2(Single.Parse(line[1]), Single.Parse(line[2]));
|
||||
dims = new Vector2(Single.Parse(line[1], _format), Single.Parse(line[2], _format));
|
||||
for (int i = 0; i < dims.x; ++i) {
|
||||
line = lines[i + 5].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
for (int j = 0; j < dims.y; ++j) {
|
||||
Vector3 point = new Vector3(Single.Parse(line[2 + (j * 7)]), Single.Parse(line[3 + (j * 7)]), Single.Parse(line[4 + (j * 7)]));
|
||||
Vector2 uv = new Vector2(Single.Parse(line[5 + (j * 7)]), Single.Parse(line[6 + (j * 7)]));
|
||||
Vector3 point = new Vector3(Single.Parse(line[2 + (j * 7)], _format), Single.Parse(line[3 + (j * 7)], _format), Single.Parse(line[4 + (j * 7)], _format));
|
||||
Vector2 uv = new Vector2(Single.Parse(line[5 + (j * 7)], _format), Single.Parse(line[6 + (j * 7)], _format));
|
||||
UIVertex vertex = new UIVertex() {
|
||||
position = point,
|
||||
uv0 = uv
|
||||
@@ -59,12 +62,12 @@ namespace LibBSP {
|
||||
}
|
||||
case "patchTerrainDef3": {
|
||||
string[] line = lines[3].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
dims = new Vector2(Single.Parse(line[1]), Single.Parse(line[2]));
|
||||
dims = new Vector2(Single.Parse(line[1], _format), Single.Parse(line[2], _format));
|
||||
for (int i = 0; i < dims.x; ++i) {
|
||||
line = lines[i + 5].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
for (int j = 0; j < dims.y; ++j) {
|
||||
Vector3 point = new Vector3(Single.Parse(line[2 + (j * 12)]), Single.Parse(line[3 + (j * 12)]), Single.Parse(line[4 + (j * 12)]));
|
||||
Vector2 uv = new Vector2(Single.Parse(line[5 + (j * 12)]), Single.Parse(line[6 + (j * 12)]));
|
||||
Vector3 point = new Vector3(Single.Parse(line[2 + (j * 12)], _format), Single.Parse(line[3 + (j * 12)], _format), Single.Parse(line[4 + (j * 12)], _format));
|
||||
Vector2 uv = new Vector2(Single.Parse(line[5 + (j * 12)], _format), Single.Parse(line[6 + (j * 12)], _format));
|
||||
Color32 color = Color32Extensions.FromArgb(Byte.Parse(line[7 + (j * 12)]), Byte.Parse(line[8 + (j * 12)]), Byte.Parse(line[9 + (j * 12)]), Byte.Parse(line[10 + (j * 12)]));
|
||||
UIVertex vertex = new UIVertex() {
|
||||
position = point,
|
||||
|
||||
Reference in New Issue
Block a user