-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpractica3.cpp
153 lines (113 loc) · 4.36 KB
/
practica3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// *********************************************************************
// **
// ** Informática Gráfica, curso 2018-19
// ** Práctica 2 (implementación)
// **
// *********************************************************************
#include "aux.hpp"
#include "tuplasg.hpp" // Tupla3f
#include "practicas.hpp"
#include "practica3.hpp"
#include "exextr1819.hpp"
using namespace std ;
// numero de filas y columnas
static constexpr int nc = 3;
static constexpr int nf = 4;
static unsigned objetoActivo3 = 0 ; // objeto activo: muneco(0)
static constexpr int numObjetos3 = 2 ;
static bool animaciones = false;
static unsigned parametroActivo = 0;
static NodoGrafoEscenaParam* objetos3[numObjetos3] = {nullptr, nullptr};
// ---------------------------------------------------------------------
// Función para implementar en la práctica 1 para inicialización.
// Se llama una vez al inicio, cuando ya se ha creado la ventana e
// incializado OpenGL.
void P3_Inicializar( )
{
cout << "Creando objetos de la práctica 3 .... " << flush ;
objetos3[0] = new PrismasP3(nf, nc);
objetos3[1] = new Muneco();
cout << "hecho." << endl << flush ;
}
// ---------------------------------------------------------------------
// Función invocada al pulsar una tecla con la práctica 1 activa:
// (si la tecla no se procesa en el 'main').
//
// - devuelve 'true' si la tecla se usa en esta práctica para cambiar
// entre el grado de libertad o incrementar/decrementar valores
// - devuelve 'false' si la tecla no se usa en esta práctica (no ha
// cambiado nada)
bool P3_FGE_PulsarTeclaCaracter( unsigned char tecla )
{
bool res = false ; // valor devuelto (true si se ha procesado tecla)
switch ( toupper( tecla ) )
{
case 'O' :
objetoActivo3 = (objetoActivo3+1) % numObjetos3 ;
cout << "práctica 3: nuevo objeto activo es: " << objetoActivo3 ;
if ( objetos3[objetoActivo3] != nullptr )
cout << " (" << objetos3[objetoActivo3]->leerNombre() << ")." << endl ;
else
cout << " (objeto no creado)" << endl ;
res = true;
break ;
case 'A' :
animaciones = !animaciones;
if (animaciones)
FijarFuncDesocupado(FGE_Desocupado);
std::cout << (animaciones
? "Activando "
: "Desactivando ")
<< "animaciones" << std::endl;
res = true;
break ;
case 'G' :
parametroActivo = (++parametroActivo)%(objetos3[objetoActivo3]->numParametros());
std::cout << "Parametro activo: " << objetos3[objetoActivo3]->leerPtrParametro(parametroActivo)->leer_descripcion() << std::endl;
break ;
case 'R' :
for (int i = 0; i < objetos3[objetoActivo3]->numParametros(); ++i){
objetos3[objetoActivo3]->leerPtrParametro(i)->reset();
}
animaciones = false;
std::cout << "Reseteando parámetros y desactivando animaciones" << std::endl;
res = true;
break ;
case '>' :
if(animaciones)
objetos3[objetoActivo3]->leerPtrParametro(parametroActivo)->acelerar();
else
objetos3[objetoActivo3]->leerPtrParametro(parametroActivo)->incrementar();
res = true;
break ;
case '<' :
if(animaciones)
objetos3[objetoActivo3]->leerPtrParametro(parametroActivo)->decelerar();
else
objetos3[objetoActivo3]->leerPtrParametro(parametroActivo)->decrementar();
res = true;
break ;
default :
break ;
}
return res ;
}
// ---------------------------------------------------------------------
// Función a implementar en la práctica 3 para dibujar los objetos
// se debe de usar el modo de dibujo que hay en el parámetro 'cv'
// (se accede con 'cv.modoVisu')
void P3_DibujarObjetos( ContextoVis & cv )
{
objetos3[objetoActivo3]->visualizarGL(cv);
/* arbol(12); // Ejercicio */
}
//--------------------------------------------------------------------------
bool P3_FGE_Desocupado()
{
if (!animaciones)
return false;
/* std::cout << "Test" << std::endl; */
objetos3[objetoActivo3]->siguienteCuadro();
redibujar_ventana = true;
return true;
}