Doprez.Stride.AI
0.1.1
dotnet add package Doprez.Stride.AI --version 0.1.1
NuGet\Install-Package Doprez.Stride.AI -Version 0.1.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Doprez.Stride.AI" Version="0.1.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Doprez.Stride.AI --version 0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Doprez.Stride.AI, 0.1.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Doprez.Stride.AI as a Cake Addin #addin nuget:?package=Doprez.Stride.AI&version=0.1.1 // Install Doprez.Stride.AI as a Cake Tool #tool nuget:?package=Doprez.Stride.AI&version=0.1.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Doprez.Stride
AI libraries to be used within Stride3d games
Build Status
Examples
FSM Example
We can start by inheriting from the FSM and implementing the base methods
using Doprez.Stride.AI.FSMs;
public class BasicEnemyFSM : FSM
{
public override void UpdateFSM()
{
//You can add triggers here to cancel/change the current running state
}
}
Create the State and needed methods
public class IdleState : FSMState
{
public IdleState(FSM fsm)
{
// set the FSM to access the methods within the running state
FiniteStateMachine = fsm;
// add this state to the FSM for other states to see this state
FiniteStateMachine.States.Add(0, this);
}
public override void EnterState()
{
// activate needed events or variables when this state is started
}
public override void ExitState()
{
// deactivate needed events or variables when this state is finished
}
public override void UpdateState()
{
// this runs in the Update method of Stride per frame
}
}
A more complete example
you can add the Doprez.Stride nuget package if some of the references are missing
the FSM to initialize the state and allow per frame updates
using System;
using Doprez.Stride.AI.FSMs;
using Stride.Core;
using Stride.Engine;
using StridePlatformer.States;
using Navigation;
public class BasicEnemyFSM : FSM
{
[Display("Player Entity")]
[DataMember(0)]
public Entity Player{get;set;}
[Display("Player Seen Trigger")]
[DataMember(2)]
public PhysicsComponent PlayerSeenTrigger;
[Display("Animation Component")]
[DataMember(20)]
public AnimationComponent AnimationComponent { get; set; }
//States
//private MoveToState _moveTo;
private IdleState _idle;
public override void Start()
{
InitializeStates();
SetCurrentState(_idle);
}
private void InitializeStates()
{
_idle = new IdleState(this, AnimationComponent);// ", _moveTo" add this if you added a moveTo state
_idle.PlayerSeenTrigger = PlayerSeenTrigger;
}
public override void UpdateFSM()
{
// add some logic here if needed but it can just be blank
}
}
An example Idle state with comments on how to change to another state
using System.Collections.Specialized;
using System.Threading.Tasks;
using Doprez.Stride.AI.FSMs;
using Stride.Core.Collections;
using Stride.Engine;
using Stride.Physics;
public class IdleState : FSMState
{
public PhysicsComponent PlayerSeenTrigger;
private readonly AnimationComponent _animationComponent;
//add a state for you to change to like the example below
//private readonly MoveToState _moveTo;
public IdleState(FSM fsm, AnimationComponent animationComponent)// , MoveToState moveTo
{
FiniteStateMachine = fsm;
_animationComponent = animationComponent;
//_moveTo = moveTo;
FiniteStateMachine.States.Add((int)EnemyStates.Idle, this);
}
public override void EnterState()
{
//Only activate this trigger while the state is running
PlayerSeenTrigger.Enabled = true;
PlayerSeenTrigger.Collisions.CollectionChanged += CollisionsChanged;
//run the idle anim if you have one
//_animationComponent.Play("Idle");
}
public override void ExitState()
{
// stop using the trigger when the state isnt running
PlayerSeenTrigger.Enabled = false;
PlayerSeenTrigger.Collisions.CollectionChanged -= CollisionsChanged;
}
public override void UpdateState()
{
}
private void CollisionsChanged(object sender, TrackingCollectionChangedEventArgs args)
{
// Cast the argument 'Item' to a collision object
var collision = (Collision)args.Item;
// We need to make sure which collision object is not the Trigger collider
// We perform a little check to find the ballCollider
var playerCollider = PlayerSeenTrigger == collision.ColliderA ? collision.ColliderB : collision.ColliderA;
if (args.Action == NotifyCollectionChangedAction.Add)
{
// When a collision has been added to the collision collection, we know an object has 'entered' our trigger
if (playerCollider.Entity.Name == "PlayerCharacter")
{
//get the entity that entered the trigger
var entitycollided = playerCollider.Entity;
//you can change the state by direct reference or the dictionary Id
//_moveTo.Target = entitycollided;
// change to a direct reference
//FiniteStateMachine.SetCurrentState(_moveTo);
// change based on a dictionary reference I would recommend setting up and Enum for readability
//FiniteStateMachine.SetCurrentState(1);
}
}
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net6.0
- Doprez.Stride (>= 1.2.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.