Exemple #1
0
        private void timer_Tick(object sender, EventArgs e)
        {
            if (Radar != null)
            {
                //Distanz angeben, Achtung Distanz  ist in millimetern ( vom Sensor
                this.label1.Text = "Distanz: " + Radar.Distance.ToString("0.00") + " m";
                //Radard Distanz, konvertiert in centi
                int value = (int)(Radar.Distance * 100);
                //obergrenze Radar
                if (value > 255)
                {
                    value = 255;
                }
                //untergrenze
                if (value < 0)
                {
                    value = 0;
                }

                //Falls Radar Distanz unter 20cm -> Block und event triggern, sprich alle abonnierten invoken
                if (value < 20)
                {
                    TooClose?.Invoke(null, null);
                }
                //progressbar aktualisieren
                this.progressBar1.Value = value;
            }
        }
Exemple #2
0
        private void timer_Tick(object sender, EventArgs e)
        {
            if (Radar != null)
            {
                this.label1.Text = "Distanz: " + Radar.Distance.ToString("0.00") + " m";
                int value = (int)(Radar.Distance * 100);
                if (value > 255)
                {
                    value = 255;
                }
                if (value < 0)
                {
                    value = 0;
                }

                if (value < 20)
                {
                    TooClose?.Invoke(null, null);
                }

                this.progressBar1.Value = value;
            }
        }
