Alloy is a flexible game-engine and development kit under active development written in C++.
It is characterized by upholding a strict set of design-goals which center around maintainability and readability through proper software engineering practices. The overall goal for this project is to be a well-rounded and easy-to-use, efficient game-engine.
It is inspired by many great open-source projects that have come before it, the complete list can be seen below.
- Features
A summary of all existing features in Alloy - Components
A brief summary of all components in Alloy - API Reference
For doxygen-generated API information - Tutorials
For tutorials on how to use Alloy - Legal
Information about how to attribute this project - How to build
Detailed instructions for how to build Alloy - Design Goals
The design goals of this library - Contributing Guidelines
Guidelines that must be followed in order to contribute to the project
- Written with Modern C++ (C++17)
- Supports for
constexpr
wherever possible
- Supports for
- Designed using componentized architecture (easier reuse)
- Strong focus on readability and design
- Supports multiple render systems (in progress)
- OpenGL
- DirectX
- Vulkan
- Supports multiple audio systems (in progress)
- OpenAL
- FMOD
- Handles intersections of geometric objects
- Easily build scene graphs and skeletons
- Manages game objects using entity-component system
Alloy is designed using component-based architecture in order to promote better logical design and reusability through code-sharing.
The library and application components are detailed below:
Alloy::Core
The core library that the rest of Alloy is built off ofAlloy::IO
The library for managing all IO tasks (filesystem, network, etc)Alloy::Render
The library for managing rendering tasks, and abstracting the underlying rendering system (DX, OpenGL, etc)Alloy::Audio
The library for managing the audio tasks, and abstracting the underlying mixing system (FMOD, OpenAL, etc)Alloy::Engine
The library for managing all engine details, including subsystem initialization & coordination, entity-component management, resource management, etc.
TODO detail applications
Alloy was inspired by a variety of existing open-source projects. Some of these projects are listed below:
Note: inspired does not mean that any code was taken without following proper license attribution. It simply means that certain designs and concepts may have been adjusted to align with what other existing projects are already doing.
The following compilers are currently being tested through continuous integration with Travis and AppVeyor
Compiler | Operating System | Architectures |
---|---|---|
g++-9 | Ubuntu 18.04 | x86, x86_64 |
clang++-9 | Ubuntu 18.04 | x86, x86_64 |
clang xcode 11.3 | macOS (Latest) | x86_64 |
Visual Studio 2019 | Windows (Latest) | x86, x86_64 |
clang-cl | Windows (Latest) | x86, x86_64 |
clang++-9 | Windows (Latest) | x86, x86_64 |
Build | Status |
---|---|
Windows | |
Linux | |
macOS |
Host | Release |
---|---|
Github | |
Conan |
Alloy is licensed under the MIT License:
Copyright © 2018 Matthew Rodusek
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.