Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
CBot - użycie i zmiana licencji
#9
(01-15-2017, 02:24 PM)tomaszkax86 Wrote: Poza tym, obecna implementacja CBota wymaga przepisania. Raczej nie chciałbyś używać tego, co jest w Colobocie.
I to w zasadzie podsumowuje całą tą dyskusję Tongue

Niemniej, wbrew pozorom sam interpreter CBota nie jest już zintegrowany aż tak mocno z silnikiem samej gry, nawet część biblioteki standardowej która nie operuje bezpośrednio na obiektach w grze jest przeniesiona do katalogu interpretera właśnie po to żeby można jej było bez problemu użyć w zewnętrznych projektach.

Szybkość wykonywania programów w grze tak jak już kilka osób wspomniało jest ograniczona sztucznie nałożonym limitem instrukcji wykonywanych w jednej klatce animacji, który jest konieczny po to aby programy w CBocie nie mogły obniżać nam FPSów. W przyszłości można pomyśleć o wyciągnięciu programów w CBocie na oddzielny wątek, co pozwoliłoby programom wykonywać ewentualne bardziej skomplikowane obliczenia niezwiązane bezpośrednio ze światem gry równocześnie z renderowaniem.
Jeśli ktoś chciałby zobaczyć jak zachowuje się CBot bez tego ograniczenia, to przy włączonej kompilacji testów oprócz głównej gry dostajemy także program CBot_console który jest po prostu konsolowym interpreterem CBota, uruchamiającym program wczytany z stdin. Dostępne są praktycznie wszystkie instrukcje które nie są powiązane z grą (mamy np. operacje matematyczne i operacje na stringach, ale brakuje radar, move itd.). Źródła można znaleźć tutaj: https://github.com/colobot/colobot/blob/...onsole.cpp Jest to też wzorcowy przykład jak zaimplementować CBota do innego programu.

Jeśli chodzi o samą wygodę użycia CBota w innych zastosowaniach, to jedyną rzeczą która jest moim zdaniem dość uciążliwa na dłuższą metę jest konieczność pisania oddzielnej funkcji kompilacji do każdej instrukcji wbudowanej w język, dużo wygodniej byłoby zastąpić zwykłą deklaracją przyjmowanych argumentów i zwracanego typu. Przykład dodawania własnych funkcji do języka można znaleźć w źródłach CBot_console i w src/script/scriptfunc.cpp w źródłach głównej gry.


EDIT: Jeśli kogoś interesują konkretne wartości:

Program testowy:
Code:
extern void PrimeTest()
{
    for(int i = 0; i < 250; i++) {
        bool prime = true;
        for(int j = 2; j < i; j++) {
            if (i%j == 0) {
                prime = false;
                break;
            }
        }
        if(prime) {
            message("Prime: "+i);
        }
    }
}
  • w grze, bez zmiany ipf (przy stabilnych 60 FPS, mierzone funkcją abstime()) - 15.14 s
  • w grze, ipf=10000 (maksymalna dozwolona wartość jeśli mnie pamięć nie myli) - 0.16 s
  • w konsoli, ipf=∞ (mierzone przez time) - 0.05 s
  • ten sam program napisany w C++ - 0.003 s (ale powiedziałbym że faktycznie jest to <0.001s i to jest tylko niedokładność odliczania czasu, bo zwiększenie 250 do 1000 ani zmniejszenie do 50 nie daje zauważalnego efektu)


Messages In This Thread
CBot - użycie i zmiana licencji - by PaweX - 01-14-2017, 11:14 PM
RE: CBot - użycie i zmiana licencji - by Simbax - 01-14-2017, 11:55 PM
RE: CBot - użycie i zmiana licencji - by PaweX - 01-15-2017, 12:35 AM
RE: CBot - użycie i zmiana licencji - by Simbax - 01-15-2017, 01:16 AM
RE: CBot - użycie i zmiana licencji - by Smok - 01-15-2017, 04:19 PM
RE: CBot - użycie i zmiana licencji - by krzys_h - 01-15-2017, 04:20 PM
RE: CBot - użycie i zmiana licencji - by Simbax - 01-15-2017, 10:25 PM
RE: CBot - użycie i zmiana licencji - by PaweX - 01-17-2017, 12:49 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)