From f07ea76129c3e5050a40d9b85973b22b06baca72 Mon Sep 17 00:00:00 2001 From: austin Date: Sat, 10 May 2025 14:31:37 -0400 Subject: [PATCH] fix ai moving out of sim range --- docs/src/progress/renderertodo.md | 1 + .../nodes/macro/MacroCharacterGoalNode.java | 8 +++---- .../character/goals/CharacterGoalTree.java | 8 +++++-- .../server/ai/trees/creature/MoveToTree.java | 21 +------------------ 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 6b837fd4..2e6f0515 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1700,6 +1700,7 @@ Ability to explicitly spawn new characters into macro data and have them then sp Debug ability to send characters off map More windows for debugging work GriddedDataCellManager simulates cells that contain creatures +Characters can pursue goal to leave sim range and the real entity is unloaded when they leave range diff --git a/src/main/java/electrosphere/server/ai/nodes/macro/MacroCharacterGoalNode.java b/src/main/java/electrosphere/server/ai/nodes/macro/MacroCharacterGoalNode.java index af6872f4..f1269b3c 100644 --- a/src/main/java/electrosphere/server/ai/nodes/macro/MacroCharacterGoalNode.java +++ b/src/main/java/electrosphere/server/ai/nodes/macro/MacroCharacterGoalNode.java @@ -9,8 +9,6 @@ import electrosphere.entity.state.server.ServerCharacterData; import electrosphere.server.ai.blackboard.Blackboard; import electrosphere.server.ai.blackboard.BlackboardKeys; import electrosphere.server.ai.nodes.AITreeNode; -import electrosphere.server.datacell.Realm; -import electrosphere.server.datacell.gridded.GriddedDataCellManager; import electrosphere.server.macro.character.Character; import electrosphere.server.macro.MacroData; import electrosphere.server.macro.character.goal.CharacterGoal; @@ -66,11 +64,11 @@ public class MacroCharacterGoalNode implements AITreeNode { } switch(goal.getType()){ case LEAVE_SIM_RANGE: { - Realm realm = Globals.realmManager.getEntityRealm(entity); + // Realm realm = Globals.realmManager.getEntityRealm(entity); Vector3d entityPos = EntityUtils.getPosition(entity); Vector3d offset = new Vector3d(entityPos).add(1000,0,0); - GriddedDataCellManager griddedDataCellManager = (GriddedDataCellManager)realm.getDataCellManager(); - Vector3d targetPos = griddedDataCellManager.getMacroEntryPoint(offset); + // GriddedDataCellManager griddedDataCellManager = (GriddedDataCellManager)realm.getDataCellManager(); + Vector3d targetPos = offset;//griddedDataCellManager.getMacroEntryPoint(offset).add(10,0,0); blackboard.put(BlackboardKeys.POINT_TARGET, targetPos); } break; } diff --git a/src/main/java/electrosphere/server/ai/trees/character/goals/CharacterGoalTree.java b/src/main/java/electrosphere/server/ai/trees/character/goals/CharacterGoalTree.java index fc7d3cfd..67a7d48d 100644 --- a/src/main/java/electrosphere/server/ai/trees/character/goals/CharacterGoalTree.java +++ b/src/main/java/electrosphere/server/ai/trees/character/goals/CharacterGoalTree.java @@ -1,12 +1,15 @@ package electrosphere.server.ai.trees.character.goals; +import electrosphere.entity.state.movement.groundmove.ClientGroundMovementTree.MovementRelativeFacing; import electrosphere.server.ai.blackboard.BlackboardKeys; import electrosphere.server.ai.nodes.AITreeNode; +import electrosphere.server.ai.nodes.actions.move.FaceTargetNode; +import electrosphere.server.ai.nodes.actions.move.MoveStartNode; import electrosphere.server.ai.nodes.macro.MacroCharacterGoalNode; import electrosphere.server.ai.nodes.meta.collections.SelectorNode; import electrosphere.server.ai.nodes.meta.collections.SequenceNode; import electrosphere.server.ai.nodes.meta.debug.PublishStatusNode; -import electrosphere.server.ai.trees.creature.MoveToTree; +import electrosphere.server.ai.nodes.meta.decorators.RunnerNode; import electrosphere.server.macro.character.goal.CharacterGoal.CharacterGoalType; /** @@ -30,7 +33,8 @@ public class CharacterGoalTree { //check if we're trying to leave sim range MacroCharacterGoalNode.create(CharacterGoalType.LEAVE_SIM_RANGE), new PublishStatusNode("Leaving simulation range"), - MoveToTree.create(BlackboardKeys.POINT_TARGET) + new FaceTargetNode(BlackboardKeys.POINT_TARGET), + new RunnerNode(new MoveStartNode(MovementRelativeFacing.FORWARD)) ) ) ); diff --git a/src/main/java/electrosphere/server/ai/trees/creature/MoveToTree.java b/src/main/java/electrosphere/server/ai/trees/creature/MoveToTree.java index a13ee035..0e1450b1 100644 --- a/src/main/java/electrosphere/server/ai/trees/creature/MoveToTree.java +++ b/src/main/java/electrosphere/server/ai/trees/creature/MoveToTree.java @@ -10,7 +10,6 @@ import electrosphere.server.ai.nodes.checks.spatial.TargetRangeCheckNode; import electrosphere.server.ai.nodes.meta.DataDeleteNode; import electrosphere.server.ai.nodes.meta.collections.SelectorNode; import electrosphere.server.ai.nodes.meta.collections.SequenceNode; -import electrosphere.server.ai.nodes.meta.debug.PublishStatusNode; import electrosphere.server.ai.nodes.meta.decorators.RunnerNode; import electrosphere.server.ai.nodes.meta.decorators.SucceederNode; import electrosphere.server.ai.nodes.plan.PathfindingNode; @@ -36,25 +35,7 @@ public class MoveToTree { * @return The root node of the move-to-target tree */ public static AITreeNode create(String targetKey){ - return new SelectorNode( - new SequenceNode( - //check if in range of target - new TargetRangeCheckNode(DEFAULT_DIST, targetKey), - new DataDeleteNode(BlackboardKeys.PATHFINDING_POINT), - new DataDeleteNode(BlackboardKeys.PATHFINDING_DATA), - //if in range, stop moving fowards and return SUCCESS - new SucceederNode(new MoveStopNode()) - ), - - //not in range of target, keep moving towards it - new SequenceNode( - new PublishStatusNode("Thinking about pathing"), - PathfindingNode.createPathEntity(targetKey), - new PublishStatusNode("Moving"), - new FaceTargetNode(BlackboardKeys.PATHFINDING_POINT), - new RunnerNode(new MoveStartNode(MovementRelativeFacing.FORWARD)) - ) - ); + return MoveToTree.create(DEFAULT_DIST, targetKey); } /**