Witam, tworze sobie hobbystycznie grę RPG typu visual-novel (te z opcjami dialogowymi do klikania), jest klasa która odpowiada za wyswietlanie scen/ dialogów oraz interakcje z nimi/ innymi czesciami interfejsu, ogółem wszystko
jest klasą abstrakcyjną, sama nie może działać jako obiekt, ta klasa główna nazywa się "Scena"
aby utworzyć np. dialog w sklepie, trzeba rozszerzyć nową scenę z sklepem o tą abstrakcyjną o nazwie Scena
np. class Sklep extends Scena
nowa klasa Sklep musi przyjmować 1 tablicę w konstruktorze (z dialogami i informacjami) oraz metodą Change();
A dziala to tak
class Sklep extends Scena () {
constructor(){
super()
// tutaj sa dialogi jakie będą w scenie
this.dialogs =
[
{
idSceny:'scenaPierwsza'
napisNaScenie:'Ten tekst sie pojawi nad opcjami do wyboru'
opcjeDoWyboru: [{id:'opt1',text:'Wejdz do sklepu'},{id:'opt2',text:'Omin sklep'}]
},
]
}
// ta metoda wykonuje sie przed każdym wyświetleniem opcji
change(dialog){
const zlotoGracza= app.player.stats.get('gold'); // pobiera jako int ilosc waluty gracza
if(dialog.idSceny === 'scenaPierwsza' && zlotoGracza < 1000){dialog.opcjeDoWyboru.shift()}
// jesli scena to "scenaPierwsza" i gracz ma mniej niz 1000 zlota, to usuwa mu pierwszą opcje
}
}
metoda Change jest po to aby manipulować dialogami, zmieniać kolor elementow, na podstawie statystyk wybierać opcje, losować je i wprowadzać dowolne zmiany w obiekcie przed jego wyświetleniem.
Ale dałem sobie sprawę, że mogę takie coś zrobić w głównej klasie Scena, dodać opcjonalny parametr do opcji który sprawdza czy ma ona zostać wyświetlona np.
opcjeDoWyboru: [{id:'opt1',text:'Wejdz do sklepu', need: function () {return app.player.stats.get('gold') >= 1000} },{id:'opt2',text:'Omin sklep'}]
I teraz się zastanawiam, czy ta metoda Change() ma w ogóle sens, czy lepiej jest rozbudować klase tak aby pracowała na samych obiektach z this.dialogs, czy zostawić ta metoda która ingeruje w scene przed jej wyswietleniem do rzadziej wykonywanych sytuacji o które nie ma sensu rozbudowywać glownej sceny
Nie wiem jak to wygląda w innych wzorcach, jak się powinno robić, będę wdzięczny za pomoc