Пример #1
0
 private static Color[] GenerateCache(int cacheResolution, IMorph morph)
 {
     return(Enumerable
            .Range(0, cacheResolution)
            .Select(i => morph.GetColor(i / (float)cacheResolution))
            .ToArray());
 }
Пример #2
0
        protected virtual Option <Node> CreateMorphPanel(IMorph morph)
        {
            Ensure.That(morph, nameof(morph)).IsNotNull();

            Option <Node> node = None;

            switch (morph)
            {
            case IMorph <float, RangedMorphDefinition> _:
                node = RangedMorphPanelScene.Instance();
                break;

            case IMorph <Color, ColorMorphDefinition> _:
                node = ColorMorphPanelScene.Instance();
                break;
            }

            var factory = node.Bind(n => n.OfType <IMorphPanelFactory>());

            factory.Match(
                f => f.Morph = Some(morph),
                () => Logger.LogWarning($"Failed to find a suitable UI for morph: {morph}.")
                );

            return(node);
        }
Пример #3
0
        public HeatmapAbstract(Func <Vector2, float> function, IMorph morph, IReceiver receiver)
        {
            Function = function ?? throw new ArgumentNullException(nameof(function));
            Morph    = morph ?? throw new ArgumentNullException(nameof(morph));
            Receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));

            RecalculateUnsampledSize();
        }
Пример #4
0
        public ColorMorphPanel(
            IMorph <Color, ColorMorphDefinition> morph,
            ColorPickerButton button,
            Label label,
            Godot.Control node,
            ILoggerFactory loggerFactory) : base(morph, label, node, loggerFactory)
        {
            Ensure.That(button, nameof(button)).IsNotNull();

            Button = button;
        }
Пример #5
0
            protected MorphPanel(
                IMorph <TVal, TDef> morph,
                Label label,
                Godot.Control node,
                ILoggerFactory loggerFactory) : base(morph, label, node, loggerFactory)
            {
                Ensure.That(morph, nameof(morph)).IsNotNull();
                Ensure.That(label, nameof(label)).IsNotNull();

                Morph = morph;
            }
Пример #6
0
 protected override Validation <string, ColorMorphPanel> CreateService(
     IMorph <Color, ColorMorphDefinition> morph,
     Label label,
     Godot.Control node,
     ILoggerFactory loggerFactory)
 {
     return
         (from button in Button
          .ToValidation("Failed to find the button.")
          select new ColorMorphPanel(morph, button, label, node, loggerFactory));
 }
Пример #7
0
        private IEnumerator Run(IMorph target, float directionOffset)
        {
            float time = 0, previousTime = 0;

            while (_duration > 0 && (time < 1 || (previousTime < 1 && time >= 1)))
            {
                target.Frame(Mathf.Abs(directionOffset - Mathf.Clamp01(time)));
                previousTime = time;
                time        += Time.deltaTime / _duration;
                yield return(null);
            }
        }
Пример #8
0
        private IEnumerator Run(IMorph target, float directionOffset)
        {
            var steps            = _intermediateSteps + 2;
            var waitBetweenSteps = new WaitForSeconds(_durationInSeconds / steps);
            var stepSize         = 1f / (steps - 1);

            for (int i = 0; i < steps; i++)
            {
                target.Frame(Mathf.Clamp01(Mathf.Abs(directionOffset - i * stepSize)));
                yield return(waitBetweenSteps);
            }
        }
Пример #9
0
 protected override Validation <string, RangedMorphPanel> CreateService(
     IMorph <float, RangedMorphDefinition> morph,
     Label label,
     Godot.Control node,
     ILoggerFactory loggerFactory)
 {
     return
         (from slider in Slider
          .ToValidation("Failed to find the slider.")
          from spinner in Spinner
          .ToValidation("Failed to find the spinner.")
          select new RangedMorphPanel(morph, slider, spinner, label, node, loggerFactory));
 }
Пример #10
0
        public bool TryGetValue(string key, out IMorph value)
        {
            Ensure.That(key, nameof(key)).IsNotNull();

            if (!_morphs.ContainsKey(key))
            {
                value = null;
                return(false);
            }

            value = _morphs[key];
            return(true);
        }
Пример #11
0
        public RangedMorphPanel(
            IMorph <float, RangedMorphDefinition> morph,
            Slider slider,
            SpinBox spinner,
            Label label,
            Godot.Control node,
            ILoggerFactory loggerFactory) : base(morph, label, node, loggerFactory)
        {
            Ensure.That(slider, nameof(slider)).IsNotNull();
            Ensure.That(spinner, nameof(spinner)).IsNotNull();

            Slider  = slider;
            Spinner = spinner;
        }
Пример #12
0
        protected override void ApplyMorph(IMorph morph)
        {
            var dna = morph as IMorph <float>;

            if (dna != null && _dnaMappings.ContainsKey(morph.Name))
            {
                var mapping = _dnaMappings[morph.Name];

                ApplyDNA(mapping.Hash, mapping.Index, dna.Value);
            }

            var color = morph as IMorph <Color>;

            if (color != null)
            {
                ApplyColor(color.Name, color.Value);
            }
        }
Пример #13
0
        protected virtual MorphPanel CreateMorphPanel([NotNull] IMorph morph)
        {
            Ensure.Any.IsNotNull(morph, nameof(morph));

            MorphPanel panel = null;

            switch (morph)
            {
            case IMorph <float, RangedMorphDefinition> _:
                panel = (MorphPanel)_rangedMorphPanelScene.Instance();
                break;

            case IMorph <Color, ColorMorphDefinition> _:
                panel = (MorphPanel)_colorMorphPanelScene.Instance();
                break;
            }

            panel?.LoadMorph(morph);

            return(panel);
        }
Пример #14
0
 public abstract void LoadMorph([NotNull] IMorph morph);
Пример #15
0
 public static IMorph And(this IMorph morph, params IMorph[] others) => new CompositeMorph(new List <IMorph>(others)
 {
     morph
 });
Пример #16
0
 public HeatmapGenerator(Func <Vector2, float> function, IMorph morph, IReceiver receiver)
     : base(function, morph, receiver)
 {
 }
Пример #17
0
 private void HandleMorphChange(IMorph morph)
 {
     ApplyMorph(morph);
     _morphChange.OnNext(morph);
 }
Пример #18
0
 protected abstract void ApplyMorph(IMorph morph);
Пример #19
0
 internal WithEasingDecorator(IMorph source, AnimationCurve easingCurve)
 {
     _source      = source;
     _easingCurve = easingCurve;
 }
Пример #20
0
 public static IMorph WithEasing(this IMorph morph, AnimationCurve curve) => new WithEasingDecorator(morph, curve);
Пример #21
0
            public override void LoadMorph(IMorph morph)
            {
                Ensure.Any.IsNotNull(morph, nameof(morph));

                Morph = (IMorph <TVal, TDef>)morph;
            }
Пример #22
0
 public CachedMorph(int cacheResolution, IMorph morph)
 {
     CacheResolution = cacheResolution;
     Cache           = GenerateCache(cacheResolution, morph);
 }
Пример #23
0
 public bool TryGetValue(string key, out IMorph value) => _morphs.TryGetValue(key, out value);
Пример #24
0
 public IEnumerator Backwards(IMorph target)
 {
     return(Run(target, 1f));
 }
Пример #25
0
 public IEnumerator Forwards(IMorph target)
 {
     return(Run(target, 0f));
 }
Пример #26
0
 public void getMorphed(IMorph morph, out Vector3[] vertices, out Vector3[] normals)
 {
     getMorphed(morph.morph, out vertices, out normals);
 }