コード例 #1
0
 public SplineCurve(SplineMode _mode = SplineMode.Catmull_Rom)
 {
     nodeList     = new List <Node>();
     tangentsList = new List <Vector3>();
     segmentList  = new List <CurveSegement>();
     mode         = _mode;
 }
コード例 #2
0
        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.");
        }
コード例 #3
0
 //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;
 }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
 public SplineModeAttribute(SplineMode mode)
 {
     Mode = mode;
 }
コード例 #7
0
 /// <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);
 }