protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var entity = context.Entity; var movement = entity.GetComponent <MovementComponent>(); return(movement.CanMove() ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { if (!IsContextValid(context)) { return(BehaviourTreeStatus.Failure); } var cellsSuitableForSkillUse = this.boardNavigator .WithinSkillRange( GetTargetPoint(context), context.Entity.transform.position, context.Entity.GetComponent <SpellbookComponent>().FindOnActionBar(this.skillId)) .Where(cell => cell.IsWalkable && !cell.IsOccupied) .Where(cell => this.pathfinder.IsTargetReachable(context.Entity, cell.transform.position)) .ToList(); if (cellsSuitableForSkillUse.Count == 0) { return(BehaviourTreeStatus.Failure); } context.TargetPoint = cellsSuitableForSkillUse .OrderBy(cell => (cell.transform.position - context.Entity.transform.position).sqrMagnitude) .First() .transform.position; return(BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var target = context.TargetEntity; return(target.GetComponent <BehavioursComponent>().IsSlowed ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var path = this.pathfinder.FindPath( context.Entity, context.RequireTargetEntity().transform.position, true); return(path.Count > 0 ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
private void Close(BehaviourTreeContext context) { context.OpenedNodes.Remove(this); OnClose(context); LastStatus = BehaviourTreeStatus.Waiting; }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { return(BoardNavigator.Instance .WithinCircle(context.Entity.transform.position, Properties.Range) .Any(cell => cell.GameObjectsInside.Corpses().Any()) ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var cell = this.boardNavigator.WithinCircle(context.RequireTargetPoint(), 1).FirstOrDefault(); return(cell == null || !cell.IsWalkable ? BehaviourTreeStatus.Failure : BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var health = context.Entity.GetComponent <HealthComponent>(); return(health.HealthFraction <= Properties.HealthFraction ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { foreach (var child in Children) { child.Tick(context, delta); } return(BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { if (this.success == null) { return(BehaviourTreeStatus.Running); } return(this.success == true ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { if (context.TargetEntity == null) { return(BehaviourTreeStatus.Failure); } return(context.TargetEntity.IsAllyOf(context.Entity) ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { if (context.Combat == null) { return(BehaviourTreeStatus.Failure); } return(context.Combat.IsEntityTurn(context.Entity) ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { if (Children.Count == 0) { throw new ApplicationException($"{GetType().Name} must have a child node!"); } return(Children.First().Tick(context, delta) == BehaviourTreeStatus.Running ? BehaviourTreeStatus.Running : BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var target = context.TargetEntity; var health = target.GetComponent <HealthComponent>(); if (health == null) { return(BehaviourTreeStatus.Failure); } return(health.IsAlive ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var cell = this.boardNavigator.WithinCircle(context.Entity.transform.position, Properties.Range).Random(); if (cell == null) { return(BehaviourTreeStatus.Failure); } context.TargetPoint = cell.transform.position; return(BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var cell = BoardNavigator.Instance.BehindTheBackOfOccupying(context.Entity.transform.position); if (cell == null) { return(BehaviourTreeStatus.Failure); } return(cell.OccupiedBy == context.RequireTargetEntity() ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var target = context.TargetEntity; var entity = context.Entity; if (target == null) { return(BehaviourTreeStatus.Failure); } return(this.boardNavigator.EntitiesInRadius(entity.transform.position, this.range).Contains(target) ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var entity = context.Entity; var target = context.RequireTargetEntity(); var entitiesInSkillRange = this.boardNavigator .EntitiesInSkillRange( entity.transform.position, target.transform.position, entity.GetComponent <SpellbookComponent>().FindOnActionBar(this.skillId) ); return(entitiesInSkillRange.Contains(target) ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var difference = context.RequireTargetEntity().transform.position - context.Entity.transform.position; var direction = difference.normalized; var magnitude = difference.magnitude; var onLineOfSight = Physics2D .RaycastAll(context.Entity.transform.position + direction, direction, magnitude - 2.0f) .ToCellsPrecise() .All(hitCell => hitCell.IsWalkable && !hitCell.IsOccupied); return(onLineOfSight ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var cell = Board.Instance.Cells .OrderBy(c => (c.transform.position - context.Entity.transform.position).sqrMagnitude) .FirstOrDefault(c => c.GameObjectsInside.Corpses().Any()); if (cell == null) { return(BehaviourTreeStatus.Failure); } context.TargetPoint = cell.transform.position; return(BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var skill = context.Entity.GetComponent <SpellbookComponent>().FindOnActionBar(this.skillId); if (context.Entity.GetComponent <BehavioursComponent>().IsUncontrollable) { Debug.LogWarning($"{GetType().Name}: entity is uncontrollable but still in combat queue."); return(BehaviourTreeStatus.Failure); } return(skill.IsDisabled() || skill.IsOnCooldown() || !skill.HasEnoughResources() ? BehaviourTreeStatus.Failure : BehaviourTreeStatus.Success); }
/// <summary> /// Start the execution of the AI /// </summary> /// <param name="dependent">The behaviour the AI is attached to. The AI is disposed if the behaviour is destroyed</param> /// <param name="agent">The agent the AI is meant to control</param> public void Start(MonoBehaviour dependent, X agent) { if (_started) { return; } _started = true; _dependent = dependent; _ctx = new BehaviourTreeContext <X>(agent); Resume(); }
protected override void OnOpen(BehaviourTreeContext context) { this.done = false; this.failure = false; var movement = context.Entity.GetComponent <MovementComponent>(); if (!movement.CanMove() || context.TargetEntity == null) { this.failure = true; return; } movement.Stopped += OnMovementStopped; movement.Move(context.TargetEntity.transform.position); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var closestEnemy = Scene.Active.Entities .Alive(entity => entity.IsEnemyOf(context.Entity)) .OrderBy(entity => (context.Entity.transform.position - entity.transform.position).sqrMagnitude) .FirstOrDefault(); if (closestEnemy == null) { return(BehaviourTreeStatus.Failure); } context.TargetPoint = closestEnemy.transform.position; return(BehaviourTreeStatus.Success); }
protected override object GetTarget(BehaviourTreeContext context) { var targetPoint = context.RequireTargetPoint(); var cell = BoardNavigator.Instance.WithinCircle(targetPoint, 0).First(); var corpse = cell.GameObjectsInside.Corpses().FirstOrDefault(); if (corpse == null) { throw new InvalidSkillTargetException(); } corpse.Consume(); return(targetPoint); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var closest = Scene.Active.Entities .Alive(entity => entity.IsAllyOf(context.Entity)) .Where(entity => entity.GetComponent <HealthComponent>().HealthFraction <= this.fraction) .OrderBy(entity => (context.Entity.transform.position - entity.transform.position).sqrMagnitude) .FirstOrDefault(); if (closest == null) { return(BehaviourTreeStatus.Failure); } context.TargetEntity = closest; return(BehaviourTreeStatus.Success); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var closest = Scene.Active.Entities .Alive(entity => entity.IsEnemyOf(context.Entity) && !entity.GetComponent <BehavioursComponent>().IsInvisible) .OrderBy(entity => (context.Entity.transform.position - entity.transform.position).sqrMagnitude) .FirstOrDefault(); if (closest == null) { return(BehaviourTreeStatus.Failure); } context.TargetEntity = closest.gameObject; return(BehaviourTreeStatus.Success); }
protected override void OnOpen(BehaviourTreeContext context) { var skill = context.Entity.GetComponent <SpellbookComponent>().FindOnActionBar(this.skillId); this.success = null; try { skill.Used += OnSkillUsed; skill.Use(GetTarget(context)); } catch (GameplayException exception) { this.success = false; skill.Used -= OnSkillUsed; } }
public BehaviourTreeStatus Tick(BehaviourTreeContext context, float delta) { if (!context.OpenedNodes.Contains(this)) { Open(context); } var status = OnTick(context, delta); if (status != BehaviourTreeStatus.Running) { Close(context); } LastStatus = status; return(status); }
protected override BehaviourTreeStatus OnTick(BehaviourTreeContext context, float delta) { var numChildrenFailed = 0; foreach (var child in Children) { var childStatus = child.Tick(context, delta); if (childStatus == BehaviourTreeStatus.Success) { return(childStatus); } if (childStatus == BehaviourTreeStatus.Failure) { numChildrenFailed++; } } return(numChildrenFailed == Children.Count ? BehaviourTreeStatus.Failure : BehaviourTreeStatus.Running); }