Skip to content

Latest commit

 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GicaEngineV3

Static Badge Static Badge

Sta je GicaEngine V3?

GicaEngine V3 je game engine napisan u C++.

Sadrzaj

Funkcije

  • GUI sa ImGui
  • Ucitavanje .obj modela (i to sa sopstvenim parser-om)
  • Ucitavanje tekstura
  • UI elementi u igrici (za sad dugmici i tekst)
  • Kompajliranje igrice
  • Opcije da se projekat sacuva i pokrene
  • Svetla (za sad samo pointlight)
  • Fizika, koristeci PhysX
  • Vise kamera

Kompajliranje (proces)

Tokom kompilacije, program ce automatski generisati GameMain.cpp kod koji ima sve funkcije potrebne za igricu. Program ce takodje sve modele i teksture kompresovati u jedan fajl, main.rpf. GameMain.cpp ce main.rpf automatski dekompresovati i drzati u memoriji, tako da izvlacenje modela i tekstura iz igrice skoro nemoguce (ukoliko ne znas strukturu fajla). Main.rpf sadrzi XML fajl koji sadrzi sve informacije o sceni. GameMain.cpp moze se izmeniti, ali glavni su OnInit i OnUpdate funkcije. GameMain.cpp takodje sadrzi i neophodne funkcije za dobijanje modela, tekstura, svetala, UI elemenata, itd. kako bi ih menjali. Krajnji projekat bice u "out" folderu, gde je potrebno pokrenuti build.bat fajl ponovo, i igrica ce biti u "build" folderu. U demonstraciji moze se videti vise o tome.

Demonstracija

UI

image

Ucitavanje modela

demo_1_4

Ucitavanje tekstura

demo_2_4

Dodavanje svetla (za sada samo pointlight)

demo_3_4

Kamera (FOV)

demo_4_4

Pomeranje i rotiranje modela u sceni

demo_5_4

Svetla, pozicija i boja, intenzitet i precnik

demo_6_4

Igrica (da, cela igrica)

demo_7_4

GameMain.cpp sam programirao za kontrolisanje bureta i padanje kutije, sve u OnUpdate() funkciji. Naravno, fizika ovde nije ukljucena

Fizika i programiranje koda pomocu ugradjenih funkcija

demo_8_4

Ovde sam takodje isprogramirao svetlo u OnUpdate() funkciji.

I tako dalje (mrzi me dalje da snimam :P)

GameMain.cpp i funkcije

Glavne funkcije

OnUpdate(): Ovde stoji kod koji ce se pokrenuti svaki frame.

OnInit(): Ovde stoji kod koji ce se pokrenuti na pocetku igrice.

"API": Ne postoji pravi API, ali postoje funkcije u samom kodu:

Za dobijanje modela:

int getModel(std::string name)
{
    for(int i = 0; i < g_models.size(); ++i)
    {
        if(g_models[i].name == name)
            return i;
    }
    return -1;
}

Primer (catcher igrica):

    int boxIndex = getModel("Box");
    if(score < 7)
        g_models[boxIndex].position.y -= 0.01f;

U primeru kako bi promenili poziciju, rotaciju, teksturu, itd. nekog modela, potreban je njegov index. A index se dobije pomocu funkcije getModel. Sve sto treba da znate jeste ime modela, u mom slucaju "Box". Nakon toga mozete menjati svojstva modela pomocu g_models[index].

Slicno je i za dobijanje UI elemenata:

int getUIElement(std::string name)
{
    for(int i = 0; i < uiElements.size(); ++i)
    {
        if(uiElements[i]->name == name)
            return i;
    }
    return -1;
}

Primer (catcher igrica):

    int scoreLabel = getUIElement("ScoreLabel");
    std::string scoreText = "Score: " + std::to_string(score);
    static_cast<UILabel*>(uiElements[scoreLabel].get())->text = scoreText; 

U primeru se promeni tekst UI elementa "ScoreLabel".

Isto radi, isti je princip kao i getModel() funkcija.

Za pointlight:

int getPointLight(std::string name)
{
    for(int i = 0; i < plNames.size(); ++i)
    {
        if(plNames[i] == name)
            return i;
    }
    return -1;
}

Primer (kao i u primeru sa kutijom):

    int box_light_i = getPointLight("Point Light");
    static int dir = -1;
    float limit = 2.0f;
    float step = 0.001f;

    pointLights[box_light_i].position.x += step * dir;

    if(pointLights[box_light_i].position.x <= -limit || pointLights[box_light_i].position.x >= limit)
        dir *= -1;

Ovaj kod svaki frame (OnUpdate) menja poziciju svetla "Point Light" za step.

Isto radi, isti je princip.

Kako kompajlirati?

Prosto pokreni build_msvc.bat fajl i sve ce se odraditi samo. Nastace novi folder, "build". Unutar njega, "Release", i tu ce biti GameMain.exe i main.rpf. Takodje, potrebne su sledece biblioteke kompajlirane samostalno uz pomoc Visual Studia:

Takodje imate i kompajliran program u Releases

About

Game engine

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages