Esempio n. 1
0
        /// <summary>
        /// Tuät s Biud durähäschä, luägt obs än Animazion uisleest odr Palettä setzt und macht das grad.
        /// </summary>
        /// <param name="planes">S Buid zum iberpriäfä</param>
        private void TriggerAnimation(byte[][] planes)
        {
            var mapping = FindMapping(planes);

            // Faus niid gfundä hemmr fertig
            if (mapping == null)
            {
                return;
            }

            // Wird ignoriärt ("irrelevant")
            if (mapping.Mode == SwitchMode.Event)
            {
                return;
            }

            // Faus scho eppis am laifä isch, ahautä
            _activeAnimation?.Stop();
            _activeAnimation = null;

            // Palettä ladä
            var palette = _coloring.GetPalette(mapping.PaletteIndex);

            if (palette == null)
            {
                Logger.Warn("[colorize] No palette found at index {0}.", mapping.PaletteIndex);
                return;
            }
            Logger.Debug("[colorize] Setting palette {0} of {1} colors.", mapping.PaletteIndex, palette.Colors.Length);
            _paletteReset?.Dispose();
            _paletteReset = null;
            SetPalette(palette, mapping.PaletteIndex);

            // Palettä risettä wenn ä Lengi gäh isch
            if (!mapping.IsAnimation && mapping.Duration > 0)
            {
                _paletteReset = Observable
                                .Never <Unit>()
                                .StartWith(Unit.Default)
                                .Delay(TimeSpan.FromMilliseconds(mapping.Duration)).Subscribe(_ => {
                    if (_defaultPalette != null)
                    {
                        Logger.Debug("[colorize] Resetting to default palette after {0} ms.", mapping.Duration);
                        SetPalette(_defaultPalette, _defaultPaletteIndex);
                    }
                    _paletteReset = null;
                });
            }

            // Animazionä
            if (mapping.IsAnimation)
            {
                // Luägä ob ibrhaipt äs VNI/FSQ Feil umä gsi isch
                if (_animations == null)
                {
                    Logger.Warn("[colorize] Tried to load animation but no animation file loaded.");
                    return;
                }
                _activeAnimation = _animations.Find(mapping.Offset);

                if (_activeAnimation == null)
                {
                    Logger.Warn("[colorize] Cannot find animation at position {0}.", mapping.Offset);
                    return;
                }

                _activeAnimation.Start(mapping.Mode, Render, AnimationFinished);
            }
        }