using System.Collections.Generic; using UnityEngine; using Cyber.Util; namespace Cyber.Util { /// /// Helper component for hologram meshes. /// public class Hologram : MonoBehaviour { /// /// The Hologram mesh. /// public MeshRenderer HologramMesh; /// /// Whether the hologram is visible or not. /// public bool Visible = true; /// /// The texture that will handle the text which is displayed on this /// hologram. /// public TextTextureApplier Text; /// /// How fast the scanlines scroll. 1 = the scanlines will scroll the /// height of a line per second. /// public float HologramScanlineScrollingSpeed = 1f; private float CurrentScale; private List ScanlineMaterials = new List(); private void Start() { CurrentScale = GetTargetScale(); UpdateScale(); foreach (Material Mat in HologramMesh.materials) { if (!Mat.name.Contains("Screen")) { ScanlineMaterials.Add(Mat); } } } private void Update() { if (GetTargetScale() != CurrentScale) { UpdateScale(); } float ScaledTime = Time.time * HologramScanlineScrollingSpeed; float UVScroll = (ScaledTime - (int) ScaledTime); foreach (Material Mat in ScanlineMaterials) { Mat.SetTextureOffset("_DetailAlbedoMap", new Vector2(0, UVScroll)); } } private void UpdateScale() { float Scale = GetTargetScale(); CurrentScale = Mathf.Lerp(CurrentScale, Scale, 8f * Time.deltaTime); if (Mathf.Abs(Scale - CurrentScale) < 0.001) { CurrentScale = Scale; } transform.localScale = new Vector3(CurrentScale, CurrentScale, CurrentScale); } private float GetTargetScale() { return Visible ? 1 : 0; } } }