-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModelo.cpp
More file actions
129 lines (112 loc) · 3.7 KB
/
Modelo.cpp
File metadata and controls
129 lines (112 loc) · 3.7 KB
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
#include "Modelo.hpp"
#include "Menu.hpp"
#include "AlmacenDeAjustes.hpp"
#include "AlmacenDeImagenes.hpp"
#include "Transicion_Desplazamiento.hpp"
#include "Transicion_Fundido.hpp"
#include "Transicion_Transparencia.hpp"
Modelo::Modelo(Controlador* controlador) : capturando(false),fue_transicion(false),index(-1),window(sf::VideoMode(fwidth,fheight),"Serpiente")
{
window.setIcon(32,32,AlmacenDeImagenes::getInstancia().getIcono().getPixelsPtr());
capturador.create(fwidth,fheight);
desplazar_controlador = false;
addController(controlador);
start();
}
void Modelo::start()
{
window.setFramerateLimit(60);
while (index >= 0 && window.isOpen())
{
dibujarPantalla(controlador[index].get());
sf::Event event;
while (window.pollEvent(event) && index >= 0)
{
controlador[index]->tratarEvento(event);
}
}
window.close();
}
void Modelo::cerrarVentana()
{
window.close();
}
void Modelo::dibujarPantalla(Controlador* micontrolador)
{
window.clear();
micontrolador->refrescarPantalla();
window.display();
}
const sf::Texture& Modelo::capturarPantalla(Controlador * micontrolador)
{
capturando = true;
capturador.clear();
micontrolador->refrescarPantalla();
capturador.display();
capturando = false;
return capturador.getTexture();
}
void Modelo::addController(Controlador* miControlador)
{
addController(miControlador,index < 0);
}
void Modelo::addController(Controlador* miControlador,bool transicion_puesta)
{
index++;
if (index >= controlador.size())
{
std::unique_ptr<Controlador> nuevoControlador(miControlador);
controlador.push_back(std::move(nuevoControlador));
}
else
{
controlador[index].reset(miControlador);
}
if (!transicion_puesta)
{
const sf::Texture primero = capturarPantalla(controlador[index-1].get());
const sf::Texture segundo = capturarPantalla(controlador[index].get());
fue_transicion = true;
addController(new Transicion_Desplazamiento(this,primero,segundo,sf::Vector2i(0,-1),AlmacenDeAjustes::getInstancia().getTicks_transicion())
,true);
// addController(new Transicion_Fundido(this,primero,segundo,60),true);
//addController(new Transicion_Transparencia(this,primero,segundo,60),true);
}
}
void Modelo::finishController()
{
if (capturando) return;
//controlador.pop();
index--;
if (index <= -1)
{
window.close();
}
else if (!fue_transicion)
{
const sf::Texture primero = capturarPantalla(controlador[index+1].get());
const sf::Texture segundo = capturarPantalla(controlador[index].get());
fue_transicion = true;
addController(new Transicion_Desplazamiento(this,primero,segundo,sf::Vector2i(0,1),AlmacenDeAjustes::getInstancia().getTicks_transicion()),
true);
//addController(new Transicion_Fundido(this,primero,segundo,60),true);
//addController(new Transicion_Transparencia(this,primero,segundo,60),true);
}
else
{
fue_transicion = false;
if (desplazar_controlador)
{
desplazar_controlador = false;
controlador[index-1].reset(controlador[index].release());
index--;
}
}
}
//void Modelo::anyadirTransicion(Transicion* miTransicion)
//{
// const sf::Texture primero = capturarPantalla(controlador[index-1].get());
// const sf::Texture segundo = capturarPantalla(controlador[index].get());
// fue_transicion = true;
// addController(miTransicion,true);
//}