oxygengine_ai/
components.rs

1use 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 {}