Skip to content

Commit a8071c0

Browse files
committed
[Release] Prepare 0.6.0
1 parent ae545d5 commit a8071c0

108 files changed

Lines changed: 3536 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
# Changelog
2+
## v0.6.0 - 2025-11-29
3+
### 🐞 Fixes
4+
- [Patch] Set game scene callbacks (f72571d…)
5+
- [Patch] Added input system extensions (b3d0f8c…)
6+
- [Patch] Implemented Builder DSL (c57162f…)
7+
- [Patch] Modified the DSL (7883912…)
8+
- [Patch] Added onStart event (1f43692…)
9+
- [Patch] Added DSL for input key (d8a3e38…)
10+
- [Patch] Added basic math operations to DSL (3c0d931…)
11+
- [Patch] Implemented DSL custom Actions (9bfd422…)
12+
- [Patch] Added usc examples for reference (b0eaef8…)
13+
- [Patch] Cleaning up dsl (2006b4e…)
14+
- [Patch] added support for onStart to the scripting system (feaf6a8…)
15+
- [Patch] Added steering funcs to script (b8250fc…)
16+
- [Patch] Added scenes and scripts to loading system (81a6ff7…)
17+
- [Patch] Implemented function to load scripts (41311a7…)
18+
- [Patch] Made scripts codable so they can be serialized (f8a07e9…)
19+
- [Patch] Added helper function to usc (fbdc7d1…)
20+
- [Patch] Initialized systems in build templates (e015832…)
21+
- [Patch] Improved scripting system. added tests (8ad8e82…)
22+
- [Patch] formatted the engine (887747f…)
23+
- [Patch] commented out wait and loop in the USC (d017b32…)
24+
- [Patch] Added script api for camera and unit tests (0e47c7e…)
25+
- [Patch] added clear function to log console (14c5396…)
26+
### 📚 Docs
27+
- [Docs] Updated docs with scripting instruction (e26a9f1…)
28+
- [Docs] Add collision system not yet implemented message (ae545d5…)
29+
### 🚀 Features
30+
- [Feature] Implemented Untold Script Core (4c1b891…)
31+
- [Feature] Initial implementation of building system (bc0335b…)
32+
- [Feature] Supports multiple scripts (dcb9fbc…)
33+
## v0.5.0 - 2025-11-18
234
## v0.5.0 - 2025-11-18
335
### 🐞 Fixes
436
- [Patch] Fix the play scene and load game function (686baf6…)

docs/Scripting/USC_Scripting_API.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
---
2+
id: usc-scripting-api
3+
title: USC Scripting API Reference
4+
sidebar_label: API Reference
5+
sidebar_position: 3
6+
---
7+
18
# Untold Engine – USC Scripting API Reference
29

310
USC (Untold Script Core) is the scripting system inside the Untold Engine.

docs/Scripting/USC_Scripting_QuickStart.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
---
2+
id: usc-scripting-quickstart
3+
title: USC Scripting Quick Start Tutorial
4+
sidebar_label: Quick Start
5+
sidebar_position: 2
6+
---
7+
18
# USC Scripting Quick Start Tutorial
29

310
This tutorial will walk you through creating your first script in the Untold Engine, from setup to testing in Play mode.

docs/Scripting/USC_Scripting_workflow.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
---
2+
id: usc-scripting-workflow
3+
title: Script Workflow Integration
4+
sidebar_label: Workflow
5+
sidebar_position: 1
6+
---
7+
18
# Script Workflow Integration
29

