Nazwałem ten temat "Zrób to sam!" dlatego, że będzie to w 100% teoria, jak zrobić system powiadomień jak w Czasie Zapłaty.
Przejdźmy najpierw do wytłumaczenia, czym jest ten system powiadomień:
Ten system używa poboczną (pierwotną) klasę dialogów, które są w Gothicu. Klasa ta została wykasowana z okien dialogowych i zastąpiona nową, bardziej rozbudowaną, a tą przenieśli do Smalltalk, czyli okienek, które wyświetlają się jak dwa npc rozmawiają ze sobą (czyli jest rozmowa pomiędzy dwoma npc, ale żaden z nich to nie hero). Jako tako, ta klasa nie jest używana (wcale). Twórcy postanowili przerobić Smalltalk i dodali ją do klasy dialogowej, która jest obecnie używana, a tą starą zostawili jako "relikwię". Relikwia (klasa) ta była zbyt mała, przez co dialogi mogły mieć tylko dwie linie, dlatego też ją rozbudowali.
Oto jak pierwotna klasa dialogów wyglądała:
class DialogBoxClass
{
var int MsgAlpha;
var int TextMove;
var int ViewMove;
var int MsgView;
var int Text;
var int FirstLine;
var int SecondLine;
var int time;
};
Jak widać, jest strasznie mała, idealna na system powiadomień (zdaje mi się, że Print() używa tej klasy). W Czasie Zapłaty postanowili ją "ożywić" i ulepszyć, robiąc nowy system powiadomień (PrintScreen). Klasa różni się pomiędzy dwoma Gothic'ami (chyba tylko nazwami zmiennych). Żeby zrobić podobny system powiadomień, trzeba użyć pakietu Anim8, View oraz Interface.
Przejdźmy do opisania, jak co ma wyglądać:
class DialogBoxClass
{
var int MsgAlpha; // Anim8(h) Alpha
var int TextMove; // Anim8(h) Text position
var int ViewMove; // Anim8(h) View position
var int MsgView; // Anim8(h) View
var int Text; // PrintScreen
var int FirstLine; // Print separator
var int SecondLine; // Print separator
var int time; // View Duration
};
instance DialogBoxClass@(DialogBoxClass);
MsgAlpha to animacja alfy całego powiadomienia (Print + View).
TextMove to animacja napisu (przemieszczanie się informacji).
ViewMove to animacja boxa dialogowego (informacyjnego).
MsgView to po prostu View.
Text to po prostu PrintScreen w postaci int (czyli tutaj musicie użyć PrintScreen z Lego).
First i SecondLine to linie. Linia pierwsza chyba musi być wypełniona, druga nie musi.
time to czas działania tej informacji (pierwotnie - dialogu).
DialogBoxClass@ jest użyte jako pointer w późniejszym skrypcie, gdzie wypełniamy naszą nową zmienną DialogBoxClass.
To chyba na tyle. Jak widać klasa jest idealnie rozbudowana, żeby zrobić takie cudo jak w CZ. Teraz starczy tylko pobawić się trochę całą klasą i utworzyć nowy system powiadomień. Wydaje mi się, że da radę także przypisać do tej klasy cały system dialogowy, ale nie jestem co do tego pewien, może wywalić parę błędów, albo w ogóle nie reagować na tę klasę, jeśli jednak by załapało, nie pójdzie manipulować całym dialogiem, lecz tylko jego częścią.
Jak w każdych moich tutorialach i "tutorialach", nie pozwalam na kopiowanie.