public bool QueueTask(InputBuildTask task) { if (task == null || task.TaskState != BuildTaskState.Inactive) { return(false); } return(mTaskProcessor.QueueTask(task)); }
private void FinalizeOnFail(string message, bool postError) { if (mTask != null) { mTask.Abort(message); mTask = null; } if (postError) { mLogger.PostError(message, mContext.Build); } mBuilder = null; mGeometry = null; mAssets = new InputAssets(); mState = State.Finished; }
private void UpdateTask() { if (!mTask.IsFinished) { return; } mLogger.Log(mTask.Messages); if (mTask.TaskState == BuildTaskState.Aborted) { FinalizeOnFail("Input geometry build failed.", true); return; } mGeometry = mTask.Result; mLogger.PostTrace("Completed input geometry build.", mTask.Messages, mContext.Build); mTask = null; mState = State.Finished; }
private void UpdateBuilder() { if (!mBuilder.IsFinished) { mBuilder.Build(); return; } mLogger.Log(mBuilder.Messages); NavmeshBuild build = mContext.Build; // Caller has validated. if (mBuilder.State == InputBuildState.Aborted) { FinalizeOnFail("Input data compile failed: Builder aborted.", true); return; } mAssets = mBuilder.Result; TriangleMesh mesh = mAssets.geometry; if (!InputGeometryBuilder.IsValid(mesh, mAssets.areas)) { FinalizeOnFail("Input geometry failed validation. (Malformed data.)", true); return; } InputGeometryBuilder gbuilder = InputGeometryBuilder.UnsafeCreate(mesh , mAssets.areas , build.Config.GetConfig().WalkableSlope , true); if (gbuilder == null) { FinalizeOnFail("Could not create input geometry builder. (Internal error.)", true); return; } // Release unneeded assets. mAssets.geometry = null; mAssets.areas = null; mBuilder = null; mTask = InputBuildTask.Create(gbuilder, BuildTaskProcessor.HighPriority); if (mTask == null) { FinalizeOnFail("Task creation failed. (Internal error.)", true); } else if (mContext.QueueTask(mTask)) { mLogger.PostTrace("Completed input build. Submitted geometry build task." , mContext.Build); mState = State.Task; } else { FinalizeOnFail("Task submission failed. (Internal error.)", true); } }