NOTE: Project for personal educational purposes.
- CLI application
- Ncurses library (wide character support)
- ECS: Entity, Component, Systems
- Makefile 1
- Complete documenatation (with uml diagrams for a fast overview)
- The Game engine is not a library 2
- Simple battleship game made with the engine
- Custom logger and assetrions
- TODO: custom allocator
- Main loop single threaded and frame limited
- Linux
- Make
- Minimal terminal size:
$\approx>$ 130 x 50 blocks
In most distro Ncurses
is installed by default, otherwise you need to install the library. Check also if Ncursesw
for wide character support is present.
NOTE: Note on log file:
- it is raccomanded to open the log file with therminal program like
less
,cat
, etc...- in
.bashrc
, or.zshrc
, or whatever you have, addexport CLICOLOR=TRUE
if colors are not displayed.
- To build locally the project, in base project folder:
make build
- Run:
./build/main
- Clean:
make clean
The main compiling flags used are:
- Ncurses:
-lncurses
- For wide character support:
-lncursesw
- For wide character support:
- In some cases the ncurses library is split in this other library:
-ltinfo
(use this flag if the compiler give an error on undefined reference tostdscr
)- For wide character support:
-ltinfow
- For wide character support:
- Debugging:
-g
,-Wall
- before component class name
C..
, es:CSprite
,CBox
, ... - before component instatiation of class
c...
, es:cSprite
, ... - this two roule are the same with systems with
s
- Components: store only pure data, no logic
- Systems are function or classes
- Systems operate on entities that have some precise component
- Input
- Movement
- Physics
- AI
- Renderer
- sructs name: small letters with maiusc letter to separate
- enum name, enum value: maiusc name with
_
as separator - variable and function name use maiusc character as separator: es:
gameEngine
,modGravityExp
,veryLongVariable
... - private data member start with
m_
ands_
for static
No particular order:
Multi scene managmentAction managmentGame loopAdd custm loggerAdd custom assertions- Add custom memory allocator
Assets managmentRiorganizzare l'ordine nelle cartelle del progetto- Ricontrollare le incluzioni negli header file
Cambiare il vettore di shared pointer di entity in altro (vettore di puntatori normali?)Implementare la rimozione delle entità nell'entity managerAdd wide character compatibility for ncurses- Implementare la prima scena di un menu
- implementare la scena di gioco
- Implementare la logica di gioco
- Implementare la scena pausa
- spostare tutte le definizioni degli enum nei corrispettivi header file ???
rinominare la classescenaBase
inscene
- Add licence to the repository
- custom memory allocator, array?, vector, math, phisics library
- all the systems
- implements grapics api
- separare il core engine dai sistemi e dal source code del gioco
- Collisiion detection with a grid of detection (for close distance collision) like in the particle simulations programs
- for each entity, texture, world map, landscape, animations, lightining, sounds, particle system, AI systems, ..., objects create a fictitious preview (fast to render) to fast test this object while they are being constructed (coded)
- Separete the game engime static code from the compilation code of the game
- math and physiscs library
- documentations (online, pdf, linux manpage, windows??, AI chatbot?)
- Vulkan API, wayland? X11?
- tools nvim (vscode?) plugin