Exemple #3
0
    public float radiusRun   = 15f; //radio para huir

    void Start()
    {
        //INICIALIZAMOS LA DATA DEL EXTERIOR
        kinGlameow      = glameow.kineticsAgent;
        steeringGlameow = glameow.steeringAgent;
        kineticsTarget  = target.kineticsAgent;
        kineticsTrainer = trainer.kineticsAgent;
        kineticsRival   = rival.kineticsAgent;

        Vector3 center = (kinGlameow.transform.position + kineticsTarget.transform.position) / 2;


        //COMENZAMOS A CONSTRUIR LA MAQUINA DE ESTADOS

        //1. ACCIONES:

        //este es seek pero en verdad como meowth le hace seek tambien pareciera que huye
        FollowTarget seekTarget = new FollowTarget(steeringGlameow, kinGlameow, kineticsTarget, maxSeekAccel);
        //el target es null porque todavia no sabemos cual trainer se  acercara
        ArriveToTarget arriveTrainer = new ArriveToTarget(steeringGlameow, kinGlameow, null, MaxAccelerationArrive, glameow.maxspeed, targetRadiusArrive, slowRadiusArrive);

        Kinetics[] targets = new Kinetics[2];
        targets[0] = kineticsTrainer;
        targets[1] = kineticsRival;

        SetArriveTarget setTrainer = new SetArriveTarget(targets, arriveTrainer);
        //seek closes
        StopMoving  stop               = new StopMoving(kinGlameow, steeringGlameow);
        ShowIcon    showHeart          = new ShowIcon(this.gameObject, "Heart");
        DisableIcon disableHeart       = new DisableIcon(this.gameObject, "Heart");
        ShowIcon    showSweat          = new ShowIcon(this.gameObject, "Sweat");
        DisableIcon disableSweat       = new DisableIcon(this.gameObject, "Sweat");
        ShowIcon    showExclamation    = new ShowIcon(this.gameObject, "Exclamation");
        DisableIcon disableExclamation = new DisableIcon(this.gameObject, "Exclamation");


        //2. ESTADOS:

        List <Action> entryActions; //aqui iremos guardanndo todas las acciondes de entrada
        List <Action> exitActions;  //aqui iremos guardanndo todas las acciones de salida
        List <Action> actions;      //aqui guardaremos todas las acciones intermedias

        //2.a estado para huir de anamorado (meowth)

        entryActions = new List <Action>()
        {
            showSweat
        };                                            //al entrar al estado ponemos un corazon
        actions = new List <Action>()
        {
            seekTarget
        };                                       //durante el estado perseguimos al enamorado
        exitActions = new List <Action>()
        {
            disableSweat
        };                                             //al salir quitamos el corazon

        State stalked = new State(actions, entryActions, exitActions);


        //2.b estado para alertarse de entrenador cercano

        entryActions = new List <Action>()
        {
            showExclamation, stop
        };                                                       //al entrar al estado debemos mostrar un signo de exclamacion
        actions     = new List <Action>();
        exitActions = new List <Action>()
        {
            disableExclamation
        };                                                  //al salir quitamos el signo


        State alert = new State(actions, entryActions, exitActions);


        //2.c estado para perseguir enamorado al entrenador

        entryActions = new List <Action> {
            setTrainer, showHeart
        };
        actions = new List <Action>()
        {
            arriveTrainer
        };
        exitActions = new List <Action> {
            disableHeart
        };


        State stalkTrainer = new State(actions, entryActions, exitActions);



        //3. CONDICIONES:

        TooCloseToPoint closeCenterTrainer = new TooCloseToPoint(center, kineticsTrainer, radiusAlert);
        TooClose        closeTrainer       = new TooClose(kinGlameow, kineticsTrainer, radiusAlert);
        TooClose        veryCloseTrainer   = new TooClose(kinGlameow, kineticsTrainer, radiusRun);
        TooCloseToPoint closeCenterRival   = new TooCloseToPoint(center, kineticsRival, radiusAlert);
        TooClose        closeRival         = new TooClose(kinGlameow, kineticsRival, radiusAlert);
        TooClose        veryCloseRival     = new TooClose(kinGlameow, kineticsRival, radiusRun);


        //Estas son las que de verdad necesitamos
        OrCondition  anyTargetCloseCenter = new OrCondition(closeCenterRival, closeCenterTrainer);
        OrCondition  anyTargetClose       = new OrCondition(closeTrainer, closeRival);
        OrCondition  anyTargetVeryClose   = new OrCondition(veryCloseRival, veryCloseTrainer);
        NotCondition noOneClose           = new NotCondition(anyTargetClose);


        List <Action> noActions = new List <Action>();
        //4. TRANSICIONES:
        Transition anyHumanClose     = new Transition(anyTargetCloseCenter, noActions, alert);
        Transition noHumanClose      = new Transition(noOneClose, noActions, stalkTrainer);
        Transition anyHumanVeryClose = new Transition(anyTargetVeryClose, noActions, stalkTrainer);



        //4.1 AGREGAMOS TRANSICIONES A ESTADOS
        List <Transition> transitions = new List <Transition>()
        {
            anyHumanClose
        };

        stalked.transitions = transitions;

        transitions = new List <Transition>()
        {
            noHumanClose, anyHumanVeryClose
        };
        alert.transitions = transitions;

        transitions = new List <Transition>();
        stalkTrainer.transitions = transitions;

        //5 MAQUINA DE ESTADOS
        State[] states = new State[] { stalked, alert, stalkTrainer };
        glameowMachine = new StateMachine(states, stalked);
    }
    public float radiusChange = 5f;//radio para asustarse y cambiar gas venenoso


    void Start()
    {
        //INICIALIZAMOS LA DATA DEL EXTERIOR
        kinRoselia      = roselia.kineticsAgent;
        steeringRoselia = roselia.steeringAgent;
        kineticsTrainer = trainer.kineticsAgent;
        kineticsRival   = rival.kineticsAgent;

        Kinetics[] targets = new Kinetics[2];
        targets[0] = kineticsTrainer;
        targets[1] = kineticsRival;


        //COMENZAMOS A CONSTRUIR LA MAQUINA DE ESTADOS

        //1. ACCIONES:

        ShowIcon        showSweet         = new ShowIcon(this.gameObject, "SweetGas");
        DisableIcon     disableSweet      = new DisableIcon(this.gameObject, "SweetGas");
        ShowIcon        showPoison        = new ShowIcon(this.gameObject, "PoisonGas");
        DisableIcon     disablePoison     = new DisableIcon(this.gameObject, "PoisonGas");
        ChangeSmellSent changeSmellPoison = new ChangeSmellSent(sendSmell, "Poison");
        ChangeSmellSent changeSmellSweet  = new ChangeSmellSent(sendSmell, "Sweet");
        SetTimer        setPoisonTimer;


        //2. ESTADOS:

        List <Action> entryActions; //aqui iremos guardanndo todas las acciondes de entrada
        List <Action> exitActions;  //aqui iremos guardanndo todas las acciones de salida
        List <Action> actions;      //aqui guardaremos todas las acciones intermedias

        //2.a estado para seguir camino

        entryActions = new List <Action>()
        {
            showSweet, changeSmellSweet
        };
        actions     = new List <Action>();
        exitActions = new List <Action>()
        {
            disableSweet
        };

        State sweetGasState = new State(actions, entryActions, exitActions);

        entryActions = new List <Action>()
        {
            showPoison, changeSmellPoison
        };
        actions     = new List <Action>();
        exitActions = new List <Action>()
        {
            disablePoison
        };

        State poisonGasState = new State(actions, entryActions, exitActions);

        //3. CONDICIONES:

        // roselia solo usara veneno durante 30 segs
        TimeOut poisonTimer = new TimeOut(30f);

        setPoisonTimer = new SetTimer(poisonTimer);

        TooClose closeTrainer = new TooClose(kinRoselia, kineticsTrainer, radiusChange);
        TooClose closeRival   = new TooClose(kinRoselia, kineticsRival, radiusChange);

        OrCondition  anyTargetClose = new OrCondition(closeTrainer, closeRival);
        NotCondition noOneClose     = new NotCondition(anyTargetClose);


        //4. TRANSICIONES:

        List <Action> noActions = new List <Action>();
        List <Action> transitionActions;

        transitionActions = new List <Action>()
        {
            setPoisonTimer
        };
        Transition anyHumanClose = new Transition(anyTargetClose, transitionActions, poisonGasState);

        transitionActions = new List <Action>();
        Transition poisonTimeOut = new Transition(poisonTimer, transitionActions, sweetGasState);


        //4.1 AGREGAMOS TRANSICIONES A ESTADOS
        List <Transition> transitions = new List <Transition>()
        {
            anyHumanClose
        };

        sweetGasState.transitions = transitions;

        transitions = new List <Transition>()
        {
            poisonTimeOut
        };
        poisonGasState.transitions = transitions;


        //5 MAQUINA DE ESTADOS
        State[] states = new State[] { sweetGasState, poisonGasState };
        roseliaMachine = new StateMachine(states, sweetGasState);
    }
    public float radiusRun   = 15f; //radio para huir

    void Start()
    {
        //INICIALIZAMOS LA DATA DEL EXTERIOR
        kinMeowth       = meowth.kineticsAgent;
        steeringMeowth  = meowth.steeringAgent;
        kineticsTarget  = target.kineticsAgent;
        kineticsTrainer = trainer.kineticsAgent;
        kineticsRival   = rival.kineticsAgent;

        // Centro de masa de glameow y meowth sera util pra cierta condicion
        Vector3 center = (kinMeowth.transform.position + kineticsTarget.transform.position) / 2;

        //COMENZAMOS A CONSTRUIR LA MAQUINA DE ESTADOS

        //1. ACCIONES:

        FollowTarget seekTarget  = new FollowTarget(steeringMeowth, kinMeowth, kineticsTarget, maxSeekAccel);
        FollowTarget seekWorried = new FollowTarget(steeringMeowth, kinMeowth, kineticsTarget, 100f);

        Kinetics[] targets = new Kinetics[2];
        targets[0] = kineticsTrainer;
        targets[1] = kineticsRival;
        RunFromTargets runFromTargets     = new RunFromTargets(steeringMeowth, kinMeowth, targets, maxSeekAccel * 5);
        StopMoving     stop               = new StopMoving(kinMeowth, steeringMeowth);
        UpdateMaxSpeed moreMaxSpeed       = new UpdateMaxSpeed(meowth, meowth.maxspeed * 5); // esto ayudara a aumentar la maxspeed
        UpdateMaxSpeed speedBackToNormal  = new UpdateMaxSpeed(meowth, meowth.maxspeed);     // esto guarda la maxspeed original para volverla a poner asi
        ShowIcon       showHeart          = new ShowIcon(this.gameObject, "Heart");
        DisableIcon    disableHeart       = new DisableIcon(this.gameObject, "Heart");
        ShowIcon       showSweat          = new ShowIcon(this.gameObject, "Sweat");
        DisableIcon    disableSweat       = new DisableIcon(this.gameObject, "Sweat");
        ShowIcon       showExclamation    = new ShowIcon(this.gameObject, "Exclamation");
        DisableIcon    disableExclamation = new DisableIcon(this.gameObject, "Exclamation");



        //2. ESTADOS:

        List <Action> entryActions; //aqui iremos guardanndo todas las acciondes de entrada
        List <Action> exitActions;  //aqui iremos guardanndo todas las acciones de salida
        List <Action> actions;      //aqui guardaremos todas las acciones intermedias

        //2.a estado para perseguir enamorado (glameow)

        entryActions = new List <Action>()
        {
            showHeart
        };                                            //al entrar al estado ponemos un corazon
        actions = new List <Action>()
        {
            seekTarget
        };                                       //durante el estado perseguimos al enamorado
        exitActions = new List <Action>()
        {
            disableHeart
        };                                             //al salir quitamos el corazon

        State stalkTarget = new State(actions, entryActions, exitActions);


        //2.b estado para alertarse de entrenador cercano

        entryActions = new List <Action>()
        {
            showExclamation, stop
        };                                                       //al entrar al estado debemos mostrar un signo de exclamacion
        actions     = new List <Action>();
        exitActions = new List <Action>()
        {
            disableExclamation
        };                                                  //al salir quitamos el signo


        State alert = new State(actions, entryActions, exitActions);

        //2,c estado para perseguir sin corazon
        entryActions = new List <Action>();//al entrar al estado ponemos un corazon
        actions      = new List <Action>()
        {
            seekTarget
        };                                 //durante el estado perseguimos al enamorado
        exitActions = new List <Action>(); //al salir quitamos el corazon

        State stalk = new State(actions, entryActions, exitActions);


        //2.d estado para huir del entrenador

        entryActions = new List <Action>()
        {
            moreMaxSpeed
        };
        actions = new List <Action>()
        {
            runFromTargets
        };
        exitActions = new List <Action>()
        {
            speedBackToNormal
        };


        State runAway = new State(actions, entryActions, exitActions);

        //2.e estado para preocuparse por alguien y seguirlo preocupado


        entryActions = new List <Action>()
        {
            showSweat, disableHeart, disableExclamation
        };
        actions = new List <Action>()
        {
            seekWorried
        };
        exitActions = new List <Action>()
        {
            disableSweat
        };

        State worry = new State(actions, entryActions, exitActions);


        //3. CONDICIONES:

        TooCloseToPoint closeCenterTrainer = new TooCloseToPoint(center, kineticsTrainer, radiusAlert);
        TooClose        closeTrainer       = new TooClose(kinMeowth, kineticsTrainer, radiusAlert);
        TooClose        veryCloseTrainer   = new TooClose(kinMeowth, kineticsTrainer, radiusRun);
        TooCloseToPoint closeCenterRival   = new TooCloseToPoint(center, kineticsRival, radiusAlert);
        TooClose        closeRival         = new TooClose(kinMeowth, kineticsRival, radiusAlert);
        TooClose        veryCloseRival     = new TooClose(kinMeowth, kineticsRival, radiusRun);


        //Estas son las que de verdad necesitamos
        OrCondition  anyTargetCloseCenter = new OrCondition(closeCenterRival, closeCenterTrainer);
        OrCondition  anyTargetClose       = new OrCondition(closeTrainer, closeRival);
        OrCondition  anyTargetVeryClose   = new OrCondition(veryCloseRival, veryCloseTrainer);
        NotCondition noOneClose           = new NotCondition(anyTargetClose);
        NotCondition noOneVeryClose       = new NotCondition(anyTargetVeryClose);

        WasCaught targetCaught = new WasCaught(kineticsTarget);


        List <Action> noActions = new List <Action>();
        //4. TRANSICIONES:
        Transition anyHumanCloseCenter = new Transition(anyTargetCloseCenter, noActions, alert);
        Transition anyHumanClose       = new Transition(anyTargetClose, noActions, alert);
        Transition noHumanClose        = new Transition(noOneClose, noActions, stalk);
        Transition anyHumanVeryClose   = new Transition(anyTargetVeryClose, noActions, runAway);
        Transition noHumanVeryClose    = new Transition(noOneVeryClose, noActions, alert);
        Transition targetWasCaught     = new Transition(targetCaught, noActions, worry);

        //4.1 AGREGAMOS TRANSICIONES A ESTADOS
        List <Transition> transitions = new List <Transition>()
        {
            anyHumanCloseCenter, targetWasCaught
        };

        stalkTarget.transitions = transitions;

        transitions = new List <Transition>()
        {
            noHumanClose, anyHumanVeryClose, targetWasCaught
        };
        alert.transitions = transitions;

        transitions = new List <Transition>()
        {
            anyHumanClose, targetWasCaught
        };
        stalk.transitions = transitions;

        transitions = new List <Transition>()
        {
            noHumanVeryClose, targetWasCaught
        };
        runAway.transitions = transitions;

        worry.transitions = new List <Transition>();//es un sumidero

        //5 MAQUINA DE ESTADOS
        State[] states = new State[] { stalkTarget, alert, stalk, runAway, worry };
        meowthMachine = new StateMachine(states, stalkTarget);
    }
