public void Initialize(ref Spline.EvaluationMode mode, ref bool cyclic, ref Vector3[] points, ref int lo, ref int hi) { mode = Spline.EvaluationMode.Catmullrom; cyclic = false; points = new Vector3[_points.Count]; for (var i = 0; i < _points.Count; ++i) { points[i] = _points[i]; } lo = 1; hi = points.Length - 2; }
void InitSpline(MoveSplineInitArgs args) { Spline.EvaluationMode[] modes = new Spline.EvaluationMode[2] { Spline.EvaluationMode.Linear, Spline.EvaluationMode.Catmullrom }; if (args.flags.HasFlag(SplineFlag.Cyclic)) { int cyclic_point = 0; if (splineflags.HasFlag(SplineFlag.EnterCycle)) { cyclic_point = 1; // shouldn't be modified, came from client } spline.InitCyclicSpline(args.path, args.path.Length, modes[Convert.ToInt32(args.flags.IsSmooth())], cyclic_point, args.initialOrientation); } else { spline.InitSpline(args.path, args.path.Length, modes[Convert.ToInt32(args.flags.IsSmooth())], args.initialOrientation); } // init spline timestamps if (splineflags.HasFlag(SplineFlag.Falling)) { FallInitializer init = new(spline.GetPoint(spline.First()).Z); spline.InitLengths(init); } else { CommonInitializer init = new(args.velocity); spline.InitLengths(init); } // TODO: what to do in such cases? problem is in input data (all points are at same coords) if (spline.Length() < 1) { Log.outError(LogFilter.Unit, "MoveSpline.init_spline: zero length spline, wrong input data?"); spline.Set_length(spline.Last(), spline.IsCyclic() ? 1000 : 1); } point_Idx = spline.First(); }
void init_spline(MoveSplineInitArgs args) { Spline.EvaluationMode[] modes = new Spline.EvaluationMode[2] { Spline.EvaluationMode.Linear, Spline.EvaluationMode.Catmullrom }; if (args.flags.cyclic) { int cyclic_point = 0; // MoveSplineFlag::Enter_Cycle support dropped //if (splineflags & SPLINEFLAG_ENTER_CYCLE) //cyclic_point = 1; // shouldn't be modified, came from client spline.Init_Spline(args.path, args.path.Length, modes[Convert.ToInt32(args.flags.isSmooth())], cyclic_point); } else { spline.Init_Spline(args.path, args.path.Length, modes[Convert.ToInt32(args.flags.isSmooth())]); } // init spline timestamps if (splineflags.falling) { //FallInitializer init(spline.getPoint(spline.first()).z); //spline.initLengths(init); } else { CommonInitializer init = new CommonInitializer(args.velocity); spline.initLengths(init); } // TODO: what to do in such cases? problem is in input data (all points are at same coords) if (spline.length() < 1) { Log.outError("MoveSpline->init_spline: zero length spline, wrong input data?"); spline.set_length(spline.last(), spline.isCyclic() ? 1000 : 1); } point_Idx = spline.first(); }