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; } }
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; } }
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); }
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(); }