Exemple #6
0
    void Start()
    {
        //INICIALIZAMOS LA DATA DEL EXTERIOR
        kinDugtrio      = dugtrio.kineticsAgent;
        steeringDugtrio = dugtrio.steeringAgent;
        kineticsTrainer = trainer.kineticsAgent;
        kineticsRival   = rival.kineticsAgent;
        graph           = graphComponent.graph;
        aStar           = new PathFindAStar(graph, null, null, null, walkable);
        seek            = new Seek(kinDugtrio, kinDugtrio, dugtrio.maxspeed);

        Kinetics[] targets = new Kinetics[2];
        targets[0] = kineticsTrainer;
        targets[1] = kineticsRival;

        //obstaculos
        GameObject[]    obstacles     = GameObject.FindGameObjectsWithTag("Obstacle");
        obstacle_data[] obstaclesData = new obstacle_data[obstacles.Length];

        for (int k = 0; k < obstacles.Length; k++)
        {
            obstaclesData[k] = obstacles[k].GetComponent <obstacle_data>();
        }

        //COMENZAMOS A CONSTRUIR LA MAQUINA DE ESTADOS

        //1. ACCIONES:

        UpdateAStarRandom         updateAStar  = new UpdateAStarRandom(aStar, graph, kinDugtrio, null, walkable);
        ShowIcon                  showHole     = new ShowIcon(this.gameObject, "Digging");
        DisableIcon               disableHole  = new DisableIcon(this.gameObject, "Digging");
        FollowPathOfPoints        followPath   = new FollowPathOfPoints(steeringDugtrio, seek, null, true);
        UpdateFollowPathWithAstar updateFollow = new UpdateFollowPathWithAstar(followPath, aStar, obstaclesData);
        MoveOnZ underground    = new MoveOnZ(transform, undergroundCoord);
        MoveOnZ getOutOfGround = new MoveOnZ(transform, 0f);

        //2. ESTADOS:

        List <Action> entryActions; //aqui iremos guardanndo todas las acciondes de entrada
        List <Action> exitActions;  //aqui iremos guardanndo todas las acciones de salida
        List <Action> actions;      //aqui guardaremos todas las acciones intermedias

        //2.a estado para seguir camino

        entryActions = new List <Action>()
        {
        };
        actions = new List <Action>()
        {
            followPath
        };                                       //durante el estado seguimos el camino
        exitActions = new List <Action>()
        {
        };

        State followPathState = new State(actions, entryActions, exitActions);

        //3. CONDICIONES:

        TooClose          closeTrainer   = new TooClose(kinDugtrio, kineticsTrainer, radiusHide);
        TooClose          closeRival     = new TooClose(kinDugtrio, kineticsRival, radiusHide);
        ArrivedToPosition arrived        = new ArrivedToPosition(new Vector3(), transform, 10f);
        AmIUnderground    amIunderground = new AmIUnderground(transform);

        updateAStar.arrived = arrived;

        OrCondition  anyTargetClose        = new OrCondition(closeTrainer, closeRival);
        NotCondition noOneClose            = new NotCondition(anyTargetClose);
        NotCondition notUnderground        = new NotCondition(amIunderground);
        AndCondition closeAndNotUndeground = new AndCondition(anyTargetClose, notUnderground);
        AndCondition notCloseAndUndeground = new AndCondition(noOneClose, amIunderground);


        List <Action> noActions = new List <Action>();
        List <Action> transitionActions;

        //4. TRANSICIONES:
        transitionActions = new List <Action>()
        {
            showHole, underground
        };
        Transition anyHumanClose = new Transition(closeAndNotUndeground, transitionActions, followPathState);

        transitionActions = new List <Action>()
        {
            disableHole, getOutOfGround
        };
        Transition noHumanClose = new Transition(notCloseAndUndeground, transitionActions, followPathState);

        transitionActions = new List <Action>()
        {
            updateAStar, updateFollow
        };
        Transition pathEnd = new Transition(arrived, transitionActions, followPathState);



        //4.1 AGREGAMOS TRANSICIONES A ESTADOS
        List <Transition> transitions = new List <Transition>()
        {
            anyHumanClose, noHumanClose, pathEnd
        };

        followPathState.transitions = transitions;


        //5 MAQUINA DE ESTADOS
        State[] states = new State[] { followPathState };
        dugtrioMachine = new StateMachine(states, followPathState);
        updateAStar.DoAction();//esto es para inicializar el primer camino
        updateFollow.DoAction();
    }