This shows you the differences between two versions of the page.
egc:teme:2021:02 [2021/11/22 00:26] alexandru.gradinaru |
egc:teme:2021:02 [2021/12/08 14:51] (current) andrei.lambru |
||
---|---|---|---|
Line 30: | Line 30: | ||
* 2 - un inamic | * 2 - un inamic | ||
- | **Jucătorul** va fi poziționat inițial la o poziție aleatoare validă (pe o celulă ce reprezintă un drum liber). | + | **Jucătorul** va fi poziționat inițial la o poziție aleatoare validă (pe o celulă ce reprezintă un drum liber) si se poate deplasa doar pe drumuri libere, in rest fiind blocat de coliziuni. |
+ | |||
+ | **Update clarificare**: Labirintul trebuie sa fie diferit intre doua rulari. | ||
+ | |||
+ | <note tip>Coliziunile nu trebuie sa fie perfecte, se pot aproxima prin dreptunghiuri sau sfere. Mai multe informatii despre coliziuni si cum se pot implementa in 3D: | ||
+ | * [[https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection]] | ||
+ | </note> | ||
Labirintul puteți să îl generați cu ce dimensiuni doriți și în ce mod doriți cu condiția să existe cel puțin o ieșire din labirint conectată la calea pe care se află jucătorul. | Labirintul puteți să îl generați cu ce dimensiuni doriți și în ce mod doriți cu condiția să existe cel puțin o ieșire din labirint conectată la calea pe care se află jucătorul. | ||
Line 58: | Line 65: | ||
== Coliziune cu proiectilul == | == Coliziune cu proiectilul == | ||
- | Jucatorul are posibilitatea sa lanseze proiectile spre inamici. Atunci cand acestea lovesc, inamicul respectiv va suferi o deformare realizata in Vertex Shader (vertex displacement), iar apoi va disparea. Jucatorul va putea astfel sa-si continue drumul. Deformarea pe care inamicii o sufera trebuie sa produca o modificare in geometria obiectului si nu doar o simpla transformare de rotatie/scalare/translatie. | + | Jucatorul are posibilitatea sa lanseze proiectile spre inamici. Atunci cand acestea lovesc, inamicul respectiv va suferi o animatie de deformare realizata in Vertex Shader (vertex displacement), iar apoi va disparea. Jucatorul va putea astfel sa-si continue drumul. Deformarea pe care inamicii o sufera trebuie sa produca o modificare in geometria obiectului si nu doar o simpla transformare de rotatie/scalare/translatie. |
Pentru deformarea primitivelor ce compun inamicii, puteți să aplicați de exemplu o funcție de zgomot pe direcția normalelor vârfurilor (exemplu în imaginea de mai jos). Animația de deformare va înceta dupa cateva secunde. | Pentru deformarea primitivelor ce compun inamicii, puteți să aplicați de exemplu o funcție de zgomot pe direcția normalelor vârfurilor (exemplu în imaginea de mai jos). Animația de deformare va înceta dupa cateva secunde. | ||
- | {{ :egc:teme:2020:skyroads_deformare.png?nolink&300 |}} | + | {{ :egc:teme:2021:tema2-displacement.png?500 | }} |
- | |||
- | Legendă: | ||
- | * n = normala la suprafață a vârfului | ||
- | * p = poziția inițială a vârfului | ||
- | * p’ = poziția finală a vârfului | ||
- | * d = distanța de deformare (diferită pentru fiecare vârf) | ||
- | |||
- | Exemple de deformări (nu este necesara colorarea): | ||
- | |||
- | {{ :egc:teme:2020:skyroads_deformare_exemple.png?nolink&300 |}} | ||
- | |||
- | <note tip>Mai multe informatii despre coliziuni si cum se pot implementa in 3D: | ||
- | * [[https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection]] | ||
- | </note> | ||
=== HUD === | === HUD === | ||
- | Pe langa lumea inconjuratoare, trebuie sa desenati si un HUD (heads-up display). Aceste elemente trebuie sa fie proiectate ortografic si va contine cel putin 2 elemente care apar intotdeauna pe ecranul jucatorului in aceeasi pozitie, ca element de interfata grafica: | + | Pe langa lumea inconjuratoare, trebuie sa desenati si un HUD (heads-up display). Elementele de HUD trebuie sa fie proiectate ortografic. Este necesar sa aveti cel putin 2 elemente care apar intotdeauna pe ecranul jucatorului in aceeasi pozitie, ca elemente de interfata grafica: |
* **Viață**: Viata este indicata sub forma unui healthbar prin 2 dreptunghiuri, unul wireframe altul solid (vezi tema 1). | * **Viață**: Viata este indicata sub forma unui healthbar prin 2 dreptunghiuri, unul wireframe altul solid (vezi tema 1). | ||
* **Timpul ramas**: Timpul ramas este indicat printr-o a doua bara de stare, in mod similar cu bara de viata. | * **Timpul ramas**: Timpul ramas este indicat printr-o a doua bara de stare, in mod similar cu bara de viata. | ||
- | <note tip>Implementare este la latitudinea voastra: puteti folosi un viewport separat, puteti "grupa" elementele de HUD cu jucatorul, sau orice alte variante.</note> | + | <note tip>Implementarea este la latitudinea voastra: puteti folosi un viewport separat, puteti "grupa" elementele de HUD cu jucatorul, sau orice alte variante.</note> |
=== Gameplay/Detalii de implementare === | === Gameplay/Detalii de implementare === | ||
- | Scopul jocului este ca jucatorul sa iasa cu succes din labirint. | + | Scopul jocului este ca jucatorul sa iasa cu succes din labirint intr-un timp limita. |
Asa cum s-a precizat mai sus, exista celule cu inamici care se deplaseaza incontinuu in interiorul acestor celule. De fiecare data cand jucatorul este atins de un inamic, acesta pierde din viata. Inamicul trebuie sa fie suficient de mare si/sau sa mearga suficient de rapid pentru a nu permite jucatorului sa il ocoleasca (usor), astfel acesta fiind nevoit sa traga in inamic. | Asa cum s-a precizat mai sus, exista celule cu inamici care se deplaseaza incontinuu in interiorul acestor celule. De fiecare data cand jucatorul este atins de un inamic, acesta pierde din viata. Inamicul trebuie sa fie suficient de mare si/sau sa mearga suficient de rapid pentru a nu permite jucatorului sa il ocoleasca (usor), astfel acesta fiind nevoit sa traga in inamic. | ||
Line 99: | Line 92: | ||
Toate animatiile trebuie sa fie independente de timpul de procesare al unui cadru. | Toate animatiile trebuie sa fie independente de timpul de procesare al unui cadru. | ||
+ | |||
+ | === Exemple de functionalitati bonus === | ||
+ | |||
+ | * HUD complex - de ex cu Minimap, Skills etc. | ||
+ | * Animarea avatarului de personaj | ||
+ | * Animarea mai avansata a inamicilor in vertex shader prin colorare si displacement complex | ||
+ | * Pick-up bonuses sau skill system cu mecanica de cooldown sau boost (modificarea proiectilelor, tragerea cu mai multe proiectile odata, health recovery, saritura (bolta) peste inamic cu o tasta etc.) | ||
+ | * Scene complexe | ||
+ | * Labirint care sa isi schimbe configuratia in timpul jocului (se misca, regenereaza configuratia din timp in timp) | ||
+ | * Schimbare culoare inamic in functie de viata ramasa | ||
+ | * Inamici inteligenti care urmaresc jucatorul dupa ce intra in patratul lor | ||
+ | * Boss fight (de ex o celula cu inamici de diverse tipuri, si un inamic mai 'capabil') | ||
+ | |||
=== Functionalitati obligatorii === | === Functionalitati obligatorii === | ||
Line 131: | Line 137: | ||
Tema va fi implementata in OpenGL si C++. Este indicat sa folositi framework-ul si Visual Studio. | Tema va fi implementata in OpenGL si C++. Este indicat sa folositi framework-ul si Visual Studio. | ||
- | Pentru implementarea temei, in folderul __**src/lab_m1**__ puteti crea un nou folder, de exemplu Tema1, cu fisierele Tema1.cpp si Tema1.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul lab_m1 si selectati Add->New Filter. Dupa ce creati un nou filtru, de exemplu Tema1, dati click dreapta si selectati Add->Existing Item. Astfel adaugati toate fisierele din folderul nou creat. | + | Pentru implementarea temei, in folderul __**src/lab_m1**__ puteti crea un nou folder, de exemplu Tema2, cu fisierele Tema2.cpp si Tema2.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul lab_m1 si selectati Add->New Filter. Dupa ce creati un nou filtru, de exemplu Tema2, dati click dreapta si selectati Add->Existing Item. Astfel adaugati toate fisierele din folderul nou creat. |
- | In fisierul lab_list.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include "lab_m1/Tema1/Tema1.h" | + | In fisierul lab_list.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include "lab_m1/Tema2/Tema2.h" |
=== Arhivarea proiectului === | === Arhivarea proiectului === | ||
Line 146: | Line 152: | ||
=== Deadline tema === | === Deadline tema === | ||
- | 12 decembrie ora 23:59 | + | 17 decembrie ora 23:59 |
=== Responsabili tema === | === Responsabili tema === |