Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Fragmenty kodu pochodzą z mojej gry Square ( https://github.com/sheadovas/SQUARE/blob/master/Player.cpp )
- */
- /* Mi przychodzą do głowy 2 pomysły, a raczej 1 pomysł, który zrobiłem i 2 możliwe jego rozwiązania.
- * 1. najbardziej trywialny, czyli wykrywasz blok:
- */
- if(level->field[posY][posX].f_type == FT::Button_on)
- {
- // i zmieniasz jego wszystkie wartości ręcznie:
- level->field[posY][posX].f_type = FT::Button_off;
- level->field[p.second.y][p.second.x].f_type = FT::None;
- level->field[p.second.y][p.second.x].isTrap = false;
- level->field[p.second.y][p.second.x].isWall = false;
- }
- /* 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 */
- // w klasie level tworzymy sobie nową metodę
- void Level::changeTileTo(Vector2i pos, FT /* enum typu bloku */ newType)
- {
- // pos to pozycja bloku, który chcemy zmienić
- // newType to nowy typ bloku, np u ciebie jeżeli gracz wejdzie na DOOR_OPEN i chcemy zmienić je na zamknięte
- // to newType będzie wynosił DOOR_CLOSED
- // zmieniamy wartości na odpowiednio, można to jakoś sobie to zautomatyzować
- field[pos.y][pos.x].f_type = ... ;
- field[pos.y][pos.x].isTrap = ... ;
- field[pos.y][pos.x].isWall = ... ;
- }
- // wracamy do if'a gdzie sprawdzamy jaki typ bloku
- if(level->field[posY][posX].f_type == FT::Button_on)
- {
- level->changeTileTo(Vector2i(posX,posY), FT::Button_off);
- }
- /* Zakładam, że przed każdym rysowaniem aktualizujesz kafelki z Level */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement