using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using Cyber.Networking; using Cyber.Console; using System; namespace Cyber.Entities.SyncBases { /// /// Object that blinks when interacted with. /// public class BlinkyBox : Interactable { /// /// The lamp mesh that will blink. /// public MeshRenderer Mesh; /// /// How long the blink lasts. /// public float BlinkLength = 1f; /// /// How bright the light is (upwards of 1 for the bloom to kick in) /// public float BlinkBrightness = 1.5f; /// /// The color of the blink. /// public Color BlinkColor = new Color(1f, 0.6f, 0f); private double BlinkTime = 0; private Material Material; /// /// When a BlinkyBox is interacted with, it blinks once, light lasting /// for seconds. /// public override void Interact() { BlinkTime = NetworkHelper.GetCurrentSystemTime(); } /// /// Does nothing, because it doesn't need to synced. /// /// public override void Deserialize(NetworkReader reader) {} /// /// Does nothing, because it doesn't need to synced. /// /// public override void Serialize(NetworkWriter writer) { } public override InteractableSyncdata GetInteractableSyncdata() { return new InteractableSyncdata(false, true); } /// /// The blinky box doesn't need a hash and it should update every 5 ticks. /// /// Sync Handletype containing sync information. public override SyncHandletype GetSyncHandletype() { return new SyncHandletype(false, 5); } private void Start() { Material = Mesh.material; } private void Update() { float Time = (float) (NetworkHelper.GetCurrentSystemTime() - BlinkTime); if (Time < BlinkLength) { float Brightness = (1f - Time / BlinkLength) * BlinkBrightness; Color NewColor = new Color(Brightness * BlinkColor.r, Brightness * BlinkColor.g, Brightness * BlinkColor.b); Material.SetColor("_EmissionColor", NewColor); } } } }