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
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

View File

@ -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;
}

View File

@ -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))
)
)
);

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.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);
}
/**