Tak jak mi poradził Xion poszukałem troszkę o delegatach. Wcześniej nie chciało mi się tego uczyć bo uznawałem to za czarną magię, ale jak się okazało – nie taki diabeł straszny…
Zacząłem od zrozumienia jak to w ogóle działa. Później poszukałem informacji w jaki sposób można to zakodzić w C++. Napisałem sobie najpierw prosty program realizujący coś takiego, a potem malutką klasę która mi opakowuje to wszystko (raptem 1 metoda i operator() ). Udało mi się to wszystko nakłonić do działania.
Teraz przyszło najtrudniejsze – wcisnąć to do AGE.
Tutaj już trochę bardziej musiałem się wysilić i koncepcji było kilka. Oczywiście najprostsza, najbardziej oczywista i najwygodniejsza metoda przyszła mi do głowy na sam koniec. Ostatecznie jedyne co trzeba zrobić to napisać linijkę:
CONNECT( button, CM_CLICKED, task, gameTask::buttonClicked );
Jest to makro, które powstało – jak to makra mają w zwyczaju – dla wygody
Oczywiście warto też napisać metodę buttonClicked() ^^
Dodatkową zaletą wykorzystania delegatów jest to, że dla zdarzeń dla, których nie określę żadnej metody nie są wywoływane żadne funkcje. W poprzedniej metodzie – a’la procedura okna – funkcja była wywoływana nawet dla nieobsługiwanych zdarzeń, a to zawsze jakaś strata czasu. Szczególnie dla zdarzenia typu CM_MOVE ^^
Tak więc chciałem podziękować Xionowi za jego konstruktywną krytykę mojego rozwiązania i podsunięcie czegoś bardziej cywilizowanego
