Update readme
continuous-integration/drone/push Build is passing Details

This commit is contained in:
kayomn 2023-02-20 13:41:33 +00:00
parent a55fa41934
commit 2cbd8d1f31
1 changed files with 32 additions and 10 deletions

View File

@ -9,11 +9,11 @@
1. [Building](#building) 1. [Building](#building)
1. [Project Structure](#project-structure) 1. [Project Structure](#project-structure)
1. [No Headers](#no-headers) 1. [No Headers](#no-headers)
1. [All Code is Equal](#all-code-is-equal) 1. [Module Conventions](#module-conventions)
## Overview ## Overview
Ona is a straightforward game engine with the aim of staying reasonably lightweight through its Ona is a straightforward game engine with the aim of staying reasonably lightweight through a modular architecture.
Ona is also the Catalan word for "wave". Ona is also the Catalan word for "wave".
@ -27,7 +27,7 @@ Ona is also the Catalan word for "wave".
* Be lightweight in base engine memory usage and disk size. * Be lightweight in base engine memory usage and disk size.
* Provide a simple scene graph system that translates its graph nodes into a cache-friendly representation at runtime. * Provide a simple scene graph system that translates graph nodes into a cache-friendly representation at runtime.
* Provide an execution-speed optimized scripting interface through a Lua-inspired language named "Kym", with features like first-class support for common mathematic types used in rendering. * Provide an execution-speed optimized scripting interface through a Lua-inspired language named "Kym", with features like first-class support for common mathematic types used in rendering.
@ -62,12 +62,34 @@ As Ona uses C++20, it is able to make use of the new modules language feature. W
#### No Headers #### No Headers
All first-party code in the project is free of headers. Code is grouped in a module and package dichotomy, where each `.cpp` file in the root source directory represents the common package of a module grouping. A core benefit to the project, and the one which weighed most on this decision, is that all first-party code is free of header usage. Code is grouped in a module and package dichotomy, where each `.cpp` file in the root source directory represents the common package of a module grouping.
Subdirectories then build further abstractions atop these common module files. For example, the `core.cpp` source file contains many common memory manipulation and floating point mathematics utilities, which are made use of in `core/image.cpp` for modifying CPU-bound pixel data.
#### All Code is Equal
Following on from no headers necessary, declarations, template metaprogramming, and definitions all go into the same place now. A typical Ona source file mixes all of these, traditionally separate, pieces of logic together in shared `.cpp` files.
Alongside the surface-level benefit of writing having fewer lines of code, this also means there is less work necessary to maintain the codebase at large and a smaller space to create duplication errors in. Alongside the surface-level benefit of writing having fewer lines of code, this also means there is less work necessary to maintain the codebase at large and a smaller space to create duplication errors in.
#### Module Conventions
The standard is loose on how modules are named and structured, so this codebase enforces its own convention of a package-like structure.
At the source root-level, each `.cpp` file contained represents the core module of each respective library. Higher-level extensions of the core library that do not cyclically depend on each other reside within folders that share a matching name (sans the extension). For example, the `coral.cpp` source file contains many common memory manipulation and floating point mathematics utilities, which are made use of in `coral/image.cpp` for modifying CPU-bound pixel data.
Each module tries to manage a responsibility of the overall project while also not introducing too many inter-dependencies in each other.
##### Coral
Common operating system-independent memory, math, and data structure utilities for use in all other first-party library modules.
##### Oar
The (O)na (Ar)chive format; a non-compressing data bundling format optimized for quick I/O operations and resolving the problem of having free-standing asset files complicating the cross-platform application distribution process.
##### App
Operating system-abstracted interface for building graphical and headless applications.
##### Kym
Scripting language designed around an execution speed-optimized design, and features like first-class support for common mathematic types.
##### Runtime
Base execution environment for games built using Ona.