View difference between Paste ID: E4dLqFRB and 2n14ihgz
SHOW: | | - or go back to the newest paste.
1
/*
2
 * Fragmenty kodu pochodzą z mojej gry Square ( https://github.com/sheadovas/SQUARE/blob/master/Player.cpp )
3
*/
4
5
/* Mi przychodzą do głowy 2 pomysły, a raczej 1 pomysł, który zrobiłem i 2 możliwe jego rozwiązania.
6
 * 1. najbardziej trywialny, czyli wykrywasz blok: 
7
*/
8
if(level->field[posY][posX].f_type == FT::Button_on)
9
{
10
	// i zmieniasz jego wszystkie wartości ręcznie:
11
12
	level->field[posY][posX].f_type = FT::Button_off;
13
	
14
	level->field[p.second.y][p.second.x].f_type = FT::None;
15
	level->field[p.second.y][p.second.x].isTrap = false;
16
	level->field[p.second.y][p.second.x].isWall = false;
17
}
18
19
20
/* 2. zakłada na dokładnie tym samym, lecz przydaje się gdy masz więcej zmieniających się w ten sposób typów bloków i wtedy jest bardziej wygodny i czytelny */
21
22
// w klasie level tworzymy sobie nową metodę
23
void Level::changeTileTo(Vector2i pos, FT /* enum typu bloku */ newType)
24
{
25
	// pos to pozycja bloku, który chcemy zmienić
26
	// newType to nowy typ bloku, np u ciebie jeżeli gracz wejdzie na DOOR_OPEN i chcemy zmienić je na zamknięte
27
	// to newType będzie wynosił DOOR_CLOSED
28
29
	// zmieniamy wartości na odpowiednio, można to jakoś sobie to zautomatyzować
30
	field[pos.y][pos.x].f_type = ... ;
31
	field[pos.y][pos.x].isTrap = ... ;
32
	field[pos.y][pos.x].isWall = ... ;
33
}
34
35
36
// wracamy do if'a gdzie sprawdzamy jaki typ bloku
37
if(level->field[posY][posX].f_type == FT::Button_on)
38
{
39
	level->changeTileTo(Vector2i(posX,posY), FT::Button_off);
40
}
41
42
/* Zakładam, że przed każdym rysowaniem aktualizujesz kafelki z Level */