AGE VFS

Ostatnio do AGE dodałem obsługę wirtualnego systemu plików. Zainspirował mnie artykuł Tomasza Dąbrowskiego: http://dabroz.scythe.pl/2008/07/17/wirtualny-system-plikow-vfs .

O ile funkcjonalność jaką oferuje ten „VFS” można podpiąć pod wirtualny system plików. Tak na prawdę chodziło raczej o wrzucenie danych plików do jednego wielkiego pliku. Ogromną zaletą rozwiązań przedstawionych w artykule jest szybkość działania. Potraktowanie nazw plików funkcją hashującą wpływa mocno na prędkość wyszukiwania i dodatkowo sprawia, że wpis w hash-table dla każdego pliku ma taki sam rozmiar. To z kolei pozwala łatwiej stworzyć takie pliki VFS bo nie trzeba zapisywać nazw plików zawartych wewnątrz.

Tutaj jednak pojawia się problem. Nie powoduje on wielkich problemów, ale jednak istnieje i może stać się uciążliwy – z takiego pliku z danymi nie da sie odczytać nazw plików (bo są tam tylko hashe), a to jest pewien problem, jeśli programista pracujący nad projektem zapomni co wrzucił do pliku.

Można ten problem rozwiązać na dwa sposoby:

  1. Dodać na końcu pliku tablicę nazw plików, a na początku informację, gdzie jest nazwa każdego pliku
  2. Utworzyć w programie generującym pliki VFS możliwość zapisu projektu

Rozwiązanie pierwsze pozwala na podgląd jakie pliki są zapisane w systemie, a to z kolei pozwala na ich łatwy eksport z pliku.

Drugie zaś pozostawia plik systemu plików „niedostępnym” oraz pozwala na modyfikowanie systemu plików po prostu przez stworzenie go od nowa z nowymi plikami.

Ja postanowiłem wybrać drugie rozwiązanie i napisałem program AGE-VFS. Narzędzie napisane jest z pomocą wxWidgets więc powinno kompilować się też pod Linuxem (co sprawdzę w pszyszłości 😉 ).

Ostatnią fażą dodawania do AGE wirtualnego systemu plików było oczywiście dodanie klas obsługujących wczytywanie i wyszukiwanie danych w pliku. To jednak okazało się być mało pracochłonne.

Ostatecznie postanowiłem sprawdzić jak działa VFS i wczytać jakiegoś WAVe’a. Szybko okazało się, że w moim programie do tworzenia VFS był mały błąd, który skutecznie psuł tworzone pliki 😉 Naprawiłem go jednak i w końcu mogę powiedzieć, że AGE potrafi obsługiwać bardzo prosty system plików (o ile można go tak nazwać…)

Particle System: rekultywacja ;)

Jako że w internecie nie ma nic konkretnego na temat Particle Systemów – postanowiłem zajrzeć do źródeł Irrlichta (tam jest aż za nadto konkretnie 😛 ). Pooglądałem sobie to tak przez 5 minut wczoraj i dzisiaj rano już wpadł mi do głowy pomysł jak można to rozwiązać. Ciężko powiedzieć, że jest on innowacyjny bo opiera się mocno na tym z Irrlichta, ale ważne że działa 😉

Postanowiłem stworzyć klasę ageParticleEmitter, która zajmuje się jedynie ustawianiem cząsteczek w pozycji początkowej i ustawianiem długości ich życia. ageParticleSystem przyjmuje wskaźnik do klasy bazowej emitera, a to daje możliwość definiowania niestandardowych (box i point) emiterów. Na przykład parabolicznych lub liniowych:

Chcę jeszcze napisać ageParticleAffector dzięki czemu będzie można kontrolować zachowanie cząsteczek przez stworzenie odpowiedniej sub-klasy.

Rozwiązania, o których napisałem nie są niczym niesamowitym, ale dzięki ich zastosowaniu można stworzyć niesamowite efekty 🙂

Particle System

Staram się znaleźć coś na temat programowania Particle Systemu. Chciałem poznać jakieś utarte ścieżki, żeby nie odkrywać koła na nowo i co znalazłem? Nic! Każdy artykuł opisuje Particle System w inny sposób co prowadzi do różnej implementacji.

Wygląda na to że będę musiał odkryć jednak koło na nowo. No trudno.