working on AI

This commit is contained in:
2025-10-14 16:05:36 +02:00
parent d1583c9f58
commit 00b33af98b
6 changed files with 23 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI { namespace RebootKit.Engine.AI {
public class BehaviourNode { public class BehaviourNode {
@@ -23,8 +24,8 @@ namespace RebootKit.Engine.AI {
Children.Add(child); Children.Add(child);
} }
public virtual Status Process(float dt) { public virtual Status Process(Actor target, float dt) {
return Children[m_CurrentChild].Process(dt); return Children[m_CurrentChild].Process(target, dt);
} }
public virtual void Reset() { public virtual void Reset() {

View File

@@ -1,11 +1,13 @@
namespace RebootKit.Engine.AI { using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI {
public class BehaviourTree : BehaviourNode { public class BehaviourTree : BehaviourNode {
public BehaviourTree(string name) : base(name) { public BehaviourTree(string name) : base(name) {
} }
public override Status Process(float dt) { public override Status Process(Actor target, float dt) {
while (m_CurrentChild < Children.Count) { while (m_CurrentChild < Children.Count) {
Status status = Children[m_CurrentChild].Process(dt); Status status = Children[m_CurrentChild].Process(target, dt);
if (status != Status.Success) { if (status != Status.Success) {
return status; return status;
} }

View File

@@ -1,8 +1,9 @@
using System; using System;
using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI { namespace RebootKit.Engine.AI {
public interface IStrategy { public interface IStrategy {
BehaviourNode.Status Process(float dt); BehaviourNode.Status Process(Actor target, float dt);
void Reset() { void Reset() {
} }
} }
@@ -14,7 +15,7 @@ namespace RebootKit.Engine.AI {
m_Predicate = predicate; m_Predicate = predicate;
} }
public BehaviourNode.Status Process(float dt) { public BehaviourNode.Status Process(Actor target, float dt) {
if (m_Predicate()) { if (m_Predicate()) {
return BehaviourNode.Status.Success; return BehaviourNode.Status.Success;
} }
@@ -30,7 +31,7 @@ namespace RebootKit.Engine.AI {
m_Action = action; m_Action = action;
} }
public BehaviourNode.Status Process(float dt) { public BehaviourNode.Status Process(Actor target, float dt) {
m_Action(); m_Action();
return BehaviourNode.Status.Success; return BehaviourNode.Status.Success;
} }

View File

@@ -1,4 +1,6 @@
namespace RebootKit.Engine.AI { using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI {
public class Leaf : BehaviourNode { public class Leaf : BehaviourNode {
readonly IStrategy m_Strategy; readonly IStrategy m_Strategy;
@@ -6,8 +8,8 @@
m_Strategy = strategy; m_Strategy = strategy;
} }
public override Status Process(float dt) { public override Status Process(Actor target, float dt) {
return m_Strategy.Process(dt); return m_Strategy.Process(target, dt);
} }
public override void Reset() { public override void Reset() {

View File

@@ -1,4 +1,5 @@
using System; using System;
using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI { namespace RebootKit.Engine.AI {
public class Selector : BehaviourNode { public class Selector : BehaviourNode {
@@ -8,13 +9,13 @@ namespace RebootKit.Engine.AI {
m_Condition = condition; m_Condition = condition;
} }
public override Status Process(float dt) { public override Status Process(Actor target, float dt) {
if (m_Condition != null && !m_Condition()) { if (m_Condition != null && !m_Condition()) {
return Status.Failure; return Status.Failure;
} }
if (m_CurrentChild < Children.Count) { if (m_CurrentChild < Children.Count) {
Status status = Children[m_CurrentChild].Process(dt); Status status = Children[m_CurrentChild].Process(target, dt);
switch (status) { switch (status) {
case Status.Success: case Status.Success:

View File

@@ -1,4 +1,5 @@
using System; using System;
using RebootKit.Engine.Simulation;
namespace RebootKit.Engine.AI { namespace RebootKit.Engine.AI {
public class Sequence : BehaviourNode { public class Sequence : BehaviourNode {
@@ -8,13 +9,13 @@ namespace RebootKit.Engine.AI {
m_Condition = condition; m_Condition = condition;
} }
public override Status Process(float dt) { public override Status Process(Actor target, float dt) {
if (m_Condition != null && !m_Condition()) { if (m_Condition != null && !m_Condition()) {
return Status.Failure; return Status.Failure;
} }
if (m_CurrentChild < Children.Count) { if (m_CurrentChild < Children.Count) {
Status status = Children[m_CurrentChild].Process(dt); Status status = Children[m_CurrentChild].Process(target, dt);
switch (status) { switch (status) {
case Status.Success: case Status.Success: