public AreasObjects CalculateBondsAreas() // not used { foreach (var compObj in compositionObjects) { TypeOfScreenData typeofscreendata = compObj.CalcScreenPercentage(); totalLeftArea += typeofscreendata.ScreenAreaLeftObject; totalRightArea += typeofscreendata.ScreenAreaRightObject; } areasObjects.ObjectsLeftAreaPercentage = totalLeftArea / (Screen.width * Screen.height); areasObjects.ObjectsRightAreaPercentage = totalRightArea / (Screen.width * Screen.height); totalLeftArea = 0; totalRightArea = 0; return(areasObjects); }
} // used by ml-agents NOT USED public TypeOfScreenData CalcScreenPercentage() { TypeOfScreenData typeofscreendata = new TypeOfScreenData(); float minX = Mathf.Infinity; float minY = Mathf.Infinity; float maxX = -Mathf.Infinity; float maxY = -Mathf.Infinity; Mesh mesh = gameObject.GetComponent <MeshFilter>().mesh; var v3Center = mesh.bounds.center; var v3Extents = mesh.bounds.extents; Vector3[] corners = new Vector3[8]; corners[0] = new Vector3(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z); // Front top left corner corners[1] = new Vector3(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z); // Front top right corner corners[2] = new Vector3(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z); // Front bottom left corner corners[3] = new Vector3(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z); // Front bottom right corner corners[4] = new Vector3(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z); // Back top left corner corners[5] = new Vector3(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z); // Back top right corner corners[6] = new Vector3(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z); // Back bottom left corner corners[7] = new Vector3(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z); // Back bottom right corner for (var i = 0; i < corners.Length; i++) { var corner = transform.TransformPoint(corners[i]); corner = Camera.main.WorldToScreenPoint(corner); if (corner.x > maxX) { maxX = corner.x; } if (corner.x < minX) { minX = corner.x; } if (corner.y > maxY) { maxY = corner.y; } if (corner.y < minY) { minY = corner.y; } minX = Mathf.Clamp(minX, 0, Screen.width); maxX = Mathf.Clamp(maxX, 0, Screen.width); minY = Mathf.Clamp(minY, 0, Screen.height); maxY = Mathf.Clamp(maxY, 0, Screen.height); } float areaLeft; var width = maxX - minX; var height = maxY - minY; var area = width * height; percentageScreenOccupiedByItem = area / (Screen.width * Screen.height) * 100.0f; typeofscreendata.percentageObject = percentageScreenOccupiedByItem; typeofscreendata.ScreenAreaLeftObject = width * height; if (maxX > Screen.width / 2) { var leftmaxX = Screen.width / 2; areaLeft = (leftmaxX - minX) * height; typeofscreendata.ScreenAreaLeftObject = areaLeft; } if (minX > Screen.width / 2) { typeofscreendata.ScreenAreaLeftObject = 0.0f; } typeofscreendata.ScreenAreaRightObject = area - typeofscreendata.ScreenAreaLeftObject; return(typeofscreendata); }