using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using Cyber.Networking; using Cyber.Console; namespace Cyber.Entities.SyncBases { /// /// /// 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(); } /// /// Deserializes this SyncBase for further use. /// /// public override void Deserialize(NetworkReader reader) { double ServerBlinkTime = reader.ReadDouble(); if (ServerBlinkTime > BlinkTime) { BlinkTime = ServerBlinkTime; } } /// /// Serialize this SyncBase into a sync packet. /// /// public override void Serialize(NetworkWriter writer) { writer.Write(BlinkTime); } /// /// The blinky boxes handletype is /// /// 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); } } } }