use crate::types::{AssignOp, AtomicFormula, FExp, FHead, FunctionTerm, Term};
#[derive(Debug, Clone, PartialEq)]
pub enum PEffect {
AtomicFormula(AtomicFormula<Term>),
NotAtomicFormula(AtomicFormula<Term>),
AssignNumericFluent(AssignOp, FHead, FExp),
AssignObjectFluent(FunctionTerm, Option<Term>),
}
impl PEffect {
pub const fn new(atomic_formula: AtomicFormula<Term>) -> Self {
Self::AtomicFormula(atomic_formula)
}
pub const fn new_not(atomic_formula: AtomicFormula<Term>) -> Self {
Self::NotAtomicFormula(atomic_formula)
}
pub const fn new_numeric_fluent(op: AssignOp, head: FHead, exp: FExp) -> Self {
Self::AssignNumericFluent(op, head, exp)
}
pub const fn new_object_fluent(f_term: FunctionTerm, term: Option<Term>) -> Self {
Self::AssignObjectFluent(f_term, term)
}
}