Witam, dzisiaj postanowiłem uporządkować mój kod.
Niestety nie mam pomysłu, jak powinien on wyglądać, więc proszę o pomoc.
Chcę żeby był czytelny i podzielony na komponenty. (dla mniejszych rozmiarów poszczególnych plików)
Na razie zrobiłem coś takiego:
PROJECT:
|
|- PROJECT.cbp
|- main.cpp
|- game.cpp
|- game.h
|- components.h
|- components:
|
|- display.cpp
|- display.h
|- camera.cpp
|- camera.h
|- tools:
|
|- VECTOR3.cpp
|- VECTOR3.h
|- FPS_COUNTER.cpp
|- FPS_COUNTER.h
main() tworzy obiekt game i uruchamia go używając Game::RunGame().
Klasa Game ma enum *Game::GameState gameState" i konstruktor wywołujący funkcjię Game::Init() inicjalizującą GLFW, tworzącą okno, ustawiającą Game::gameState i wywołującą pierwszy raz funkcję Reshape(). (zawartą w pliku components\display.cpp [extern void Reshape(); w display.h])
Wszystkie Game:: są rozwinięte w pliku game.cpp.
Game::RunGame() ma pętlę while(gameState != END), która wywołuje odpowiednie funkcje w zależności od aktualnego stanu Game::gameState.
switch(gameState)
{
case GAME_MENU: //jeszcze nie zaimplementowane
Menu();
case SINGLEPLAYER:
SinglePlayer();
break;
default:
break;
}
Dalej Game::SinglePlayer tworzy obiekt engine i uruchamia go, używając Engine::RunEngine().
Klasa Engine jest zadeklarowana w game.h i rozwinięta w game.cpp.
Funkcje Game::Menu i Engine::RunEngine mają w sobie aktualnie wykonywane czynności.
void Engine::RunEngine()
{
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); //ukrywa kursor
glfwSetKeyCallback(window, CALLBACK_KEYBOARD_GAME); //ustawia CALLBACK_KEYBOARD_GAME jako keyboard callback (dla funkcji *Game::Menu()* będą oddzielne funkcje CALLBACK)
glfwSetCursorPosCallback(window, CALLBACK_MOUSE_MOTION_GAME); //ruch kamery przy ruchu myszki (callback)
DWORD updateTimer = GetTickCount(); //zegar dla pętli gry
int skip = 0; /składnik pętli
while(!glfwWindowShouldClose(window)) //początek pętli (trzeba jeszcze dodać odpowiedni warunek dla opuszczenia gry do menu)
{
skip = 0; //składnik pętli
while(GetTickCount() > updateTimer && skip < MAX_FRAMESKIP) //składnik pętli
{
updateTimer += SKIP_TICKS; //składnik pętli
skip++; //składnik pętli
}
Display(); //funkcja *Display()* zawarta w components\display.h i rozwinięta w .cpp (```extern void Display();``` w *components\display.h*)
glfwSwapBuffers(window); //zamiana buforów
glfwPollEvents(); //łapanie eventów przez GLFW
}
}
Czy oddzielanie funkcji do oddzielnych plików z użyciem extern to dobra praktyka?
Czy powinienem pisać #include <...> w plikach .h?
Jak dodać do pliku .cpp za pomocą #include plik .h z nadrzędnego folderu pliku .cpp? Czy do tego przyda się .. ?
Załączam projekt. Nie mam czasu na wrzucanie go na github.