melee ai tweaks
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
61c5599265
commit
89a0df81a5
@ -14,7 +14,6 @@
|
||||
+ fix the vibes
|
||||
Stability
|
||||
Movement penalty while swinging weapon
|
||||
Only have ai strafe if its outside attack range
|
||||
Ticketed randomizer node for BTs to more heavily weight attacking and waiting
|
||||
Slow down strafe movement somehow
|
||||
|
||||
|
||||
@ -574,6 +574,8 @@ True behavior trees
|
||||
- Colections
|
||||
- Combat
|
||||
Melee ai using BT framework
|
||||
Server block nullchecks
|
||||
Melee AI tweaks
|
||||
|
||||
|
||||
# TODO
|
||||
|
||||
@ -101,6 +101,7 @@ public class ServerBlockTree implements BehaviorTree {
|
||||
this.stateTransitionUtil.reset();
|
||||
setState(BlockState.COOLDOWN);
|
||||
//activate hitboxes
|
||||
if(AttachUtils.hasChildren(parent)){
|
||||
List<Entity> attachedEntities = AttachUtils.getChildrenList(parent);
|
||||
for(Entity currentAttached : attachedEntities){
|
||||
if(HitboxCollectionState.hasHitboxState(currentAttached)){
|
||||
@ -110,6 +111,7 @@ public class ServerBlockTree implements BehaviorTree {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void simulate(float deltaTime) {
|
||||
@ -131,6 +133,7 @@ public class ServerBlockTree implements BehaviorTree {
|
||||
} break;
|
||||
case COOLDOWN: {
|
||||
//activate hitboxes
|
||||
if(AttachUtils.hasChildren(parent)){
|
||||
List<Entity> attachedEntities = AttachUtils.getChildrenList(parent);
|
||||
for(Entity currentAttached : attachedEntities){
|
||||
if(HitboxCollectionState.hasHitboxState(currentAttached)){
|
||||
@ -139,6 +142,7 @@ public class ServerBlockTree implements BehaviorTree {
|
||||
currentState.setBlockOverride(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.stateTransitionUtil.simulate(BlockState.COOLDOWN);
|
||||
} break;
|
||||
case NOT_BLOCKING: {
|
||||
|
||||
@ -44,7 +44,6 @@ public class TimerNode implements DecoratorNode {
|
||||
this.child = child;
|
||||
this.frameCount = frameCount;
|
||||
this.timerId = Globals.aiManager.getTimerService().createTimer();
|
||||
System.out.println("Created timer node with id " + this.timerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -44,7 +44,22 @@ public class MeleeAITree {
|
||||
//preconditions here
|
||||
new HasWeaponNode(),
|
||||
new MeleeTargetingNode(attackerTreeData.getAggroRange()),
|
||||
//determine strategy
|
||||
|
||||
//perform different actions based on distance to target
|
||||
new SelectorNode(
|
||||
|
||||
//in attack range
|
||||
new SequenceNode(
|
||||
//check prior to performing action
|
||||
new MeleeRangeCheckNode(attackerTreeData,MeleeRangeCheckType.ATTACK),
|
||||
|
||||
//set state
|
||||
//stop walking now that we're in range
|
||||
new PublishStatusNode("Slowing down"),
|
||||
new WalkStopNode(),
|
||||
new UntilNode(AITreeNodeResult.FAILURE, new IsMovingNode()),
|
||||
|
||||
//select action to perform
|
||||
new RandomizerNode(
|
||||
//wait
|
||||
new SequenceNode(
|
||||
@ -52,8 +67,32 @@ public class MeleeAITree {
|
||||
new FaceTargetNode(),
|
||||
new TimerNode(new SucceederNode(null), 1200)
|
||||
),
|
||||
//attack
|
||||
new SequenceNode(
|
||||
new PublishStatusNode("Attacking"),
|
||||
new FaceTargetNode(),
|
||||
new AttackStartNode(),
|
||||
new TimerNode(new SucceederNode(null), 150)
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
//move to hover distance
|
||||
//in aggro range
|
||||
new SequenceNode(
|
||||
//check prior to performing action
|
||||
new MeleeRangeCheckNode(attackerTreeData,MeleeRangeCheckType.AGGRO),
|
||||
|
||||
//select action to perform
|
||||
new RandomizerNode(
|
||||
|
||||
//wait
|
||||
new SequenceNode(
|
||||
new PublishStatusNode("Waiting"),
|
||||
new FaceTargetNode(),
|
||||
new TimerNode(new SucceederNode(null), 1200)
|
||||
),
|
||||
|
||||
//strafe to the right
|
||||
new SequenceNode(
|
||||
new PublishStatusNode("Strafing right"),
|
||||
new InverterNode(new OnFailureNode(
|
||||
@ -65,7 +104,7 @@ public class MeleeAITree {
|
||||
new SucceederNode(new WalkStopNode())
|
||||
),
|
||||
|
||||
//move from hover distance to melee range
|
||||
//strafe to the left
|
||||
new SequenceNode(
|
||||
new PublishStatusNode("Strafing left"),
|
||||
new InverterNode(new OnFailureNode(
|
||||
@ -77,32 +116,76 @@ public class MeleeAITree {
|
||||
new SucceederNode(new WalkStopNode())
|
||||
),
|
||||
|
||||
//approach target
|
||||
//move towards target and attack
|
||||
new SequenceNode(
|
||||
new PublishStatusNode("Attack target"),
|
||||
//move towards target if its outside of melee range
|
||||
new UntilNode(AITreeNodeResult.SUCCESS,
|
||||
//or
|
||||
new SelectorNode(
|
||||
//in range
|
||||
new MeleeRangeCheckNode(attackerTreeData,MeleeRangeCheckType.ATTACK),
|
||||
//approaching target
|
||||
new SequenceNode(
|
||||
new PublishStatusNode("Approaching target"),
|
||||
new PublishStatusNode("Move into attack range"),
|
||||
new FaceTargetNode(),
|
||||
new OnFailureNode(new IsMovingNode(), new WalkStartNode(MovementRelativeFacing.FORWARD)),
|
||||
new MeleeRangeCheckNode(attackerTreeData,MeleeRangeCheckType.ATTACK)
|
||||
new SucceederNode(new WalkStartNode(MovementRelativeFacing.FORWARD)),
|
||||
new TimerNode(new SucceederNode(null), 600)
|
||||
)
|
||||
)
|
||||
),
|
||||
//stop walking now that we're in range
|
||||
new PublishStatusNode("Slowing down"),
|
||||
new WalkStopNode(),
|
||||
new UntilNode(AITreeNodeResult.FAILURE, new IsMovingNode()),
|
||||
new PublishStatusNode("Attacking"),
|
||||
new AttackStartNode()
|
||||
)
|
||||
)
|
||||
// //determine strategy
|
||||
// new RandomizerNode(
|
||||
// //wait
|
||||
// new SequenceNode(
|
||||
// new PublishStatusNode("Waiting"),
|
||||
// new FaceTargetNode(),
|
||||
// new TimerNode(new SucceederNode(null), 1200)
|
||||
// ),
|
||||
|
||||
// //move to hover distance
|
||||
// new SequenceNode(
|
||||
// new PublishStatusNode("Strafing right"),
|
||||
// new InverterNode(new OnFailureNode(
|
||||
// new WalkStartNode(MovementRelativeFacing.RIGHT),
|
||||
// new FailerNode(null)
|
||||
// )),
|
||||
// new FaceTargetNode(),
|
||||
// new TimerNode(new SucceederNode(null), 600),
|
||||
// new SucceederNode(new WalkStopNode())
|
||||
// ),
|
||||
|
||||
// //move from hover distance to melee range
|
||||
// new SequenceNode(
|
||||
// new PublishStatusNode("Strafing left"),
|
||||
// new InverterNode(new OnFailureNode(
|
||||
// new WalkStartNode(MovementRelativeFacing.LEFT),
|
||||
// new FailerNode(null)
|
||||
// )),
|
||||
// new FaceTargetNode(),
|
||||
// new TimerNode(new SucceederNode(null), 600),
|
||||
// new SucceederNode(new WalkStopNode())
|
||||
// ),
|
||||
|
||||
// //move towards target and attack
|
||||
// new SequenceNode(
|
||||
// new PublishStatusNode("Attack target"),
|
||||
// //move towards target if its outside of melee range
|
||||
// new UntilNode(AITreeNodeResult.SUCCESS,
|
||||
// //or
|
||||
// new SelectorNode(
|
||||
// //in range
|
||||
// new MeleeRangeCheckNode(attackerTreeData,MeleeRangeCheckType.ATTACK),
|
||||
// //approaching target
|
||||
// new SequenceNode(
|
||||
// new PublishStatusNode("Approaching target"),
|
||||
// new FaceTargetNode(),
|
||||
// new OnFailureNode(new IsMovingNode(), new WalkStartNode(MovementRelativeFacing.FORWARD)),
|
||||
// new MeleeRangeCheckNode(attackerTreeData,MeleeRangeCheckType.ATTACK)
|
||||
// )
|
||||
// )
|
||||
// ),
|
||||
// //stop walking now that we're in range
|
||||
// new PublishStatusNode("Slowing down"),
|
||||
// new WalkStopNode(),
|
||||
// new UntilNode(AITreeNodeResult.FAILURE, new IsMovingNode()),
|
||||
// new PublishStatusNode("Attacking"),
|
||||
// new AttackStartNode()
|
||||
// )
|
||||
// )
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user