89 lines
3.1 KiB
Markdown
89 lines
3.1 KiB
Markdown
# Ona
|
|
|
|

|
|
|
|
## Table of Contents
|
|
|
|
1. [Overview](#overview)
|
|
1. [Goals](#goals)
|
|
1. [Technical Details](#technical-details)
|
|
1. [Requirements](#requirements)
|
|
1. [Building](#building)
|
|
1. [Packaging](#packaging)
|
|
|
|
## Overview
|
|
|
|
Ona is the Catalan word for "wave".
|
|
|
|
Ona is also a straightforward game engine with the aim of staying reasonably lightweight through a modular architecture.
|
|
|
|
## Goals
|
|
|
|
* Fully-featured two-dimensional raster and vector rendering capabilities.
|
|
|
|
* Support major computer gaming ecosystems; Namely Microsoft Windows, SteamOS, Unix-like systems, and the web.
|
|
|
|
* Minimize external dependencies.
|
|
|
|
* Provide utilities for handling rendering but otherwise leave the higher-level game logic and data structuring to the programmer.
|
|
|
|
* Enforce an architecture that makes non-interdependent logic trivially parallelizable.
|
|
|
|
## Technical Details
|
|
|
|
### Requirements
|
|
|
|
Ona currently depends the following third-party tools to build it:
|
|
|
|
* Platform support for SDL2 at version 2.0.20 installed via the standard shared binary format redistributable.
|
|
* Zig compiler toolchain.
|
|
|
|
As the project evolves, dependencies on libraries external to the project codebase will be minimized or removed outright to meet the goals of the project as closely as possible.
|
|
|
|
### Building
|
|
|
|
Running the `zig build` command will build the everything. To learn how to consume the project as a library, see the [packaging](#packaging) section.
|
|
|
|
For simple experimentation without creating a standalone Zig project, new demos may be freely created within the `src/demos` folder; The build script will automatically detect them and `zig build demos` step will automatically (re)build it along with everything else.
|
|
|
|
The unit testing suite for the engine modules may be built and ran via `zig build tests`.
|
|
|
|
### Packaging
|
|
|
|
To reduce the amount of setup work, a [project template is provided](https://sauce.pizzawednes.day/kayomn/ona-template) that will open a window and show the default texture on the middle of the screen. If you decide to use this project, the steps below can be skipped.
|
|
|
|
1. Create a new Zig project if you have not already.
|
|
2. Create a `build.zig.zon` accompanying your `build.zig` if you do not already have one.
|
|
3. Your `build.zig.zon` should, at minimum, contain the following dependency listed in the dependencies section:
|
|
|
|
```zig
|
|
.{
|
|
.dependencies = .{
|
|
.ona = .{ .path = "path/to/ona/repo" },
|
|
},
|
|
}
|
|
```
|
|
|
|
4. Add a package declaration for Ona to your `build.zig` and add the relevant modules to your application.
|
|
|
|
```zig
|
|
const ona_dependency = b.dependency("ona", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
|
|
const app = b.addExecutable(.{
|
|
.name = "My Ona App",
|
|
.target = target,
|
|
.optimize = optimize,
|
|
.root_source_file = b.path("src/main.zig"),
|
|
});
|
|
|
|
app.root_module.addImport("ona", ona_dependency.module("ona"));
|
|
app.root_module.addImport("coral", ona_dependency.module("coral"));
|
|
b.installArtifact(app);
|
|
```
|
|
|
|
5. Create a `main.zig` containing a valid Ona app declaration.
|
|
6. Run `zig build` to build your new game application.
|