void Update() { if (Time.time > this.nextUpdateTime || this.GameManager.WorldChanged) { this.GameManager.WorldChanged = false; this.nextUpdateTime = Time.time + DECISION_MAKING_INTERVAL; //first step, perceptions //update the agent's goals based on the state of the world this.SurviveGoal.InsistenceValue = this.GameManager.characterData.MaxHP - this.GameManager.characterData.HP; this.BeQuickGoal.InsistenceValue += DECISION_MAKING_INTERVAL * 0.1f; if (this.BeQuickGoal.InsistenceValue > 10.0f) { this.BeQuickGoal.InsistenceValue = 10.0f; } this.GainXPGoal.InsistenceValue += 0.1f; //increase in goal over time if (this.GameManager.characterData.XP > this.previousXP) { this.GainXPGoal.InsistenceValue -= this.GameManager.characterData.XP - this.previousXP; this.previousXP = this.GameManager.characterData.XP; } this.GetRichGoal.InsistenceValue += 0.1f; //increase in goal over time if (this.GetRichGoal.InsistenceValue > 10) { this.GetRichGoal.InsistenceValue = 10.0f; } if (this.GameManager.characterData.Money > this.previousGold) { this.GetRichGoal.InsistenceValue -= this.GameManager.characterData.Money - this.previousGold; this.previousGold = this.GameManager.characterData.Money; } this.SurviveGoalText.text = "Survive: " + this.SurviveGoal.InsistenceValue; this.GainXPGoalText.text = "Gain XP: " + this.GainXPGoal.InsistenceValue.ToString("F1"); this.BeQuickGoalText.text = "Be Quick: " + this.BeQuickGoal.InsistenceValue.ToString("F1"); this.GetRichGoalText.text = "GetRich: " + this.GetRichGoal.InsistenceValue.ToString("F1"); if (this.MCTSActive) { this.MCTS.InitializeMCTSSearch(); } else { this.GOAPDecisionMaking.InitializeDecisionMakingProcess(); } } if (this.MCTSActive) { this.UpdateMCTS(); } else { this.UpdateDLGOAP(); } if (this.CurrentAction != null) { if (this.CurrentAction.CanExecute()) { this.CurrentAction.Execute(); } } //call the pathfinding method if the user specified a new goal if (this.AStarPathFinding.InProgress) { var finished = this.AStarPathFinding.Search(out this.currentSolution); if (finished && this.currentSolution != null) { //lets smooth out the Path this.startPosition = this.Character.KinematicData.position; this.currentSmoothedSolution = AStarPathFinding.pathSmoothing(this.currentSolution); this.currentSmoothedSolution.CalculateLocalPathsFromPathPositions(this.Character.KinematicData.position); this.Character.Movement = new DynamicFollowPath(this.Character.KinematicData, this.currentSmoothedSolution) { MaxAcceleration = 200.0f, MaxSpeed = 40.0f }; } } this.Character.Update(); //manage the character's animation if (this.Character.KinematicData.velocity.sqrMagnitude > 0.1) { this.characterAnimator.SetBool("Walking", true); } else { this.characterAnimator.SetBool("Walking", false); } }