private void LoadLight() { if (!lightMotor.sword.isLoaded) { Collider[] colliders = Physics.OverlapSphere(playerMotor.transform.position, .5f); LightZone closestZone = null; float shortestDistance = 10000f; foreach (Collider col in colliders) { LightZone zone = col.GetComponent <LightZone>(); if (zone != null && zone.canBeAbsorbed) { float distance = (playerMotor.transform.position - zone.transform.position).magnitude; if (distance < shortestDistance) { shortestDistance = distance; closestZone = zone; } } } if (closestZone != null) { closestZone.Absorb(); lightMotor.sword.Load(); } } }
void MasterExecAdd() { MasterAddMode = true; MasterCurrentObject = new LightZone(); MasterCurrentObject.PointType = PointTypeEnum.W; MasterCurrentObject.Partition = AppContext.Partition; MasterCurrentObject.ControlSpace = AppContext.ControlSpace; MasterCurrentObject.LE_ProxyList = new ObservableCollection <LE_Proxy>(); MasterAddCmd.RaiseCanExecuteChanged(); MasterRemoveCmd.RaiseCanExecuteChanged(); ViewCmd.RaiseCanExecuteChanged(); MasterObjectPanelVisibility = Visibility.Visible; MasterObjectButtonsVisibility = Visibility.Visible; MasterListCurtainVisibility = Visibility.Visible; DetailListCurtainVisibility = Visibility.Visible; MasterObjectCurtainVisibility = Visibility.Collapsed; ProxyListCurtainVisibility = Visibility.Visible; MessengerInstance.Send("", AppContext.BlockUIMsg); }
public List <Led[]> GetArraysForZones(LightZone zones) { List <Led[]> list = new List <Led[]>(); if (zones.HasFlag(LightZone.Keyboard)) { list.Add(Keyboard); } if (zones.HasFlag(LightZone.Strip)) { list.Add(Strip); } if (zones.HasFlag(LightZone.Mouse)) { list.Add(Mouse); } if (zones.HasFlag(LightZone.Mousepad)) { list.Add(Mousepad); } if (zones.HasFlag(LightZone.Headset)) { list.Add(Headset); } if (zones.HasFlag(LightZone.Keypad)) { list.Add(Keypad); } if (zones.HasFlag(LightZone.General)) { list.Add(General); } return(list); }
// fadeoutDuration in seconds private void FadeOutToColor(LEDData frameData, LightZone zones, float fadeoutDuration, HSVColor color) { int frames = (int)Math.Round(fadeoutDuration * FPS); List <Led[]> frameLightArrays = frameData.GetArraysForZones(zones); for (int i = 0; i < frames; i++) { float fadeout = (float)Utils.Scale(i, 0, frames, 0, 1); LEDData newFrame = LEDData.Empty; List <Led[]> newFrameLightArrays = newFrame.GetArraysForZones(zones); for (int j = 0; j < frameLightArrays.Count; j++) { Led[] arrCurrent = frameLightArrays[j]; Led[] arrNew = newFrameLightArrays[j]; for (int k = 0; k < arrCurrent.Length; k++) { Led l = arrCurrent[k]; HSVColor fadedColor; if (color.Equals(HSVColor.Black)) { fadedColor = l.color.FadeToBlackBy(fadeout); } else { fadedColor = l.color.FadeToColorBy(color, fadeout); } arrNew[k].Color(fadedColor); } } SendFrame(newFrame, zones); } }
/// <summary> /// Plays the specified animation once for <paramref name="loopDuration"/> seconds. /// </summary> /// <param name="fadeOutAfterRate">Optionally fade out the last animation frame progressively.</param> public void RunAnimationInLoop(string animPath, LightZone zones, float loopDuration, float fadeoutDuration = 0, bool priority = true, float timeScale = 1) { LEDColorData[] anim = LoadAnimation(animPath).Frames; float animDuration = anim.Length * 0.03f; float loopRatio = (int)(loopDuration / animDuration); float time = 0; LEDData data = null; while (time < anim.Length * loopRatio) { int i = ((int)time) % anim.Length; data = LEDData.FromColors(anim[i]); if (time == 0) { SendFrame(data, zones, priority); } else { SendFrame(data, zones); } time += 1 * timeScale; } if (fadeoutDuration > 0) { // data is last frame FadeOutToBlack(data, zones, fadeoutDuration); } else { /*LEDData black = LEDData.Empty; * SendFrame(black, zones);*/ } }
/// <summary> /// Creates a color burst, starting at the given color and progressively fading to black. /// </summary> /// <param name="color">The burst color.</param> /// <param name="fadeoutDuration">The burst fade-out duration.</param> /// <param name="destinationColor">The color to progressively fade to after the color burst (black by default)</param> /// <returns></returns> public void ColorBurst(HSVColor color, LightZone zones, float fadeoutDuration = 0.15f, bool priority = true, HSVColor destinationColor = default) { LEDData data = LEDData.Empty; // Set all to color ApplyColorToZones(data, zones, color); SendFrame(data, zones, priority); // Fade to Black if (fadeoutDuration > 0) { if (destinationColor.Equals(HSVColor.Black)) { FadeOutToBlack(data, zones, fadeoutDuration); } else { FadeOutToColor(data, zones, fadeoutDuration, destinationColor); } } else { data = LEDData.Empty; if (!destinationColor.Equals(HSVColor.Black)) { ApplyColorToZones(data, zones, destinationColor); } SendFrame(data, zones); } }
public void HoldLastFrame(LightZone zones, float duration) { int frames = (int)Math.Round(duration * FPS); for (int i = 0; i < frames; i++) { SendFrame(lastFrame.Clone(), zones); } }
public void HoldColor(HSVColor color, LightZone zones, float duration, bool priority = false) { int frames = (int)Math.Round(duration * FPS); for (int i = 0; i < frames; i++) { LEDData data = LEDData.Empty; ApplyColorToZones(data, zones, color); SendFrame(data, zones, priority); } }
private void SendFrame(LEDData data, LightZone zones, bool priority = false) { lastFrame = data; if (NewFrameReady == null) { throw new InvalidOperationException("Tried to SendFrame, but no NewFrameReady handler was attached to this AnimationModule."); } else { NewFrameReady?.Invoke(new LEDFrame(this, data, zones, priority)); } }
private void ApplyColorToZones(LEDData frameData, LightZone zones, HSVColor color) { List <Led[]> colArrays = frameData.GetArraysForZones(zones); foreach (Led[] arr in colArrays) { foreach (Led l in arr) { l.Color(color); } } }
public LEDFrame(object sender, LEDData ledData, LightZone zones, bool priority = false) { if (sender == null) { this.SenderChain = new List <object>(); } else { this.SenderChain = new List <object>() { sender } }; this.Leds = ledData; this.Zones = zones; this.Priority = priority; }
public void FadeBetweenTwoColors(LightZone zones, HSVColor col1, HSVColor col2, float rate = 0.15f, float duration = 2) { // TODO: Broken int frames = (int)Math.Round(duration * FPS); for (int i = 0; i < frames; i++) { float currentTime = i / FPS; float sin = (float)Math.Sin(currentTime * rate); HSVColor color = HSVColor.Lerp(col1, col2, sin); LEDData newFrame = LEDData.Empty; List <Led[]> newFrameLightArrays = newFrame.GetArraysForZones(zones); foreach (Led[] arr in newFrameLightArrays) { foreach (Led l in arr) { l.Color(color); } } SendFrame(newFrame, zones); } }
protected void RunAnimationInLoop(string animationName, LightZone zones, float loopDuration, float fadeoutAfterDuration = 0, bool priority = true, float timeScale = 1) { Animator.RunAnimationInLoop(GetAnimationPath(animationName), zones, loopDuration, fadeoutAfterDuration, priority, timeScale); }
private void FadeOutToBlack(LEDData frameData, LightZone zones, float fadeoutDuration) { FadeOutToColor(frameData, zones, fadeoutDuration, HSVColor.Black); }