public FMotionStreakElement(Vector2 position, FMotionStreakElement previousElement) : base() { centerVertice=position; previous=previousElement; if (previousElement!=null) { Vector2 diff=centerVertice-previousElement.centerVertice; float dist = (float)Math.Sqrt(Vector2.SqrMagnitude(diff)); if (dist>0.01f) { Vector2 normalizedDiff=diff.normalized; direction=new Vector2(-normalizedDiff.y,normalizedDiff.x); valid=true; ChangeWidth(1.0f); } else { if (previousElement.valid) { direction=previousElement.direction; valid=true; ChangeWidth(1.0f); } else { valid=false; width=0; } } } else { valid=false; width=0; } }
protected override FMotionStreakElement NewElement(Vector2 localPosition, FMotionStreakElement previous) { return new FMotionStreakWithBorderElement(localPosition,previous); }
public override void Setup() { _trailElements = new FMotionStreakElement[_maxTrailQuads+1]; _trailStartsIndex=0; _trailEndsIndex=-1; _trailElementsCount=0; _areLocalVerticesDirty = true; if(_numberOfFacetsNeeded != _maxTrailQuads*3) { _numberOfFacetsNeeded = _maxTrailQuads*3; if(_isOnStage) _stage.HandleFacetsChanged(); } }
//public FMotionStreakElement previous; public FMotionStreakWithBorderElement(Vector2 position, FMotionStreakElement previousElement) : base(position,previousElement) { }
protected virtual FMotionStreakElement NewElement(Vector2 localPosition, FMotionStreakElement previous) { return new FMotionStreakElement(localPosition,previous); }
public void validWithElement(FMotionStreakElement element) { direction=element.direction; valid=true; ChangeWidth(1.0f); }