/// <summary> /// 砍伐树木任务 /// </summary> /// <param name="go"></param> /// <param name="position"></param> public void FellingTreeTask(GameObject go, Vector3 position) { var info = GameData.Instance.rawmaterialWorkloadDic[MenuType.Felling]; view.onUpdateWorload?.Invoke(info.Workload); var result = TaskHandler.Instance.taskSystem.EnqueueTask(() => { Task task = new MiningTask.Excavate { TargetPosition = position, Name = "砍伐", PrefabGame = go, Parent = go.transform.parent.gameObject, Workload = info.Workload, ExcavateAction = (MiningTask.Excavate currentTask) => { var currentWorkload = currentTask.Workload; FunctionUpdater.Create(() => { currentWorkload -= Time.deltaTime; view.onUpdateWorload?.Invoke(currentWorkload); go.transform.parent.GetComponent <SpriteRenderer>().color = new Color(1, 1, 1, currentWorkload); PlayerController.Instance.PlayMining(true); if (currentWorkload <= 0f) { SimplePool.Despawn(currentTask.PrefabGame); GameObject newGo = SimplePool.Spawn(ResourcesManager.LoadPrefab("Prefabs/Log"), go.transform.parent.position, Quaternion.identity); newGo.transform.SetParent(go.transform.parent, false); newGo.transform.position = go.transform.parent.position; PlayerController.Instance.PlayMining(false); WorkerTaskAI.Instance.FinishTheWork(); // Destroy(currentTask.PrefabGame.transform.parent.gameObject); return(true); } else { return(false); } }); } }; return(task); }); if (result) { SimplePool.Despawn(go); } }
/// <summary> /// 执行清理任务 /// </summary> /// <param name="task"></param> private void ExecuteTask_ShellFloorCleanUp(MiningTask.Excavate task) { currentTask = task; worker.MoveTo(task.TargetPosition, () => { task.ExcavateAction(task); }); }