fix ai moving out of sim range
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit

This commit is contained in:
austin 2025-05-10 14:31:37 -04:00
parent 0136a78992
commit f07ea76129
4 changed files with 11 additions and 27 deletions

View File

@ -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 Debug ability to send characters off map
More windows for debugging work More windows for debugging work
GriddedDataCellManager simulates cells that contain creatures GriddedDataCellManager simulates cells that contain creatures
Characters can pursue goal to leave sim range and the real entity is unloaded when they leave range

View File

@ -9,8 +9,6 @@ import electrosphere.entity.state.server.ServerCharacterData;
import electrosphere.server.ai.blackboard.Blackboard; import electrosphere.server.ai.blackboard.Blackboard;
import electrosphere.server.ai.blackboard.BlackboardKeys; import electrosphere.server.ai.blackboard.BlackboardKeys;
import electrosphere.server.ai.nodes.AITreeNode; 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.character.Character;
import electrosphere.server.macro.MacroData; import electrosphere.server.macro.MacroData;
import electrosphere.server.macro.character.goal.CharacterGoal; import electrosphere.server.macro.character.goal.CharacterGoal;
@ -66,11 +64,11 @@ public class MacroCharacterGoalNode implements AITreeNode {
} }
switch(goal.getType()){ switch(goal.getType()){
case LEAVE_SIM_RANGE: { case LEAVE_SIM_RANGE: {
Realm realm = Globals.realmManager.getEntityRealm(entity); // Realm realm = Globals.realmManager.getEntityRealm(entity);
Vector3d entityPos = EntityUtils.getPosition(entity); Vector3d entityPos = EntityUtils.getPosition(entity);
Vector3d offset = new Vector3d(entityPos).add(1000,0,0); Vector3d offset = new Vector3d(entityPos).add(1000,0,0);
GriddedDataCellManager griddedDataCellManager = (GriddedDataCellManager)realm.getDataCellManager(); // GriddedDataCellManager griddedDataCellManager = (GriddedDataCellManager)realm.getDataCellManager();
Vector3d targetPos = griddedDataCellManager.getMacroEntryPoint(offset); Vector3d targetPos = offset;//griddedDataCellManager.getMacroEntryPoint(offset).add(10,0,0);
blackboard.put(BlackboardKeys.POINT_TARGET, targetPos); blackboard.put(BlackboardKeys.POINT_TARGET, targetPos);
} break; } break;
} }

View File

@ -1,12 +1,15 @@
package electrosphere.server.ai.trees.character.goals; 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.blackboard.BlackboardKeys;
import electrosphere.server.ai.nodes.AITreeNode; 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.macro.MacroCharacterGoalNode;
import electrosphere.server.ai.nodes.meta.collections.SelectorNode; import electrosphere.server.ai.nodes.meta.collections.SelectorNode;
import electrosphere.server.ai.nodes.meta.collections.SequenceNode; import electrosphere.server.ai.nodes.meta.collections.SequenceNode;
import electrosphere.server.ai.nodes.meta.debug.PublishStatusNode; 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; import electrosphere.server.macro.character.goal.CharacterGoal.CharacterGoalType;
/** /**
@ -30,7 +33,8 @@ public class CharacterGoalTree {
//check if we're trying to leave sim range //check if we're trying to leave sim range
MacroCharacterGoalNode.create(CharacterGoalType.LEAVE_SIM_RANGE), MacroCharacterGoalNode.create(CharacterGoalType.LEAVE_SIM_RANGE),
new PublishStatusNode("Leaving simulation range"), new PublishStatusNode("Leaving simulation range"),
MoveToTree.create(BlackboardKeys.POINT_TARGET) new FaceTargetNode(BlackboardKeys.POINT_TARGET),
new RunnerNode(new MoveStartNode(MovementRelativeFacing.FORWARD))
) )
) )
); );

View File

@ -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.DataDeleteNode;
import electrosphere.server.ai.nodes.meta.collections.SelectorNode; import electrosphere.server.ai.nodes.meta.collections.SelectorNode;
import electrosphere.server.ai.nodes.meta.collections.SequenceNode; 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.RunnerNode;
import electrosphere.server.ai.nodes.meta.decorators.SucceederNode; import electrosphere.server.ai.nodes.meta.decorators.SucceederNode;
import electrosphere.server.ai.nodes.plan.PathfindingNode; import electrosphere.server.ai.nodes.plan.PathfindingNode;
@ -36,25 +35,7 @@ public class MoveToTree {
* @return The root node of the move-to-target tree * @return The root node of the move-to-target tree
*/ */
public static AITreeNode create(String targetKey){ public static AITreeNode create(String targetKey){
return new SelectorNode( return MoveToTree.create(DEFAULT_DIST, targetKey);
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))
)
);
} }
/** /**