310
## Overview
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
---
2+
id: contributorguidelines
3+
title: Contributor Guidelines
4+
sidebar_position: 1
5+
---
6+
7+
# Contributing Guidelines
8+
9+
Thank you for your interest in contributing!
10+
11+
The vision for Untold Engine is to continually shape a 3D engine that is **stable, performant and developer-friendly**.
12+
As maintainer, my focus is on **performance, testing, quality control, and API design**.
13+
Contributors are encouraged to expand features, fix bugs, improve documentation, and enhance usability — always keeping the vision in mind.
14+
15+
---
16+
17+
## Maintainer Responsibilities
18+
19+
The Untold Engine is guided by a clear vision: To be a stable, performant, and developer-friendly 3D engine that empowers creativity, removes friction, and makes game development feel effortless.
20+
21+
## Guiding Principles
22+
23+
To achieve this vision, we follow these principles:
24+
25+
- The engine strives to remain stable and crash-free.
26+
- The codebase is backed by unit tests.
27+
- We profile continuously to prevent regressions (visual and performance).
28+
- The API must remain clear and user-friendly.
29+
- We always think about the developer first—removing friction so they can focus on their games.
30+
31+
As the maintainer, my primary focus is to ensure the project stays true to this vision.
32+
33+
### What I Focus On
34+
- **Performance** → keeping the renderer and systems lean, efficient, and optimized for Apple hardware.
35+
- **Testing & Stability** → maintaining a reliable codebase with proper testing practices.
36+
- **Quality Control** → reviewing PRs for clarity, readability, and adherence to coding standards.
37+
- **API Design** → ensuring that the engine’s API remains logical, intuitive, and consistent.
38+
39+
### What Contributors Are Encouraged to Focus On
40+
- **Features** → adding or improving systems, tools, and workflows.
41+
- **Bug Fixes** → addressing open issues and fixing edge cases.
42+
- **Documentation** → clarifying how things work and providing examples.
43+
- **Editor & Usability** → enhancing the UI, workflows, and overall developer experience.
44+
45+
### Decision Making
46+
All contributions are welcome, but acceptance will be guided by the project’s vision and the priorities above.
47+
PRs that align with clarity, performance, or creativity — while keeping the engine stable and simple — are more likely to be accepted.
48+
49+
These guidelines aren’t here to block you, but to make sure every contribution keeps the engine stable, clear, and useful for everyone.
50+
51+
## Pull Request Guidelines
52+
53+
- **One feature or bug fix per PR**
54+
Each Pull Request should focus on a single feature, bug fix, or documentation improvement.
55+
This keeps the history clean and makes it easier to track down issues later.
56+
57+
- **Commit hygiene**
58+
- Keep commits meaningful (avoid "misc changes" or "fix stuff").
59+
- Squash commits if needed, but do not mix unrelated features in the same commit.
60+
- If your PR touches multiple files, make sure they all relate to the same feature or fix.
61+
62+
✅ Example:
63+
- Good: *“Add PhysicsSystem with gravity integration”*
64+
- Bad: *“Added PhysicsSystem + fixed rendering bug + updated docs”*
65+
66+
---
67+
68+
## Required Contributions for New System Support
69+
70+
For **new systems or major features**, your PR must include:
71+
72+
- **Unit Tests** → Validate functionality and cover edge cases.
73+
- **How-To Guide** → A step-by-step markdown guide explaining how to use the system.
74+
75+
This ensures new features are stable, documented, and accessible to all users.
76+
77+
👉 Note: For small fixes or incremental features, a How-To is not required.
78+
79+
---
80+
81+
### How-To Guide Format
82+
83+
Your guide must follow this structure:
84+
85+
1. Introduction
86+
87+
- Briefly explain the feature and its purpose.
88+
- Describe what problem it solves or what value it adds.
89+
90+
2. Why Use It
91+
92+
- Provide real-world examples or scenarios where the feature is useful.
93+
- Explain the benefits of using the feature in these contexts.
94+
95+
3. Step-by-Step Implementation
96+
97+
- Break down the setup process into clear, actionable steps.
98+
- Include well-commented code snippets for each step.
99+
100+
4. What Happens Behind the Scenes
101+
102+
- Provide technical insights into how the system works internally (if relevant).
103+
- Explain any significant impacts on performance or functionality.
104+
105+
5. Tips and Best Practices
106+
107+
- Share advice for effective usage.
108+
- Highlight common pitfalls and how to avoid them.
109+
110+
6. Running the Feature
111+
112+
- Explain how to test or interact with the feature after setup.
113+
114+
---
115+
116+
### Additional Notes
117+
118+
---
119+
120+
## Questions & Discussions
121+
122+
To keep communication clear and accessible for everyone:
123+
124+
- 💡 Use **[GitHub Discussions](https://github.com/untoldengine/UntoldEngine/discussions)** for feature proposals, ideas, or general questions.
125+
- 🐞 Use **[GitHub Issues](https://github.com/untoldengine/UntoldEngine/issues)** for bugs or concrete tasks that need tracking.
126+
127+
This way, conversations stay organized, visible to the community, and future contributors can benefit from past discussions.
128+
129+
---
130+
131+
Thank you for contributing to the Untold Engine! Following these guidelines will ensure that your work aligns with the project's goals and provides value to users.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
---
2+
id: formatting
3+
title: Formatting
4+
sidebar_position: 2
5+
---
6+
7+
# Formatting and Linting
8+
9+
To maintain a consistent code style across the Untold Engine repo, we use [SwiftFormat](https://github.com/nicklockwood/SwiftFormat). SwiftFormat is a code formatter for Swift that helps enforce Swift style conventions and keep the codebase clean. If you don't have SwiftFormat installed, see the **Installing SwiftFormat** section below.
10+
11+
## Quick Formatting & Linting
12+
13+
Navigate to the root directory of Untold Engine and then run the commands below:
14+
15+
### 🔍 Lint files
16+
17+
To lint (check) all Swift files without making changes:
18+
19+
```bash
20+
swiftformat --lint . --swiftversion 5.8 --reporter github-actions-log
21+
```
22+
23+
Or, using the Makefile:
24+
25+
```bash
26+
make lint
27+
```
28+
29+
This command runs the same lint configuration as our GitHub Actions workflow and pre-commit hook, ensuring consistent results locally and in CI.
30+
31+
### ✅ Formatting Files
32+
33+
To format files:
34+
35+
```bash
36+
swiftformat --swiftversion 5.8 .
37+
```
38+
39+
Alternatively, you can use the Makefile shortcut:
40+
41+
```bash
42+
make format
43+
```
44+
45+
💡 Tip
46+
If the pre-commit hook blocks your commit due to formatting issues, simply run:
47+
48+
```bash
49+
make format
50+
```
51+
52+
then re-stage your changes and try committing again.
53+
54+
You can bypass the hook temporarily (not recommended) with:
55+
56+
```bash
57+
git commit --no-verify
58+
```
59+
60+
## Installing SwiftFormat
61+
62+
The simplest way to install SwiftFormat is through the command line.
63+
64+
1. Install SwiftFormat Using Homebrew: Open the terminal and run the following command:
65+
66+
```bash
67+
brew install swiftformat
68+
```
69+
2. Verify Installation: After installation, verify that SwiftFormat is installed correctly by running:
70+
71+
```bash
72+
swiftformat --version
73+
```
74+
This should print the installed version of SwiftFormat.
75+
76+
### Using SwiftFormat
77+
78+
Format a Single File
79+
80+
To format a specific Swift file:
81+
82+
1. Open the terminal and navigate to your project directory.
83+
84+
2. Run the following command:
85+
86+
```bash
87+
swiftformat path/to/YourFile.swift
88+
```
89+
This will format YourFile.swift according to the default rules.
90+
91+
### Format Multiple Files
92+
93+
To format all Swift files in your project:
94+
95+
1. Navigate to your project directory in the terminal.
96+
97+
2. Run the following command:
98+
99+
```bash
100+
swiftformat .
101+
```
102+
103+
This will recursively format all Swift files in the current directory and its subdirectories.
104+
105+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "label": "Contributor", "position": 99, "collapsed": false }
2+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
id: versioning
3+
title: Versioning
4+
sidebar_position: 3
5+
---
6+
7+
# Versioning
8+
9+
To help us identity the purpose of your commits, make sure to use the following tags in your commit messages. The tags will also automatically increment the the current version when pushed to github.
10+
11+
- [Patch] - Bug fixes (eg. v1.0.0 -> v1.0.1)
12+
- [Feature] - For new feature that don't break compatibility (eg. v1.0.0 -> v1.1.0)
13+
- [API Change] - For major changes that are not API backward compatible (eg. v1.0.0 -> v2.0.0)
14+
15+
16+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{ "label": "Custom-Components", "position": 99, "collapsed": false }
2+
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
id: ecs-create-custom-component
3+
title: Create a Custom Component
4+
sidebar_position: 1
5+
---
6+
7+
# Create a Custom Component
8+
9+
In your game, you may want to **extend functionality to an entity**.
10+
You can do this by creating a **custom component**.
11+
12+
Components in the Untold Engine are **data-only objects** that you attach to entities.
13+
They should hold **state, not behavior**. All game logic is handled in systems.
14+
15+
Every custom component must conform to the `Component` protocol.
16+
17+
By following this design, your game stays modular:
18+
- **Components** define what an entity *is capable of*.
19+
- **Systems** define *how that capability behaves*.
20+
21+
---
22+
23+
## Minimal Template
24+
25+
Here’s an example of a simple custom component for a soccer player’s dribbling behavior:
26+
27+
```swift
28+
public class DribblinComponent: Component {
29+
public required init() {}
30+
var maxSpeed: Float = 5.0
31+
var kickSpeed: Float = 15.0
32+
var direction: simd_float3 = .zero
33+
}
34+
```
35+
36+
> ⚠️ Note: Components should not include functions or game logic. Keep them as pure data containers.
37+
38+
## Attaching a Component to an Entity
39+
40+
Once you’ve defined a component, you attach it to an entity in your scene:
41+
42+
```swift
43+
let player = createEntity(name: "player")
44+
45+
// Attach DribblinComponent to the entity
46+
registerComponent(entityId: player, componentType: DribblinComponent.self)
47+
48+
// Access and modify component data
49+
if let c = scene.get(component: DribblinComponent.self, for: player) {
50+
c.maxSpeed = 6.5
51+
c.kickSpeed = 18.0
52+
}
53+
54+
```
55+
56+
This example creates a new entity called player, attaches a DribblinComponent, and updates its values.
57+
58+
59+
On its own, the component just stores numbers — it doesn’t do anything yet.
60+
To make the player actually dribble, you’ll need to implement a system that processes this component each frame.

0 commit comments

Comments
 (0)