fix ai moving out of sim range
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
This commit is contained in:
parent
0136a78992
commit
f07ea76129
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user