//拖动 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; } } } }
public void ResetSelection() { if (SelectedObjects != null && SelectedObjects.Count > 0) { USEditorUtility.RemoveFromUnitySelection(SelectedObjects); SelectedObjects.Clear(); SourcePositions.Clear(); } }
public void ResetSelection() { if (SelectedObjects.Count > 0) { USUndoManager.PropertyChange(this, "Select None"); USEditorUtility.RemoveFromUnitySelection(SelectedObjects); SelectedObjects.Clear(); SourcePositions.Clear(); } }
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)); }
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; } } } }
//拖动 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; } } } }
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)))); } }
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; } } } }
public void AddSources(IEnumerable <Point> points) => SourcePositions.AddRange(points);
public void AddSource(Point p) => SourcePositions.Add(p);