oxygengine_ai/
components.rs1use crate::resources::AiBehaviorMemory;
2use emergent::prelude::*;
3use oxygengine_core::{
4 ecs::Component,
5 prefab::{Prefab, PrefabComponent},
6 Scalar,
7};
8use serde::{Deserialize, Serialize};
9
10#[derive(Default, Serialize, Deserialize)]
11pub struct AiInstance<C>
12where
13 C: Component,
14{
15 pub template: String,
16 #[serde(default)]
17 pub decide_delay: Scalar,
18 #[serde(skip)]
19 pub(crate) decide_phase: Scalar,
20 #[serde(skip)]
21 pub(crate) decision_maker: Option<Box<dyn DecisionMakingTask<AiBehaviorMemory<C>>>>,
22}
23
24impl<C> AiInstance<C>
25where
26 C: Component,
27{
28 pub fn new(template: impl ToString, decide_delay: Scalar) -> Self {
29 Self {
30 template: template.to_string(),
31 decide_delay,
32 decide_phase: 0.0,
33 decision_maker: None,
34 }
35 }
36}
37
38impl<C> Prefab for AiInstance<C> where C: Component + Default {}
39
40impl<C> PrefabComponent for AiInstance<C> where C: Component + Default {}