Ejemplo n.º 1
0
 //拖动
 private void ProcessDraggingTransformClip(JClipRenderData clip, Vector2 mouseDelta)
 {
     if (SourcePositions.ContainsKey(clip))
     {
         ScriptableObject selected = clip.ClipData;
         if (selected is JSplineKeyframe)
         {
             JSplineKeyframe Keyframe           = selected as JSplineKeyframe;
             float           mousePosOnTimeline = ContentXToTime(mouseDelta.x + FloatingWidth);
             float           newTime            = SourcePositions[clip] + mousePosOnTimeline;
             newTime = Mathf.Clamp(newTime, 0.0f, CurrentSequence.Duration);
             int index = Keyframe.Track.Keyframes.IndexOf(Keyframe);
             if (index == 0)
             {
                 Keyframe.StartTime       = newTime;
                 Keyframe.Track.StartTime = newTime;
             }
             else if (index == Keyframe.Track.Keyframes.Count - 1)
             {
                 Keyframe.StartTime     = newTime;
                 Keyframe.Track.EndTime = newTime;
             }
             else
             {
                 newTime            = Mathf.Clamp(newTime, Keyframe.Track.Keyframes[index - 1].StartTime, Keyframe.Track.Keyframes[index + 1].StartTime);
                 Keyframe.StartTime = newTime;
             }
             if (SelectedObjects.Count == 1)
             {
                 Selection.activeObject = Keyframe;
             }
         }
     }
 }
Ejemplo n.º 2
0
 public void ResetSelection()
 {
     if (SelectedObjects != null && SelectedObjects.Count > 0)
     {
         USEditorUtility.RemoveFromUnitySelection(SelectedObjects);
         SelectedObjects.Clear();
         SourcePositions.Clear();
     }
 }
Ejemplo n.º 3
0
        public void ResetSelection()
        {
            if (SelectedObjects.Count > 0)
            {
                USUndoManager.PropertyChange(this, "Select None");

                USEditorUtility.RemoveFromUnitySelection(SelectedObjects);
                SelectedObjects.Clear();
                SourcePositions.Clear();
            }
        }
Ejemplo n.º 4
0
        public override bool Equals(object obj)
        {
            var other = obj as SolutionParameters;

            if (other != null)
            {
                return(other.Width == Width &&
                       other.Height == Height &&
                       SourcePositions.SequenceEqual(other.SourcePositions) &&
                       SinkPositions.SequenceEqual(other.SinkPositions) &&
                       BuildingPositions.SequenceEqual(other.BuildingPositions) &&
                       Connections.SequenceEqual(other.Connections));
            }
            return(base.Equals(obj));
        }
Ejemplo n.º 5
0
        private void ModifyEdges(double temperature)
        {
            var maxOffset = 2 * (Width + Height) - 4;

            foreach (var sink in SinkPositions.Keys)
            {
                var newPos = IndexToBound(BoundToIndex(SinkPositions[sink]) + (int)((2 * _random.NextDouble() - 1) * maxOffset * temperature));
                SinkPositions = SinkPositions.SetItem(sink, newPos);
            }

            foreach (var source in SourcePositions.Keys)
            {
                var newPos = IndexToBound(BoundToIndex(SourcePositions[source]) + (int)((2 * _random.NextDouble() - 1) * maxOffset * temperature));
                SourcePositions = SourcePositions.SetItem(source, newPos);
            }
        }
        /// <summary>
        ///     Get the expression's containing range.
        /// </summary>
        /// <param name="expression">
        ///     The MSBuild expression.
        /// </param>
        /// <param name="relativeToPosition">
        ///     The starting position of the <see cref="SourceNode"/> that contains the expression.
        /// </param>
        /// <returns>
        ///     The containing <see cref="Range"/>.
        /// </returns>
        public Range GetRange(ExpressionNode expression, Position relativeToPosition)
        {
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }

            if (relativeToPosition == null)
            {
                throw new ArgumentNullException(nameof(relativeToPosition));
            }

            int absoluteBasePosition = SourcePositions.GetAbsolutePosition(relativeToPosition);

            return(SourcePositions.GetRange(
                       absoluteBasePosition + expression.AbsoluteStart,
                       absoluteBasePosition + expression.AbsoluteEnd
                       ));
        }
 private void ProcessDraggingParticleClip(JClipRenderData clip, Vector2 mouseDelta)
 {
     if (SourcePositions.ContainsKey(clip))
     {
         UnityEngine.Object selected = clip.ClipData;
         if (selected is JParticleClipData)
         {
             JParticleClipData particleClipData   = selected as JParticleClipData;
             float             mousePosOnTimeline = ContentXToTime(mouseDelta.x + FloatingWidth);
             float             newTime            = SourcePositions[clip] + mousePosOnTimeline;
             newTime = Mathf.Clamp(newTime, 0.0f, CurrentSequence.Duration - particleClipData.PlaybackDuration);
             particleClipData.StartTime = newTime;
             if (SelectedObjects.Count == 1)
             {
                 Selection.activeObject = particleClipData;
             }
         }
     }
 }
