Added this[] overloads to Instance & RobloxFile.

This commit is contained in:
CloneTrooper1019 2019-02-03 07:28:54 -06:00
parent f7184eb8f8
commit 23c222338a
4 changed files with 40 additions and 3 deletions

View File

@ -8,6 +8,7 @@ namespace RobloxFiles
/// Describes an object in Roblox's DataModel hierarchy. /// Describes an object in Roblox's DataModel hierarchy.
/// Instances can have sets of properties loaded from *.rbxl/*.rbxm files. /// Instances can have sets of properties loaded from *.rbxl/*.rbxm files.
/// </summary> /// </summary>
public class Instance public class Instance
{ {
/// <summary>The ClassName of this Instance.</summary> /// <summary>The ClassName of this Instance.</summary>
@ -239,5 +240,32 @@ namespace RobloxFiles
{ {
Properties.Add(prop); Properties.Add(prop);
} }
/// <summary>
/// Treats the provided string as if you were indexing a specific child or descendant of this Instance.<para/>
/// The provided string can either be:<para/>
/// - The name of a child that is parented to this Instance. ( Example: game["Workspace"] )<para/>
/// - A period-separated path to a descendant of this Instance. ( Example: game["Workspace.Terrain"] )<para/>
/// This will throw an exception if any instance in the traversal is not found.
/// </summary>
public Instance this[string accessor]
{
get
{
Instance result = this;
foreach (string name in accessor.Split('.'))
{
Instance next = result.FindFirstChild(name);
if (next == null)
throw new Exception(name + " is not a valid member of " + result.Name);
result = next;
}
return result;
}
}
} }
} }

View File

@ -78,5 +78,14 @@ namespace RobloxFiles
byte[] buffer = File.ReadAllBytes(filePath); byte[] buffer = File.ReadAllBytes(filePath);
ReadFile(buffer); ReadFile(buffer);
} }
/// <summary>
/// Treats the provided string as if you were indexing a specific child or descendant of the `RobloxFile.Contents` folder.<para/>
/// The provided string can either be:<para/>
/// - The name of a child that is parented to RobloxFile.Contents ( Example: RobloxFile["Workspace"] )<para/>
/// - A period (.) separated path to a descendant of RobloxFile.Contents ( Example: RobloxFile["Workspace.Terrain"] )<para/>
/// This will throw an exception if any instance in the traversal is not found.
/// </summary>
public Instance this[string accessor] => Contents[accessor];
} }
} }

View File

@ -327,7 +327,7 @@ namespace RobloxFiles.DataTypes
return new float[] { m14, m24, m34, m11, m12, m13, m21, m22, m23, m31, m32, m33 }; return new float[] { m14, m24, m34, m11, m12, m13, m21, m22, m23, m31, m32, m33 };
} }
public float[] toEulerAnglesXYZ() public float[] ToEulerAnglesXYZ()
{ {
float x = (float)Math.Atan2(-m23, m33); float x = (float)Math.Atan2(-m23, m33);
float y = (float)Math.Asin(m13); float y = (float)Math.Asin(m13);

View File

@ -25,6 +25,8 @@ namespace RobloxFiles.XmlFormat.PropertyTokens
try try
{ {
bool custom = readBool("CustomPhysics"); bool custom = readBool("CustomPhysics");
prop.Type = PropertyType.PhysicalProperties;
if (custom) if (custom)
{ {
prop.Value = new PhysicalProperties prop.Value = new PhysicalProperties
@ -35,8 +37,6 @@ namespace RobloxFiles.XmlFormat.PropertyTokens
readFloat("FrictionWeight"), readFloat("FrictionWeight"),
readFloat("ElasticityWeight") readFloat("ElasticityWeight")
); );
prop.Type = PropertyType.PhysicalProperties;
} }
return true; return true;