コード例 #1
0
 //Accion normal
 public UtilityAction(string name, Action action, Factor factor, UtilitySystemEngine utilityCurvesEngine)
 {
     this.HasSubmachine = false;
     this.factor        = factor;
     this.utilityState  = new State(name, action, utilityCurvesEngine);
     this.uCurvesEngine = utilityCurvesEngine;
 }
コード例 #2
0
 //Acción con submáquina
 public UtilityAction(State utilState, Factor factor, UtilitySystemEngine uSystemEngine, BehaviourEngine subMachine)
 {
     this.HasSubmachine = true;
     this.utilityState  = utilState;
     this.factor        = factor;
     this.uCurvesEngine = uSystemEngine;
     this.subMachine    = subMachine;
 }
コード例 #3
0
 //Acción de salida para árboles de comportamiento (sale a nodo hoja) con una acción a ejecutar y esperando a que el valor devuelto sea diferente de Running
 public UtilityAction(string name, Factor factor, Action ac, Func <ReturnValues> valueReturned, UtilitySystemEngine utilityCurvesEngine, BehaviourTreeEngine behaviourTreeEngine)
 {
     this.HasSubmachine = false;
     this.utilityState  = new State(name, ac, utilityCurvesEngine);
     this.factor        = factor;
     this.uCurvesEngine = utilityCurvesEngine;
     this.valueReturned = valueReturned;
     this.bt            = behaviourTreeEngine;
 }
コード例 #4
0
    //Acción de salida para árboles de comportamiento (sale a nodo hoja instantáneamente)
    public UtilityAction(string name, Factor factor, ReturnValues valueReturned, UtilitySystemEngine utilityCurvesEngine, BehaviourTreeEngine behaviourTreeEngine)
    {
        this.HasSubmachine = false;

        Action action = () =>
        {
            new Transition("Exit_Action_Transition", this.utilityState, new PushPerception(this.uCurvesEngine), this.uCurvesEngine.NodeToReturn,
                           valueReturned, behaviourTreeEngine, this.uCurvesEngine)
            .FireTransition();
        };

        this.utilityState  = new State(name, action, utilityCurvesEngine);
        this.factor        = factor;
        this.uCurvesEngine = utilityCurvesEngine;
    }
コード例 #5
0
ファイル: MakePizza.cs プロジェクト: Rodron/biomochis
    // Start is called before the first frame update
    private void Start()
    {
        behaviourTree    = new BehaviourTreeEngine(BehaviourEngine.IsNotASubmachine);
        utilityCurves    = new UtilitySystemEngine(BehaviourEngine.IsASubmachine);
        stateMachine     = new StateMachineEngine(BehaviourEngine.IsASubmachine);
        recipe           = GameObject.FindGameObjectWithTag("Recipe");
        recipeAnimator   = recipe.GetComponent <Animator>();
        handler          = transform.GetChild(5).gameObject;
        meshAgent        = GetComponent <NavMeshAgent>();
        pizzasCreated    = 0;
        pepperoniCreated = 0;

        CreateStateMachine();
        CreateUtilityCurves();
        CreateBehaviourTree();
    }
コード例 #6
0
    /// <summary>
    /// Creates a new <see cref="Transition"/> that exits from any Behaviour Engine to a Utility Engine. ONLY exits to Utility Machines
    /// </summary>
    /// <param name="transitionName">The name of the transition</param>
    /// <param name="stateFrom">The <see cref="State"/> where the transition comes from (only submachine's state)</param>
    /// <param name="perception">The <see cref="Perception"/> that will trigger the transition</param>
    /// <param name="superMachine">The <see cref="UtilitySystemEngine"/> where the transition goes to (only entry super machine state)</param>
    /// <returns></returns>
    public Transition CreateExitTransition(string transitionName, State stateFrom, Perception perception, UtilitySystemEngine superMachine)
    {
        if (!transitions.ContainsKey(transitionName))
        {
            State      stateTo        = superMachine.GetEntryState();
            Transition exitTransition = new Transition(transitionName, stateFrom, perception, stateTo, superMachine, this);

            // Transition managed by the sub-state machine
            transitions.Add(transitionName, exitTransition);

            return(exitTransition);
        }
        else
        {
            throw new DuplicateWaitObjectException(transitionName, "The transition already exists in the behaviour engine");
        }
    }
コード例 #7
0
ファイル: Testing.cs プロジェクト: MRxRafi/TFG_dev
    static public void Main(String[] args)
    {
        subUtilMachine = new UtilitySystemEngine(true, 1.15f);
        utilEngine     = new UtilitySystemEngine(false);

        float[] f = { 1.0f, 1.0f };

        p  = new Player(2.0f, f);
        p1 = new Player(5.0f, f);
        p2 = new Player(9.0f, new float[] { 3.0f, 0.0f });
        p3 = new Player(9.0f, new float[] { 4.0f, 0.0f });

        CreateSubmachine();
        CreateMainMachine();


        // Update tick emulation (e.g like Unity)
        // ELAPSED crea hilos
        System.Timers.Timer tmr = new System.Timers.Timer();
        tmr.Interval  = 100;
        tmr.AutoReset = false;
        tmr.Elapsed  += (s, e) => {
            subUtilMachine.Update();
            utilEngine.Update();
            tmr.Enabled = true;
        };
        tmr.Enabled = true;


        // To prevent the app closing
        // Si se usa EspacioPerception hay que pulsar dos veces espacio para que haga caso
        while (true)
        {
            ConsoleKeyInfo k = System.Console.ReadKey();
            if (k.Key == ConsoleKey.UpArrow)
            {
                p.life += 1.0f;
                Console.WriteLine("Vida de P: " + p.life);
            }
            else if (k.Key == ConsoleKey.DownArrow)
            {
                p.life -= 1.0f;
                Console.WriteLine("Vida de P: " + p.life);
            }
            else if (k.Key == ConsoleKey.LeftArrow)
            {
                p1.life -= 1.0f;
                Console.WriteLine("Vida de P1: " + p1.life);
            }
            else if (k.Key == ConsoleKey.RightArrow)
            {
                p1.life += 1.0f;
                Console.WriteLine("Vida de P1: " + p1.life);
            }
            else if (k.Key == ConsoleKey.O)
            {
                p2.position[0]++;
                Console.WriteLine("Posicion P2: " + p2.position[0]);
            }
            else if (k.Key == ConsoleKey.L)
            {
                p2.position[0]--;
                Console.WriteLine("Posicion P2: " + p2.position[0]);
            }
        }
        ;
    }