2025-01-03 13:42:53 +08:00

88 lines
2.9 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2007-2020 , Inc. All Rights Reserved.
//
////////////////////////////////////////////////////////////////////////////////
using UnityEngine;
using GCSeries.Core.Extensions;
using GCSeries.Core.Utility;
namespace GCSeries.Core
{
[ExecuteInEditMode]
public sealed partial class ZFrame : MonoBehaviour
{
////////////////////////////////////////////////////////////////////////
// Inspector Fields
////////////////////////////////////////////////////////////////////////
/// <summary>
/// The scale of the user's current view. At a value of 1, one
/// Unity world unit is equal to one meter.
/// </summary>
[Range(0.1f, 1000.0f)]
[Tooltip(
"The scale of the user's current view. At a value of 1, one " +
"Unity world unit is equal to one meter.")]
public float ViewerScale = 1.0f;
////////////////////////////////////////////////////////////////////////
// MonoBehaviour Callbacks
////////////////////////////////////////////////////////////////////////
private void Awake()
{
this._displayAligner =
this.GetComponentInChildren<ZDisplayAligner>();
}
private void Update()
{
// Enforce uniform scale.
this.transform.SetUniformScale(
this.ViewerScale * ZProvider.DisplayScaleFactor);
}
////////////////////////////////////////////////////////////////////////
// Public Properties
////////////////////////////////////////////////////////////////////////
/// <summary>
/// The world space position of the frame.
/// </summary>
///
/// <remarks>
/// This accounts for any impact the ZDisplayAligner might have
/// on the frame's world space position.
/// </remarks>
public Vector3 WorldPosition =>
this._displayAligner?.transform.position ??
this.transform.position;
/// <summary>
/// The world space rotation of the frame.
/// </summary>
///
/// <remarks>
/// This accounts for any impact the ZDisplayAligner might have
/// on the frame's world space rotation.
/// </remarks>
public Quaternion WorldRotation =>
this._displayAligner?.transform.rotation ??
this.transform.rotation;
/// <summary>
/// A reference to the frame's associated ZDisplayAligner.
/// </summary>
public ZDisplayAligner DisplayAligner => this._displayAligner;
////////////////////////////////////////////////////////////////////////
// Private Members
////////////////////////////////////////////////////////////////////////
private ZDisplayAligner _displayAligner = null;
}
}