Helper Functions
Sometimes it is necessary to perform test/client-side calculations that can be tricky but are required for testing. That’s why we have compiled a few that have proven useful over the years below. These can be added to your tests directly or stored in a separate class and used directly in your test code.
Quaternion RotateTo(string objectToRotate, string targetObject, Vector3 offset = null, Vector3 orientation = null){ //GameObject player = GameObject.Find(objectToRotate); Vector3 playerPosition = api.GetObjectPosition($"//*[@name='{objectToRotate}']"); Vector3 targetPosition = api.GetObjectPosition($"//*[@name='{targetObject}']"); if (offset != null) { targetPosition = Vec3Addition(targetPosition, offset); }
Vector3 targetVector = Vec3Subtraction(targetPosition, playerPosition); targetVector = NormalizeVector(targetVector);
if (orientation == null) orientation = new Vector3(0.0f, 1.0f, 0.0f);
Quaternion rotation = api.CallMethod<Quaternion>("fn:type('UnityEngine.Quaternion')", "LookRotation", new object[] { targetVector, orientation }); return rotation;}
public Vector3 Vec3Addition(Vector3 vecA, Vector3 vecB){ return new Vector3(vecA.x + vecB.x, vecA.y + vecB.y, vecA.z + vecB.z);}
public Vector3 Vec3Subtraction(Vector3 vecA, Vector3 vecB){ return new Vector3(vecA.x - vecB.x, vecA.y - vecB.y, vecA.z - vecB.z);}
public Vector3 Vec3Multiplication(Vector3 vec, float multiplier){ return new Vector3(vec.x * multiplier, vec.y * multiplier, vec.z * multiplier);}
public float SquareMagnitude(Vector3 vec){ // Square each vector value and add them return ((vec.x * vec.x) + (vec.y * vec.y) + (vec.z * vec.z));}
public Vector3 NormalizeVector(Vector3 vecToNormalize){ // Find the magnitude squared, without the square root float squareMag = SquareMagnitude(vecToNormalize);
// Do the fast inverse square root double fastInvSqrt = 1 / Math.Sqrt(squareMag);
// Multiply values to get the normalized vector Vector3 normVector = Vec3Multiplication(vecToNormalize, (float)fastInvSqrt); return normVector;}Do you have a useful helper method you would like to share? Let us know on Slack, or by emailing support@gamedriver.io