public SplineCurve(SplineMode _mode = SplineMode.Catmull_Rom) { nodeList = new List <Node>(); tangentsList = new List <Vector3>(); segmentList = new List <CurveSegement>(); mode = _mode; }
public async Task DebugSplineLaunchCommandHandler(CommandContext context, string command, string[] parameters) { if (parameters.Length != 0 && parameters.Length != 2) { await SendHelpAsync(context); return; } WorldEntity entity = context.Session.Player.GetVisible <WorldEntity>(context.Session.Player.TargetGuid); if (entity == null) { await context.SendMessageAsync("Select a valid target entity!"); return; } if (!entityNodes.TryGetValue(entity.Guid, out List <Vector3> nodes)) { await context.SendMessageAsync("Selected target entity has no nodes!"); return; } SplineMode mode = parameters.Length == 0 ? SplineMode.OneShot : (SplineMode)byte.Parse(parameters[0]); float speed = parameters.Length == 0 ? 3f : float.Parse(parameters[1]); entity.MovementManager.LaunchSpline(nodes, SplineType.Linear, mode, speed); entityNodes.Remove(entity.Guid); await context.SendMessageAsync($"Launching spline for entity {entity.Guid} with {nodes.Count} nodes."); }
//TODO: Validation /// <inheritdoc /> public SplineInfo(SplineMoveFlags splineFlags, ObjectGuid finalTarget, float finalOrientation, Vector3 <float> finalPoint, int splineTime, int splineFullTime, int splineId, float splineDurationMultiplier, float splineDurationMultiplierNext, float splineVerticalAcceleration, int splineStartTime, Vector3 <float>[] wayPoints, SplineMode mode, Vector3 <float> splineEndpoint) { SplineFlags = splineFlags; FinalTarget = finalTarget; FinalOrientation = finalOrientation; FinalPoint = finalPoint; SplineTime = splineTime; SplineFullTime = splineFullTime; SplineId = splineId; SplineDurationMultiplier = splineDurationMultiplier; SplineDurationMultiplierNext = splineDurationMultiplierNext; SplineVerticalAcceleration = splineVerticalAcceleration; SplineStartTime = splineStartTime; WayPoints = wayPoints; Mode = mode; SplineEndpoint = splineEndpoint; }
/// <summary> /// Create a new single spline <see cref="SplinePath"/> with supplied <see cref="SplineMode"/> and speed. /// </summary> public SplinePath(ushort splineId, SplineMode mode, float speed) { Type = SplineType.CatmullRom; Mode = mode; Speed = speed; SplineTypeBase splineType = new SplineTypeCatmullRomTbl(); ISplineMode splineMode = GlobalMovementManager.Instance.NewSplineMode(mode); if (splineMode == null) { throw new ArgumentOutOfRangeException(); } spline = new Spline(); spline.Initialise(splineId, splineType, splineMode); direction = splineMode.InitialDirection; point = direction == SplineDirection.Forward ? splineType.BottomIndex : splineType.BottomReverseIndex; remaining = spline.GetNextLength(direction, point); }
/// <summary> /// Create a new custom spline <see cref="SplinePath"/> with supplied <see cref="SplineType"/>, <see cref="SplineMode"/> and speed. /// </summary> public SplinePath(List <Vector3> nodes, SplineType type, SplineMode mode, float speed) { Type = type; Mode = mode; Speed = speed; SplineTypeBase splineType; switch (type) { case SplineType.Linear: splineType = new SplineTypeLinear(); break; case SplineType.CatmullRom: splineType = new SplineTypeCatmullRom(); break; default: throw new ArgumentOutOfRangeException(); } ISplineMode splineMode = GlobalMovementManager.Instance.NewSplineMode(mode); if (splineMode == null) { throw new ArgumentException(); } spline = new Spline(); spline.Initialise(nodes, splineType, splineMode); direction = splineMode.InitialDirection; point = direction == SplineDirection.Forward ? splineType.BottomIndex : splineType.BottomReverseIndex; remaining = spline.GetNextLength(direction, point); }
public SplineModeAttribute(SplineMode mode) { Mode = mode; }
/// <summary> /// Return a new <see cref="ISplineMode"/> for supplied <see cref="SplineMode"/>. /// </summary> public ISplineMode NewSplineMode(SplineMode mode) { return(splineModeFactories.TryGetValue(mode, out EntitySplineModeFactoryDelegate factory) ? factory.Invoke() : null); }