Simulazione di un ciclo Do while in blender game engine tramite logic bricks

Argomento

Lo scopo di questo articolo è capire come, senza una riga di codice, possiamo simulare un ciclo do while con blender Game Engine.
Un ciclo do while in breve è un ciclo (loop) che continua fino a quando una condizione stabilita dal programmatore non viene soddisfatta.
In questo articolo,  non torneremo sui concetti di Properties, Sensors, Controllers ed Actuars in quanto già trattati nella parte manualistica ed ampliati in diversi articoli.

Strumenti utilizzati

  • Blender in modalità Game Engine

Applicazione pratica

In particolare, questo tipo di logica, serve per evitare di interagire con animazioni quali aperture delle porte oppure elevatori che si attivano alla pressione di un tasto.

Rapidamente, modelliamo due oggetti distinti che saranno la nostra parete e la nostra porta.
Come notiamo dall’immagine, alla porta, abbiamo impostato un pivot differente così da farla ruotare sull’asse z rispetto alla faccia selezionata.

dowhile_1

Utilizziamo lo screen layout “Game Logic” 

 dowhile_4

All’oggetto porta, aggiungiamo una proprietà rot_value di tipo Integer, rot_value verrà sfruttata come condizione per terminare loop di rotazione.
Fintanto che rot_value non raggiunge le 100 unità, la porta continuerà a ruotare.
Aggiungiamo altre due Properties all’oggetto porta che serviranno ad indicarci lo stato della porta stessa:
is_open boolean inizializzato a False
is_close boolean inizializzato a True

dowhile_2
Inseriamo un Sensor Always con True Level Trigger abilitato, in questo modo, indipendentemente da tutto, il Sensor Always manderà sempre un impulso positivo.
Aggiungiamo un Sensor che limiterà ad un’azione ben precisa l’inizio del ciclo do while, un Sensor Keyboard “E” penso che farà al caso nostro.
Adesso uniamo tramite un unico controller “xor”, i due Sensors precedentemente inseriti con due Actuators. Il primo sarà l’azione continuativa fino a quando il nostro ciclo do while non soddisferà la condizione voluta, il secondo sarà un Actuator atto ad incrementare il nostro contatore rot_value di una unità ogni tic.
Aggiungiamo un Sensor Property che testerà il valore di rot_value per poter cambiare lo stato dei blocchi logici. Assegnamo True alla proprietà is_open e viceversa False alla proprietà is_close.
Come ultimo controllo, aggiungiamo un Sensor Property che testa is_open = True per avviare la procedura inversa ovvero quella di chiusura.

dowhile_3