in SupportingScripts/Runtime/Scripts/MapRenderer/Copyrights/MapCopyrightLayer.cs [97:174]
private void UpdateDefaultCopyrights(object sender, EventArgs args)
{
const int fontSize = 46;
const float targetLocalSize = 0.175f;
const float targetLocalScale = targetLocalSize / fontSize;
var localYOffset = new Vector3(0, MapRenderer.LocalMapBaseHeight - 2 * targetLocalScale, 0);
// Load the default font, if it hasn't already been loaded.
if (_font == null)
{
_font = Resources.GetBuiltinResource<Font>("Arial.ttf");
Debug.Assert(_font != null);
}
// Create the copyright game objects if they haven't already been created.
EnsureCopyrightGameObjectSetup(ref _copyrightText1, "DefaultCopyright1", fontSize);
EnsureCopyrightGameObjectSetup(ref _copyrightText2, "DefaultCopyright2", fontSize);
// Sync the configurable properties.
{
var mapRendererGameObject = MapRenderer.gameObject;
_copyrightText1.gameObject.layer = mapRendererGameObject.layer;
_copyrightText1.text = MapRenderer.Copyright;
_copyrightText1.color = _textColor;
_copyrightText2.gameObject.layer = mapRendererGameObject.layer;
_copyrightText2.text = MapRenderer.Copyright;
_copyrightText2.color = _textColor;
}
// Update positions.
{
// First, determine which two sides of the map that we can see.
var mainCamera = Camera.main;
var cameraPosition = mainCamera == null ? Vector3.zero : mainCamera.transform.position;
var thisTransform = transform;
var cameraToPosition = thisTransform.position - cameraPosition;
var transformForward = thisTransform.forward;
var normal1Sign = Vector3.Dot(cameraToPosition, transformForward) > 0 ? -1.0f : 1.0f;
var normal2Sign = Vector3.Dot(cameraToPosition, transform.right) > 0 ? -1.0f : 1.0f;
var forward = transformForward * normal1Sign;
var localForward = Vector3.forward * normal1Sign;
var right = thisTransform.right * normal2Sign;
var localRight = Vector3.right * normal2Sign;
// Position the text meshes.
UpdateTextPositionAndAlignment(
_copyrightText1,
MapRenderer.LocalMapDimension.y,
MapRenderer.LocalMapDimension.x,
new Vector3(Margin, 0, 0),
localForward,
localYOffset,
targetLocalScale);
UpdateTextPositionAndAlignment(
_copyrightText2,
MapRenderer.LocalMapDimension.x,
MapRenderer.LocalMapDimension.y,
new Vector3(0, 0, Margin),
localRight,
localYOffset,
targetLocalScale);
// Align the text meshes correctly.
_copyrightText1.transform.rotation = Quaternion.LookRotation(-forward, transform.up);
_copyrightText2.transform.rotation = Quaternion.LookRotation(-right, transform.up);
// Enable / Disable the text depending on if the camera can see them.
var cameraToText1Position = _copyrightText1.transform.position - cameraPosition;
var cameraToText2Position = _copyrightText2.transform.position - cameraPosition;
var isText1VisibleToCamera = Vector3.Dot(cameraToText1Position, -_copyrightText1.transform.forward) <= 0;
var isText2VisibleToCamera = Vector3.Dot(cameraToText2Position, -_copyrightText2.transform.forward) <= 0;
_copyrightText1.gameObject.SetActive(isText1VisibleToCamera);
_copyrightText2.gameObject.SetActive(isText2VisibleToCamera);
}
}