Ejemplo n.º 8
0
        //拖动
        private void ProcessDraggingEventClip(JClipRenderData clip, Vector2 mouseDelta)
        {
            if (SourcePositions.ContainsKey(clip))
            {
                ScriptableObject selected = clip.ClipData;
                if (selected is JEventBase)
                {
                    JEventBase aevent             = selected as JEventBase;
                    float      mousePosOnTimeline = ContentXToTime(mouseDelta.x + FloatingWidth);
                    float      newTime            = SourcePositions[clip] + mousePosOnTimeline;
                    newTime          = Mathf.Clamp(newTime, 0.0f, CurrentSequence.Duration);
                    aevent.StartTime = newTime;

                    if (SelectedObjects.Count == 1)
                    {
                        Selection.activeObject = aevent;
                    }
                }
            }
        }
Ejemplo n.º 9
0
        private void ModifySize(double temperature)
        {
            if (_random.NextDouble() > 0.5)
            {
                Width  += _random.Next(-1, 2);
                Height += _random.Next(-1, 2);

                if (Width < 5)
                {
                    Width = 5;
                }
                if (Height < 5)
                {
                    Height = 5;
                }
            }
            else
            {
                var xoff = _random.Next(-1, 2);
                var yoff = _random.Next(-1, 2);

                Width  += xoff;
                Height += yoff;

                if (Width < 5)
                {
                    Width = 5;
                }
                if (Height < 5)
                {
                    Height = 5;
                }

                var offset = new Vector2(xoff, yoff);
                var bounds = new Vector2(Width, Height);

                SourcePositions   = SourcePositions.SetItems(SourcePositions.Select((kvp) => new KeyValuePair <SourceStep, Vector2>(kvp.Key, VectorExtensions.Clamp(kvp.Value + offset, bounds))));
                SinkPositions     = SinkPositions.SetItems(SinkPositions.Select((kvp) => new KeyValuePair <SinkStep, Vector2>(kvp.Key, VectorExtensions.Clamp(kvp.Value + offset, bounds))));
                BuildingPositions = BuildingPositions.SetItems(BuildingPositions.Select((kvp) => new KeyValuePair <ProductionStep, Tuple <Vector2, BuildingRotation> >(kvp.Key, new Tuple <Vector2, BuildingRotation>(kvp.Value.Item1 + offset, kvp.Value.Item2))));
            }
        }
Ejemplo n.º 10
0
        private void ProcessDraggingAnimationClip(JClipRenderData clip, Vector2 mouseDelta)
        {
            if (SourcePositions.ContainsKey(clip))
            {
                ScriptableObject selected = (ScriptableObject)clip.ClipData;
                if (selected is JAnimationClipData)
                {
                    JAnimationClipData animationClipData = selected as JAnimationClipData;

                    //float newTime = ((newPosition.x / DisplayArea.width) * AnimationTimeline.Sequence.Duration) / XScale;
                    // newTime = Mathf.Clamp(newTime, 0.0f, AnimationTimeline.Sequence.Duration);

                    float mousePosOnTimeline = ContentXToTime(FloatingWidth + mouseDelta.x);
                    float newTime            = SourcePositions[clip] + mousePosOnTimeline;
                    newTime = Mathf.Clamp(newTime, 0.0f, CurrentSequence.Duration - animationClipData.PlaybackDuration);
                    animationClipData.StartTime = newTime;
                    if (SelectedObjects.Count == 1)
                    {
                        Selection.activeObject = animationClipData;
                    }
                }
            }
        }
Ejemplo n.º 11
0
 public void AddSources(IEnumerable <Point> points)
 => SourcePositions.AddRange(points);
Ejemplo n.º 12
0
 public void AddSource(Point p)
 => SourcePositions.Add(p);