{"record":{"id":"e6196a20719446a1","repo":"egametang/ET","slug":"the-method-or-operation-is-not-implemented","errorCode":null,"errorMessage":"The method or operation is not implemented.","messagePattern":"The method or operation is not implemented\\.","errorType":"exception","errorClass":"NotImplementedException","httpStatus":null,"severity":"error","filePath":"Packages/cn.etetet.recast/Scripts/Core/Share/Detour.Extras/Jumplink/Trajectory.cs","lineNumber":15,"sourceCode":"using System;\nusing DotRecast.Core;\n\nnamespace DotRecast.Detour.Extras.Jumplink\n{\n    public class Trajectory\n    {\n        public float Lerp(float f, float g, float u)\n        {\n            return u * g + (1f - u) * f;\n        }\n\n        public virtual RcVec3f Apply(RcVec3f start, RcVec3f end, float u)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}","sourceCodeStart":1,"sourceCodeEnd":18,"githubUrl":"https://github.com/egametang/ET/blob/5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f/Packages/cn.etetet.recast/Scripts/Core/Share/Detour.Extras/Jumplink/Trajectory.cs#L1-L18","documentation":"Trajectory.Apply is a virtual base method whose only body is `throw new NotImplementedException()`. It is an abstract-in-spirit template method: concrete subclasses (e.g. jump/bounce trajectories) override Apply to compute a point along the path. Calling Apply on the base Trajectory type directly means polymorphism was bypassed or a subclass forgot to override.","triggerScenarios":"Instantiating the base Trajectory class directly and calling Apply; a subclass that does not override Apply; a factory returning the base type instead of a concrete trajectory.","commonSituations":"Using the wrong type in JumpLinkBuilder where a concrete JumpTrajectory is required; a custom trajectory subclass missing the override keyword; tests/mocks using base Trajectory.","solutions":["Use a concrete subclass that overrides Apply (e.g. JumpTrajectory).","If you subclass Trajectory, implement Apply with the real interpolation.","Ensure factories return the concrete trajectory type, never the abstract base."],"exampleFix":"// before\nvar traj = new Trajectory();\nvar p = traj.Apply(start, end, 0.5f); // throws\n\n// after — use concrete subclass\nTrajectory traj = new JumpTrajectory(height);\nvar p = traj.Apply(start, end, 0.5f);","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"static bool IsConcreteTrajectory(Trajectory t) => t.GetType() != typeof(Trajectory);","tryCatchPattern":null,"preventionTips":["Never instantiate the base Trajectory; always use a concrete subclass like JumpTrajectory.","If subclassing, always override Apply.","Ensure factories return concrete trajectory types."],"tags":["recast","detour-extras","jumplink","trajectory","todo"],"backgroundTag":null,"analyzedSha":"5cab01f7a8bee5f49f4781eebe9e2b1c6d7ebe0f","analyzedAt":"2026-08-13T21:10:40.377Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}