Spis treści
[TOC]
Hi Score Cafe (HSC) jest usługą udostępnioną przez Krzysztofa XXL Dudka, która gromadzi i prezentuje listy wyników użytkowników z gier, przeznaczonych na 8-bitowe komputery ATARI.
Przesyłanie wyników odbywa się na trzy różne sposoby:
- ręcznie dodanie za pośrednictwem serwisu HSC
- kod QR generowany w grze na małym ATARI
- API HSC, korzystające z urządzenia FujiNet.
Więcej na temat serwisu pod linkiem Hi Score Cafe
Jest to skrypt rozszerzający możliwości HSC. Dodaje możliwość generowania ekranów dla komputera ATARI z listą wyników danej gry oraz grafiką AtasciiArt.
Ekran jest generowany na podstawie przesłanego do serwisu pliku konfiguracyjnego. W postaci czytelnej dla małego ATARI, przesyłany jest do interfejsu FujiNet za pośrednictwem sieci Internet. Po odebraniu przez komputer danych, ekran może być wpisany bezpośrednio do pamięci ekranu komputera Atari, bez konieczności przetwarzania informacji.
Atutem takiego rozwiązania są:
- udekorowanie wyników grafiką AtasciiArt
- brak konieczności przetwarzania danych JSON po stronie ATARI
- szybki dostęp do listy wyników wielu gier.
Niniejsza dokumentacja zawiera podstawowe informacje dotyczące tworzenia pliku konfiguracyjnego dla rozszerzenia HSC AtasciiArt Generator (HSC AAG).
Jest to plik w formacie JSON. Opisuje on właściwości i elementy generowanego ekranu AtasciiArt.
Ważne, aby pamiętać, że wielkość liter w nazwach sekcji, atrybutów oraz ich wartościach MA ZNACZENIE!
Tu zaczyna się przygoda z plikiem konfiguracyjnym.
Ogólny zarys tej sekcji przedstawia poniższy kod:
{
atributes,
lineSchemas,
layout,
layouts
}
Są one w większości czysto informacyjne i nie muszą być umieszczone w pliku konfiguracyjnym.
Wartość tego atrybutu zawiera nazwę dla pliku konfiguracyjnego.
Definiuje autora pliku
Ustawia (globalnie) użytą paletę podczas generowania obrazu PNG
Dostępne są palety:
Nazwa palety |
---|
altirra |
atari800winplus |
g2f |
gray |
green |
jakub |
laoo |
olivierp |
real |
rocky_real_atari2 |
rocky_super_atari |
xformer |
Zawiera definicje schematów generowanych linii, patrz Sekcja `lineSchemas' - Schematy definicji linii
Ta sekcja nie jest wymagana.
Sekcja definiuje layout, patrz Sekcja layout
- Definicja layoutu
Umożliwia zdefiniowanie kilku layoutów, tzw. sub layoutów, patrz Sekcja layouts
- sub layouty
W przypadku zdefiniowania także sekcji layout
ta sekcja ma nad nią priorytet!
Z punktu widzenia formatu JSON, layout
jest obiektem opisującym ekran bazowy. Umieszczone są w nim atrybuty layoutu, definicje generowanych linii oraz ich elementów.
{
"layout":{
layout_attributes,
"lines":[
{ // first line
line_attributes,
element:{...},
element:{...},
...
},
{ // secound line
line_attributes,
element:{...},
element:{...},
...
},
...
]
}
}
Powyższy przykład, przedstawia schemat definicji layoutu (ekranu). W jego skład wchodzą:
- atrybuty layoutu
- sekcja
lines
Okresla szerokość i wysokość całkowitą generowanego ekranu w znakach
Domyślna wartość to 40 znaków.
Wartości width
z zakresu od 1 do 48. Można też używać predefiniowanych wartości:
narrow
- szerokość 32 znakinormal
- szerokość 40 znakówwide
- szerokość 48
Wartość height
od 1 do 30.
Tablica obiektów opisująca generowane linie (patrz Sekcja lines - Definicje linii
)
Nazwa dla layoutu.
Twórca layoutu.
Tablica reprezentująca ustawienia kolorów dla wartości rejestrów kolorów ATARI (od 708 do 712)
Ustawia paletę kolorów dla generowanego obrazu PNG. Jezeli atrybut nie jest określony, zastosowana zostanie paleta zdefiniowana w głównej sekcji pliku konfiguracyjnego.
Określa sposób wyjściowego kodowania treści generowanych linii
Z natury rzeczy, ekran bazowy to nic innego jak ekran komputera Atari. Jest on standardowo kodowany z użyciem kodów ANTIC. Jednak można go też opisać używając standatu ATASCII.
W tym celu, należy zaznaczyć w jaki sposób będą kodowane, generowane linie.
Dostępne wartości: atascii
, antic
Domyślna wartość: antic
Tablica ciągów heksadecymalnych.
Atrybut ten zawiera opis ekranu bazowego. Standardowo można zapisać cały ekran w postaci jednego ciągu znaków hexa, np.
...
layout:{
"screenData":["0049494949494949494949494949494949494949494949494949494949494949494949494949490049004C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C00494C004955550049554F0055550055554F4955554F49554F495555000000494F0049554F0000494C494C00D9C9CF5980D580D9C9C...
0000000000000000000000000000000000000000000000000000000000000000000494C494C494949494949494949494949494949494949494949494949494949494949494949494949004C00004C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C00"]
}
Jednak trudno się odnieść do tak ułożonych danych. Można sobie trochę pomóc, formatując dane w postaci wielu linii:
"screenData": [
"00494949494949494949494949494949494949494949494949494949494949494949494949494900",
"49004C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C00",
"494C004955550049554F0055550055554F4955554F49554F495555000000494F0049554F0000494C",
...
"494C000000000000000000000000000000000000000000000000000000000000000000000000494C",
"494C000000000000000000000000000000000000000000000000000000000000000000000000494C",
"494C494949494949494949494949494949494949494949494949494949494949494949494949004C",
"00004C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C00"
]
Definiuje znak, jakim będzie wypełniqony ekran bazowy w przypadku, braku atrybutu screenData
Jest to tablica obiektów (w rozumieniu pliku JSON). Każdy obiekt w tej sekcji, definiuje osobną, generowaną linię w ekranie bazowym.
Treść generowanej linii jest obcinana do jej szerokości oraz wysokości.
W sekcji tej, definiowane są też elementy wchodzące w skład linii.
Określają początkowe położenie linii w ekranie bazowym
Definiuje szerokość i wysokość linii.
Domyślne wartości to: height
= 1. Jeśli chodzi o width
to ta wartość domyślnie dobierana jest na podstawie różnicy szerkości generowanego ekranu, a wartości X połoźenia linii.
Ustawiony na true
, dokonuje inwersji (operacja XOR na 7 bicie każdego znaku) w wynikowej linii
Typ generowanego elementu zawarty jest w nazwie atrybutu obiektu opisującego generowaną linię tablicy lines
{
"layouts":{
"default":{
"lines":[
{
"x": 1,
"y": 1,
"width": 20,
"element_type": {
element_attributes
},
"element_type": {
element_attributes
},...
},...
]
}
}
}
Miejsce z tablicy wyników
Nazwę gracza (jego nick)
Osiągnięty wynik
Data rejestracji wyniku
Generuje dowolny tekst
Generuje czas utworzenia ekranu
Każdy element może posiadać etykietę. Jej nazwę definiujemy zaraz po typie elementu, poprzedzając ją znakiem kropki.
{
"text.label":{...}
}
Jest ona wymagana w przypadku chęci wstawienia kilku elementów tego samego typu w jednej definicji linii.
Poniższe atrybuty nie są wymagane, gdyż w przypadku ich braku, wybierana jest wartość domyślna, jednak warto nad nimi panować, celem osiągnięcia zamierzonego efektu.
Definiują przesunięcie poziome oraz pionowe względem początku linii (w znakach)
Wartości domyślne dla obu atrybutów wynoszą 0 (zero)
Ustalają szerokość i wysokość generowanego elementu (w znakach)
Wartościami domyślnymi dla atrybutów width
i height
są, szerokość i wysokość definiowanej linii.
Justowanie zawartości elementu, względem jego szerokości.
Możliwe wartości to: left
, center
, right
.
Wartość right
jest domyślna.
Określna znak, jakim będzie wypełniony element na całej jego szerokości.
Domyślną wartością jest znak spacji
Pozwala na konwersję wielkości liter.
Możliwe wartości: uppercase
,lowercase
Zawiera listę znaków, jaka będzie akceptowana przy generowaniu elementu. Jego opis to wartość typu string, zawierająca wszystkie akceptowane znaki.
W parze z tym atrybutem jest atrybut replaceOutsideChars
.
Domyślnie akceptowane są wszystkie znaki.
Ten atrybut określa znak, jaki będzie wstawiany w przypadku, gdy znak generowanego elementu nie należy do zakresu określonego w atrybucie limitChars
.
Domyślną wartością jest #32 (spacja)
Działa tak samo jak atrybut invert
w sekcji layout
z tą różnicą, że stosowany jest tylko do generowanego elementu.
Generuje treść elementu z użyciem AtasciiFont (patrz dział AtasciiFont)
Atrybut wskazujący na pobranie wyniku z tablicy wyników.
Przyjmuje dwa typy wartości:
-
boolean
- określające, czy pobierać wynik z tablicy wyników (wartośćtrue
, czy też nie (wartośćfalse
). -
integer
- określająca, który wynik z tablicy wyników ma być pobranyUWAGA! Atrybut nie sprawdza zakresu!
Ustalenie tego atrybutu tyczy się aktualnie definiowanej linii. Po przejściu do następnej, numer miejsca wyniku jest automatycznie zwiększany o jeden. Ustawienie wartości false
powoduje, niezwiększanie numeru miejsca dla następnej linii.
Domyślną wartością jest true
Spośród wszystkich elementów można wybrać takie, które mają przypisane dodatkowe atrybuty. Takimi elementami są:
-
date
-
genTime
-
text
Jest to ciąg znaków opisujących sposób, w jaki ma być interpretowana data powstania wyniku. Domyślnie stosowany jest format Y.m.d
Funkcją formatującą czas jest funkcja języka PHP date()
. Jej opis znajdziesz tu, a możliwe opcje formatowania tu.
Wyświetla serwerowy czas utworzenia ekranu.
Patrz opis atrybutów elementu date
Użyj atrybutu content
celem, określenia treści generowanego tekstu.
...
"lines":[
{
"x":0,
"y":10,
"height":5,
"text":{
"align":"center",
"content":"ATARI RULEZ",
"useAtasciiFont":"square-slim"
}
}
]
...
W treści atrybutu, może być użyty parametr, np:
...
"text":{
"content":"%id"
}
...
W miejscu id
nalezy użyć identyfikatora, jaki zaostał użyty do przekazania parametrów do skryptu (patrz Przekazywanie parametrów do HSC AAG)
Aby ułatwić projektowanie layoutu oraz zwiększyć czytelność pliku konfiguracyjnego, można stosować schematy definicji linii.
Ich definicje opisuje się w głównej części pliku konfiguracyjnego w sekcji lineSchemes
i jest ona obiektem w którym zawarte są poszczególne schematy.
Każdy schemat jest obiektem i musi być nazwany, np:
{
...
"lineSchemes": [
"my_schema": {
...
}
],
...
}
W definicji schematu można stosować wszystkie elementy i ich atrybuty, które zostały wymienione w sekcji Elementy linii.
Użycie schematu jest banalnie proste. W definicji linii wyniku wstawiamy atrybut useSchema
któremu przypisujemy nazwę zdefiniowanego schematu (wielkość liter ma znaczenie!)
{
...
"lineSchemes": [
"my_schema": {
"x": 5,
"width": 20,
"place": {
"shift": 1,
"width": 2,
"align": "right"
},
...
"invert": false
}
],
"layouts": {
"default":{
...
"lines":[
{
"y": 5,
"useSchema": "my_schema",
"invert": true
},
{
"y": 7,
"useSchema": "my_schema"
}
...
]
}
]
}
Elementy i atrybuty zdefinsiowane w linii wyniku mają priorytet nad schematem, dzięki czemu, można nadpisywać ustawiane przez schemat cechy.
Sposób definiowania poszczególnych ekranów przedstawia poniższy, plik konfiguracyjny:
{
"layouts":{
"default":{
...
},
"layout_1":{
...
},
"layout_1":{
...
}
}
}
Powyższy przykład, przedstawia poglądową definicję trzech ekranów (sub layoutów):
- nazwa
default
jest zarezerwowana dla domyślnego wyglądu layout_1
ilayout_2
są dodatkowymi ekranami
Atrybuty layoutu, definicje linii oraz ich elementów, pozostają takie same, jak w przypadku sekcji layout
.
AtasciFont to czcionki wykorzystujące zestaw znaków Atascii z małego ATARI.
W połączeniu z HSC AtasciiArt Generator zwiększają one możliwości kreowania ekranów i można je wykorzystać w każdym aspekcie na jaki pozwala HSC AAG.
Obecnie stworzonych jest 9 czcionek.
Uwaga! Nie wszystkie czcionki zawierają definicjie: małych liter oraz znaków interpunkcyjnych! Użycie niezdefiniowanego znaku, spowoduje jego nie wyświetlenie.
Zobacz katalog podglądu czcionek, aby zobaczyć, jakie znaki są zdefiniowane w czcionkach.
Aby użyć czcionki AtasciFont w pliku konfiguracyjnym, należy w definicji elementu umieści atrybut useAtasciiFont
. W jego parametrze należy podać nazwę pliku czcionki (bez rozszerzenia .json
), np.
...
"text":{
"content":"HELLO ATARIANS",
"useAtasciiFont": "cosmic-line-2"
}
...
Należy też pamiętać o dobraniu wysokości linii do wysokości czcionki, gdyż skrypt nie robi tego automatycznie. W przeciwnym wypadku czcionka będzie ucięta.
...
"lines":{
"height":3,
"elements":{
"text":{
"content":"HELLO ATARIANS",
"useAtasciiFont": "cosmic-line-2"
}
}
}
...
Wszelkie atrybuty dostosowujące treść elementu są akceptowane dla AtasciiFont.
Na projekt HSC AAG składają się następujące katalogi i pliki:
Nazwa | Opis |
---|---|
/AtasciiFonts |
definicje czcionek AtasciiFont oraz ich źródła i obrazy poglądowe |
/config_files_examples |
przykłady i źródła plików konfiguracyjnych |
/default_configs |
katalog z definicjami domyślnych plików konfiguracyjnych |
/user_configs |
zawiera pliki konfiguracyjne użytkowników |
/palette |
pliki definicji palet kolorystycznych |
_constants.php |
definicje stałych dla klasy AtasciiGen |
_polyfill.php |
funkcje zapewniające kompatybilność ze starszymi wersjami PHP |
_string_helpers.php |
funkcje pomocnicze do operowania na ciągach znaków |
class_AtasciiFont.php |
klasa generująca tekst z użyciem czcionek AtasciiFont |
class_AtasciiGen.php |
klasa bazowa, generująca ekrany AtasciArt |
class_MultiAtasciiGen.php |
rozszerzenie klasy bazowej, dające dostęp do definiowania sub layoutów |
example-AtasciiFont.php |
przykład użycia klasy AtasciiFont |
example_implementation.php |
Klasa ExampleGenerator . Przykład implementacji klasy MultiAtasciGen |
example.php |
przykad użycia klasy ExampleGenerator |
atari_8.png |
obraz z graficzną reprezentacją znaków Atascii (rozmiar piksela 1x1) |
atari_16.png |
j.w. (rozmiar piksela 2x2) |
Widoczność | Typ |
---|---|
public | string |
Przechowuje nazwę otwartego pliku konfiguracyjnego.
Widoczność | Typ |
---|---|
public | array |
Jednowymiarowa tablica asocjacyjna zawierająca parametry które będą mogły być odczytane przez plik konfiguracyjny.
Asocjacja odbywa się poprzez klucz i jego wartość, gdzie nazwa klucza jest identyfikatorem parametru.
Widoczność | Typ |
---|---|
private | string |
Zmienna przechowująca wygenerowany ekran w postaci ciągu znaków Atascii. Rozmiar ciągu ustalany jest na podstawie wartości przekazanych przez plik konfiguracyjny w atrybutach layoutu width
i height
i jest on równy iloczynowi tych atrybutów.
Widoczność | Typ |
---|---|
private | array |
Zawiera zdekodowany do referencyjnej tablicy asocjacyjnej plik konfiguracyjny JSON.
Widoczność | Typ |
---|---|
private | array |
Referencja do obiektu $config['linesScheme']
zawierająca definicje schematów linii.
Widoczność | Typ |
---|---|
private | integer |
Szerokość $screenWidth
i wysokość $screenHeight
generowanego ekranu. Wartości tych zmiennych ustalane są z definicji layoutu pliku konfiguracyjnego
Widoczność | Typ |
---|---|
private | integer |
Zmienne zawierają położenie lewego górnego rogu (kolumnę $curLineX
i wiersz $curLineY
) aktualnie przetwarzanej linii definicji layoutu.
Widoczność | Typ |
---|---|
private | integer |
Zawierają wymiary (szerokość $curLineWidth
i wysokość $curLineHeight
) aktualnie przetwarzanej linii definicji layoutu.
Widoczność | Typ |
---|---|
protected | string |
Bufor (ciąg znaków), przeznaczony dla każdej generowanej linii. której indeks reprezentuje numer przetwarzanej linii definicji layoutu.
Jego organizacja jest liniowa i może zawierać więcej niż jedną linię, która jest częścią ekranu. Ilość zawartych w buforze linii, jest determinowana na podstawie wysokości $this->$curLineWidth
aktualnie definiowanej linii. Podobnie jest z szerokością - tą ustala szerokość this->$curLineHeight
aktualnie definiowanej linii.
W rezultacie, rozmiar bufora to iloczyn szerokości i wysokości definiowanej linii.
Widoczność | Typ |
---|---|
private | array |
Zawiera atrybuty aktualnie przetwarzanego elementu definicji linii.
Jest to tablica asocjacyjna, której kluczem są nazwy atrybutów, a wartości ich parametrem.
Widoczność | Typ |
---|---|
public | array |
Tablica której zawartość ustala metoda $this->loadPalette()
.
Składa się z 256 indeksów w których są zapisane wartości RGB dla każdego indeksu:
{
0:[0,0,0],
1:[0,0,0],
...
}
Widoczność | Typ |
---|---|
public | array |
Tablica zawierająca wartości rejestrów (zgodnie z systemem ATARI 8-bit). Kluczem tablicy jest numer rejestru od 708 do 712, wartością wartość koloru.
Tablic ustawiana jest przez metodę $this->getLayoutColorsData()
a ta, wywoływana jest przez $this->generate()
Widoczność |
---|
public |
parametr | type | wartość domyślna |
---|---|---|
$fn |
string | brak |
Konstruktor, wczytujący i dekodujący plik konfiguracyjny w formacie JSON. W przypadku nieznalezienia pliku lub błędu w jego składni, funkcja wyrzuca wyjątek.
Ustala też tablicę layoutów oraz schematów linii.
Widoczność |
---|
public |
parametr | type | wartość domyślna |
---|---|---|
$place |
integer | brak |
Funkcja jaką pełni to, pobieranie pojedynczego wyniki z tablicy wyników.
Wywołanie bez implementacji powoduje "wyrzucenie" wyjątku!
Musi być zaimplementowana poprzez rozszerzenie klasy AtasciiGen
. Patrz Przyklad implementacji
Widoczność |
---|
private |
Metoda generująca ekran bazowy na podstawie atrybutów definicji layoutu screenData
oraz screenFill
.
screenData
może być ciągiem znaków lub tablicą ciągów znaków. Treść ciągów to 8-bitowe wartości zapisane w systemie szesnastkowym opisujące znak po znaku (w jednym z dwóch standardów ATASCI lub ANTIC) ekran bazowy.
Widoczność |
---|
private |
parametr | type | wartość domyślna |
---|---|---|
$value |
integer | brak |
$min |
integer | brak |
$max |
integer | brak |
$errMsg |
string | brak |
Metoda do kontroli zakresu wartości liczbowej, przekazywanej w parametrze $value
. Zakres ustalany jest przez parametry $min
i $max
.
Metoda generuje wyjątek w przypadku przekroczenia zakresu, a treść tego wyjątku jest podawana w parametrze $errMsg
. Do treści wyjątku "doklejana" jest informacja o oczekiwanym zakresie.
Widoczność |
---|
private |
parametr | type | wartość domyślna |
---|---|---|
$value |
any type | brak |
$default |
integer | null |
$errMsg |
string | "Some atrribut is not specified" |
Metoda kontrolująca istnienie parametru. Jest nieco "kontrowersyjna", gdyż opiera się o tryb "silent" PHP (operator @). W tym trybie, nie są generowane błędy, a wartość zwracana przez nieistniejący paramert przyjmuje null
.Należy go dołączyć do przekazywanego parametru $vaue
, np.
$this>checkExist(@$this->config['name'], null);
Może reagować na dwa sposoby:
- generować wyjątek z komunikatem określonym w parametrze
$errMsg
. Ten sposób dostępny jest gdy, parametr$default
- przypisywać wartość
$default
, jeżeli$value
Widoczność |
---|
protected |
parametr | type | wartość domyślna |
---|---|---|
&$layoutData |
array | brak |
Metoda pomocnicza.
Metoda ustalająca atrybuty layoutu. Wywoływana przed rozpoczęciem generowania ekranu (metoda generate()
)
Sprawdza istnienie atrybutów width
, height
,screenData
,screenFill
w przekazywanej referencji $layoutData
. Przypisuje zdefiniowane wartości lub dobiera wartości domyślne dla tych atrybutów.
Widoczność |
---|
protected |
parametr | type | wartość domyślna |
---|---|---|
&$lineDef |
array | brak |
Metoda pomocnicza.
Metoda wywoływana jest na początku każdej zdefiniowanej linii i buduje schemat linii na podstawie atrybutu useSchema
. Sprawdza jego istnienie w sekcji lineSchemes
i dodaje atrybuty schematu do aktualnej definicji linii, której dane przekazywane są w parametrze referencyjnym $lineDef
. Jeżeli definicja linii zawiera atrybut, który jest zawarty w schemacie, jego wartość ma pierwszeństwo.
Brak definicji schematu w sekcji lineSchemes
spowoduje wywołanie wyjątku o treści Schema ... is not defined!
Widoczność |
---|
protected |
parametr | type | wartość domyślna |
---|---|---|
&$currentSchema |
array | brak |
Metoda pomocnicza.
Sprawdza i ustawia właściwości dla generowanej linii. Atrybuty testowane są w przekazanym do metody parametrze referencyjnym $currentSchema
i są nimi: x
, y
, width
, height
, fillChar
, isEntry
.
Metoda wywoływana jest tuż przed generowaniem elementów.
Widoczność |
---|
protected |
parametr | type | wartość domyślna |
---|---|---|
&$layoutData |
array | brak |
&$currentSchema |
array | brak |
Metoda pomocnicza.
Przekazane w parametrach metody zmienne referencyjne $layoutData
oraz $currentSchema
sprawdzane są pod kątem atrybutów invert
oraz encodeLnesAs
i przetwarzane są końcowe parmetry generowanej linii.
Metoda wywoływana jest po skończeniu przetwarzania elementów zawartych w definicji linii.
Widoczność |
---|
public |
Generuje ekran na podstawie danych pliku konfiguracyjnego.
Wykonuje metody pomocnicze w następującej kolejności:
flowchart TB
A("START") --> A'[["getLayoutColorsData"]]
A' --> B[["parseLayoutBefore"]]
B --> C[/"for each line definition"/]
C --> D[["buildLineSchema"]]
D --> E[["parseLineBefore"]]
E --> F[/"for each elements in line definition"/]
F --> G[["parseElement"]]
G --> H{"It is last element?"} -- No --> F
H --> I[["parseLineAfter"]]
I --> J{"It is last line?"} -- No --> C
J --> K(END)
click a' "#getLayoutColorsData"
click B "#parseLayoutBefore"
click D "#buildLineSchema"
click E "#parseLineBefore"
click G "#parseElement"
click I "#parseLineAfter"
Każda wygenerowana linia jest wpisywana w bazowy ekran $this->screenDef
. Na podstawie zmiennych $this->curLineX
, $this->curLineY
, $this->curLineWidth
obliczny jest offset początku zapisywanych danych. Z bufora linii $this->currentLine
zastępowane są dane w ekranie bazowym.
Widoczność |
---|
private |
parametr | type | wartość domyślna |
---|---|---|
&val |
string | brak |
Generuje treść elementu definicji linii na podstawie zebranych przez metody pomocnicze informacji oraz przekazanego parametru $val
, który zawiera tekst.
Sprawdza istnienie atrybutów elementu useAtasciFont
, offsetX
, offsetY
, width
, height
, align
, letterCase
, fillChar
, limitChar
, invert
. W przypadku braku któregoś z nich, ustawia wartości domyślne.
Generowany element wpisywany jest do bufora linii $this->currentLineDef
.
Widoczność |
---|
protected |
parametr | type | wartość domyślna |
---|---|---|
$elType |
string | brak |
$scoreEntry |
array | brak |
$label |
string | null |
Metoda pomocnicza.
Wywołuje na podstawie typu elementu zawartego w parametrze $elType
metodę createElement
, przekazując do niej odpowiedni ciąg znagów do wygenerowania.
Parametr $scoreEntry
zawiera dane jedenego wiersza tablicy wyników. Informacje te, pobierane są na podstawie wartości atrybutu isEntry
definicji linii. Ten, ustalany jest w metodzie pomocniczej parseLineBefore
Do metody przekazywany jest też przypisana do elementu etykieta (parametr $label
)
Widoczność |
---|
public |
parametr | type | wartość domyślna |
---|---|---|
$imageFile |
string | null |
$fontFile |
string | DEFAULT_FONT_FILE |
$defaultCharWidth |
int | DEFAULT_CHAR_WIDTH |
$defaultCharHeight |
int | DEFAULT_CHAR_HEIGHT |
Metoda tworzy na podstawie wygenerowanego ekranu obraz PNG (musi być wcześniej wywołana metoda generate
) . Obraz jest tworzony z wykorzystaniem podanego w parametrze $fontFile
pliku obrazu czcionki (także w formacie PNG). Rozmiar pojedynczego znaku opisany jest parametrami $charWidth
i $charHeight
. Układ czcionek w pliku graficznym to 32 znaki na 8 znaków, z czego druga połowa (linie od 5-8) zawierać musi znaki w inwersie (specyfika czcionek ATARI 8-bit)
Jeżeli nie zostanie podany parametr $imageFile
, metoda "wyrzuci" treść wygenerowanego obrazu w formacie PNG jako echo. Można tą cechę wykorzystać do generowania obrazów na żądanie stron HTML. Trzeba poprzedzić taki wynik ustawieniem nagłówka HTTP na Content-Type: image/png
Widoczność |
---|
privte |
parametr | type | wartość domyślna |
---|---|---|
$fn |
string | null |
Wczytuje definicję palety kolorów.
Paleta używana jest przy generowaniu obrazu PNG (metoda $this->makeImage()
)
Widoczność |
---|
private |
Metoda sprawdza, czy istnieje atrybut colors
w definicji layoutu, jeżeli jest zdefiniowany, pobiera zawartość atrybutu colors
- powinna być to tablica wartości, reprezentująca stan rejestrów kolorów w ATARI (rejestry od 708 do 712). Pobrane informacje umieszczane są w tablicy asocjacyjnej $this->colorReg[]
Zwraca wartość logiczną true
, jeżeli rejestry zostały ustawione. W przeciwnym wypadku false
Rozszerza podstawową klasę AtasciiArt
o możliwość definiowania sub layoutów czyli, pozwala tworzyć w jednym pliku konfiguracyjnym, wiele definicji ekranów.
Widoczność | Typ | Wartość |
---|---|---|
public | string | ./users_configs/ |
Ścieżka do plików konfiguracyjnych użytkowników.
Widoczność | Typ | Wartość |
---|---|---|
public | string | ./default_configs/ |
Ścieżka do domyślnych plików konfiguracyjnych.
Widoczność | Typ | Wartość |
---|---|---|
public | string | defaults |
="defaults";
Nazwa domyślnego pliku konfiguracyjnego.
Widoczność | Typ | Wartość |
---|---|---|
public | string | .json |
=".json";
Rozszerzenie pliku konfiguracyjnego.
Widoczność | Typ | Wartość |
---|---|---|
public | string | default |
Nazwa domyślnego ekranu
Widoczność | Typ |
---|---|
private | string |
Identyfikator gry.
Na jego podstawie tworzona jest nazwa pliku, który jest wyszukiwany w ścieżce podanej w parametrze USER_CONFIG_PATH
Widoczność | Typ |
---|---|
private | string |
Identyfikator sub layoutu.
Widoczność | Typ |
---|---|
public | array |
Zmienna tablicowa, zwierająca tablicę wyników pobrną metodą fetchScoreboardFromDB
Widoczność |
---|
public |
parametr | type | wartość domyślna |
---|---|---|
$gameID |
string | null |
$layoutID |
string | self::CONFIG_LAYOUTS_DEFAULT |
Konstruktor klasy inicjujący klasę bazową AtasciiGen
.
Jej zadaniem jest sprawdzenie istnienia pliku konfiguracyjnego dla $gameID
. Jeżeli taki nie istnieje, ustawiany jest domyślny plik konfiguracyjny zapisany w stałej self::DEFAULT_CONFIG_FILE
. Jeżeli domyślny plik nie istnieje, zwracany jest wyjątek.
Dodatkowo, przygotowuje odpowiedni layout w przypadku ustawienia parametru $layoutID
na odpowiedni identyfikator.
W przypadku nieznalezienia identyfikatora $layoutID
konstruktor zwraca wyjątek z klasy AtasciiGen
.
Widoczność |
---|
public |
Metoda pobierająca tablicę wyników z bazy danych. Wywoływana jest z poziomu konstruktora.
Wywołanie bez implementacji powoduje "wyrzucenie" wyjątku!
Musi być zaimplementowana poprzez rozszerzenie klasy MultiAtasciiGen
. Patrz Przyklad implementacji
Widoczność |
---|
public |
Podobnie jak metoda nadrzęda, generuje ekran na podstawie danych z wczytanego pliku koniguracyjnego.
Dodatkowo sprawdza i ustawia wybrany sub layout przed wywołanie nadrzędnej metody parent::generate()
.
Widoczność |
---|
public |
Metoda generuje block danych (ciąg znaków), zawierający wartości zdefiniowanych w atrybucie colors
wartości rejestrów kolorów (jeden bajt/znak=jeden rejestr).
Ilość danych w bloku wynosi 5 bajtów.
Widoczność |
---|
public |
Metoda generuje block danych (ciąg znaków), zawierający informacje dotyczące layoutu.
offset | typ | opis |
---|---|---|
0 | byte | rodzaj wykorzystanego trybu graficznego (rozwojowa) |
1 | byte | typ zastosowanego kodowania ekranu wynikowego |
2 | byte | szerokość definiowanego ekranu (w bajtach) |
3 | byte | j.w. tylko wysokość (w bajtach) |
4 | array[0..4] of byte | dane rejestrów kolorów |
9 | array[0..39] of char | nazwa gry (kodowanie ASCII) |
49 | array[0..39] of char | typ rozgrywki (kodowanie ASCII) |
89 | array[0..39] of char | autor pliku konfiguracyjnego |
Łącznie długość bloku wynosi 130 bajtów.
Widoczność |
---|
public |
parametr | type | wartość domyślna |
---|---|---|
$includeAuthor |
bool | true |
Generuje blok danych w formacie JSON, zawierający listę zdefiniowanych w pliku konfiguracyjnym sub layoutów.
Informacje zwracane w pliku JSON, są tablicą asocjacyjną, gdzie klucz odpowiada identyfikatorowi sub layoutu, a wartość to treść atrybutu name
zdefiniowanego w sub layoucie. Dodatkowo może zawierać, jeżeli parametr includeAuthor
jest true
, wartość atrybutu author
zawarta w definicji sub layoutu, lub wartość definicji atrybutu author
w głównej sekcji pliku konfiguracyjnego.
Do skryptu można przekazywać parametry. Aby to uczynić, należy po zainicjowaniu nowej instancji AtasciiGen
ale przed wygenerowanie ekranu dodać do zmiennej tablicowej params
instanji wartości, np.
// make new instance
$gen=new AtasciGen("config.json");
// add parameters
$gen->params[]="ATARI";
$gen->params[]="RULEZ";
$gen->params[]="AND BASTA";
// generate screen
$gen->generate();
W powyższym przykładzie, parametry będą dostępne dla pliku konfiguracyjnego pod nazwami %0
, %1
,%2
.
Mozna używać asocjacji, celem czytelniejszego oznaczenia parametrów, np.
// make new instance
$gen=new AtasciGen("config.json");
// add parameters
$gen->params["line1"]="ATARI";
$gen->params["line2"]="RULEZ";
$gen->params["line3"]="AND BASTA";
// generate screen
$gen->generate();
W takim przypadku, parametry będą dostępne pod nazwami line1
,line2
,line3
.
TODO
Chciałem tu szczególnie podziękować osobom które wspierały ten projekt. Bez nich, prawdopodobnie nic by z niego nie było.
Twórca serwisu High Score Cafe. Cierpliwie wdraża każdą moją aktualizację. Wspiera w utrzymaniu rozszerzenia oraz podaje świetne pomysły.
Twórca serwisu AtariOnLine. Pomocna dusza ;) Udzielił dostępu do serwisu, celem utworzenia artykułu o HSC. Dostarcza nie lada emocji, widząc ciekawe rzeczy (m.in. HSC AAG) - to budujące!
Osoby niewymienione, nie powinny czuć się niedocenione. Ich komentarze są równie cenne, co wkład osób przedstawionych powyżej :)