feat(entities): add steel box entity with specyfic push and laser blocking logic#100
feat(entities): add steel box entity with specyfic push and laser blocking logic#100Oskipol wants to merge 3 commits into
Conversation
bnszky
left a comment
There was a problem hiding this comment.
Zauważyłem, że rzeczywiście jest tutaj sporo kodu, który mógłby się nie powtarzać. Często też zdarza się, że pojawiają się literówki, co oznaczyłem w review.
Wykryłem kilka błędów, które w sumie polegają na tym, że mamy w kilku miejscach sprawdzenie czy znajduje się crate, ale nie zostało dodane sprawdzenie czy znajduje się steelBox
przykładowo w isWalkableForCapybara jest:
if (this.crateState.getCrateAt(x, y)) return false;
Nie ma natomiast sprawdzenia dla SteelBox.
Mam dwa rozwiązania tego problemu:
- Dodanie pola isSteel do obiektu crate i wtedy:
a) dla isSteel = true wyświetlamy stalowy box i aplikujemy logikę dla stalowego, czyli nie przesuwa żadnych innych cratów i steelBoxów
b) dla isSteel = false wyświetlamy crate i zostawiamy drugą logikę
Skróci to i tak już długi kod i unikniemy tej redundancji.
- Drugie podejście polegałoby na zmianie wszystkiego zawsze ręcznie, więc odradzam
I uwaga na koniec: pamiętaj, żeby testować działanie, bo aktualnie masz literówkę w kodzie i wizualnie w phaserze ten steel box nie renderuje się poprawnie po przesunięciu
| positionsToCheck.add(`${newX}_${newY}`); | ||
|
|
||
| this.broadcast("cratesUpdate", { crates: movedCrates }); | ||
| this.broadcast("steelBoxesUpdate", { steelBoxes: movedSteelBoxes }); |
There was a problem hiding this comment.
| this.broadcast("steelBoxesUpdate", { steelBoxes: movedSteelBoxes }); | |
| this.broadcast("steelBoxUpdate", { steelBoxes: movedSteelBoxes }); |
Tutaj literówka, która powoduje brak renderowania
|
Tak jak zasugerowałeś dodałem pole isSteel(boolian) i metodę createSteelBox do samego CrateState, ujednoliciłem jego logikę tak aby w zależności od tego pola inaczej się zachowywał |
Ogólnie głównie przekopiowałem logikę i strukturę cratea ze zmienionymi nazwami na "SteelCrate" oraz dodałem logikę odróżniającą steelcratea od zwykłego cratea (blokowanie laserów oraz to że może pchać cratey ale nie może >1 steel cratea) oraz podmieniłem capybara-tileset