public MiniInputCompile(ControlContext context) { mContext = context; NavmeshBuild build = context.Build; if (!build) { FinalizeOnFail("The control context's build does not exist.", true); return; } InputBuildOption options = InputBuildOption.ThreadSafeOnly; options |= (build.AutoCleanGeometry ? InputBuildOption.AutoCleanGeometry : 0); mBuilder = InputBuilder.Create(build.SceneQuery , build.GetInputProcessors() , options); if (mBuilder == null) { FinalizeOnFail("Could not create input builder.", true); return; } mState = State.Builder; }
/// <summary> /// Construction. /// </summary> /// <remarks> /// <para> /// The scene query will be initialized during construction. /// </para> /// <para> /// If no scene query is provided, the query scope will be all game objects in the scene. /// </para> /// </remarks> /// <param name="sceneQuery">The scene query. (Optional)</param> /// <param name="options">Build options.</param> public InputBuildContext(ISceneQuery sceneQuery, InputBuildOption options) { mOptions = options; mSceneQuery = sceneQuery; if (sceneQuery != null) { mSceneQuery.Initialize(); } }
private InputAssets BuildInput(bool ownProgress) { InputBuildOption options = (mBuild.AutoCleanGeometry ? InputBuildOption.AutoCleanGeometry : 0); InputBuilder builder = InputBuilder.Create(mBuild.SceneQuery, mBuild.GetInputProcessors(), options); if (builder == null) { mContext.LogError("Could not create input builder.", mBuild); return(new InputAssets()); } try { while (!builder.IsFinished) { builder.Build(); if (EditorUtility.DisplayCancelableProgressBar("Compile Input" , InputBuilder.ToLabel(builder.State) , InputBuilder.ToProgress(builder.State))) { return(new InputAssets()); } } } finally { if (ownProgress) { EditorUtility.ClearProgressBar(); } } mContext.Log(builder.Messages); if (builder.State != InputBuildState.Complete) { mContext.LogError("Input builder aborted.", mBuild); return(new InputAssets()); } InputAssets assets = builder.Result; org.critterai.geom.TriangleMesh mesh = assets.geometry; if (!InputGeometryBuilder.IsValid(mesh, assets.areas)) { mContext.LogError("Input geometry failed validation. (Malformed data.)", mBuild); return(new InputAssets()); } return(builder.Result); }
public static InputBuilder Create(ISceneQuery filter , IInputBuildProcessor[] processors , InputBuildOption options) { IInputBuildProcessor[] lprocessors = ArrayUtil.Compress(processors); if (lprocessors == null || lprocessors.Length == 0) { return(null); } for (int i = lprocessors.Length - 1; i >= 0; i--) { IInputBuildProcessor processor = lprocessors[i]; if (processor.DuplicatesAllowed) { continue; } System.Type ta = processor.GetType(); for (int j = i - 1; j >= 0; j--) { System.Type tb = lprocessors[j].GetType(); if (ta.IsAssignableFrom(tb) || tb.IsAssignableFrom(ta)) { return(null); } } } if (lprocessors == processors) { lprocessors = (IInputBuildProcessor[])lprocessors.Clone(); } InputBuildContext context = new InputBuildContext(filter, options); return(new InputBuilder(context, lprocessors)); }
public static InputBuilder Create(ISceneQuery filter , IInputBuildProcessor[] processors , InputBuildOption options) { IInputBuildProcessor[] lprocessors = ArrayUtil.Compress(processors); if (lprocessors == null || lprocessors.Length == 0) return null; for (int i = lprocessors.Length - 1; i >= 0; i--) { IInputBuildProcessor processor = lprocessors[i]; if (processor.DuplicatesAllowed) continue; System.Type ta = processor.GetType(); for (int j = i - 1; j >= 0; j--) { System.Type tb = lprocessors[j].GetType(); if (ta.IsAssignableFrom(tb) || tb.IsAssignableFrom(ta)) return null; } } if (lprocessors == processors) lprocessors = (IInputBuildProcessor[])lprocessors.Clone(); InputBuildContext context = new InputBuildContext(filter, options); return new InputBuilder(context, lprocessors); }