Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Release

on:
push:
tags:
- "v*"

permissions:
contents: write

jobs:
build-release-assets:
name: Build Release Assets
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
godot_artifact: libpraeda_godot.so
godot_asset: praeda-godot-linux-x86_64.so
core_artifact: libpraeda.so
cpp_asset: praeda-cpp-linux-x86_64.zip
csharp_asset: praeda-csharp-linux-x86_64.zip
- os: windows-latest
target: x86_64-pc-windows-msvc
godot_artifact: praeda_godot.dll
godot_asset: praeda-godot-windows-x86_64.dll
core_artifact: praeda.dll
cpp_asset: praeda-cpp-windows-x86_64.zip
csharp_asset: praeda-csharp-windows-x86_64.zip
- os: macos-latest
target: aarch64-apple-darwin
godot_artifact: libpraeda_godot.dylib
godot_asset: praeda-godot-macos-arm64.dylib
core_artifact: libpraeda.dylib
cpp_asset: praeda-cpp-macos-arm64.zip
csharp_asset: praeda-csharp-macos-arm64.zip

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Build Godot Bindings
run: cargo build --release -p praeda-godot --target ${{ matrix.target }}

- name: Build Core Library
run: cargo build --release -p praeda --target ${{ matrix.target }}

- name: Prepare Godot Asset
shell: bash
run: |
cp target/${{ matrix.target }}/release/${{ matrix.godot_artifact }} ${{ matrix.godot_asset }}

- name: Prepare C++ Asset
shell: bash
run: |
mkdir -p cpp_dist/include
mkdir -p cpp_dist/lib
cp include/praeda.hpp cpp_dist/include/
cp target/${{ matrix.target }}/release/${{ matrix.core_artifact }} cpp_dist/lib/

if [ "${{ runner.os }}" == "Windows" ]; then
7z a ${{ matrix.cpp_asset }} ./cpp_dist/*
else
zip -r ${{ matrix.cpp_asset }} cpp_dist
fi

- name: Prepare C# Asset
shell: bash
run: |
mkdir -p csharp_dist/src
mkdir -p csharp_dist/lib
cp examples/csharp/PraedaGenerator.cs csharp_dist/src/
cp target/${{ matrix.target }}/release/${{ matrix.core_artifact }} csharp_dist/lib/

if [ "${{ runner.os }}" == "Windows" ]; then
7z a ${{ matrix.csharp_asset }} ./csharp_dist/*
else
zip -r ${{ matrix.csharp_asset }} csharp_dist
fi

- name: Upload Release Assets
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
${{ matrix.godot_asset }}
${{ matrix.cpp_asset }}
${{ matrix.csharp_asset }}
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
target/
coverage/
lcov.info
lcov.info
Praeda.sln
12 changes: 9 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ cargo strict

```
praeda/
├── bindings/ # Language bindings
│ └── praeda-godot/ # Godot 4.x GDExtension bindings
├── src/ # Library source code
│ ├── lib.rs # Library entry point
│ ├── models.rs # Data structures (Item, ItemAttribute, Affix, etc.)
Expand All @@ -204,9 +206,13 @@ praeda/
│ │ ├── README.md
│ │ ├── CMakeLists.txt
│ │ └── test_praeda.cpp
│ └── csharp/ # C# FFI examples
│ ├── README.md
│ └── Praeda.cs
│ ├── csharp/ # C# FFI examples
│ │ ├── README.md
│ │ ├── PraedaGenerator.cs
│ │ └── PraedaTest.cs
│ └── godot/ # Godot 4.x example project
│ ├── project.godot
│ └── test_praeda.gd
├── .github/workflows/ # CI/CD pipelines
│ ├── rust.yml # Rust build, test, and coverage
│ ├── build-libraries.yml # FFI library builds for C++ and C#
Expand Down
18 changes: 9 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ default-members = [".", "bindings/praeda-godot"]

[package]
name = "praeda"
version = "0.2.0"
version = "0.2.1"
edition = "2024"
license = "LGPL-3.0-or-later"
description = "A procedural loot generator library with C++ and C# FFI bindings"
Expand Down
34 changes: 33 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,39 @@ class Program {

### Godot

See `examples/godot`.
See `examples/godot` for a full project example.

```gdscript
func _ready():
var generator = PraedaGodotGenerator.new()

# Define quality tiers
generator.set_quality_data("Common", 100)
generator.set_quality_data("Rare", 30)

# Define item types
generator.set_item_type("Weapon", 1)
generator.set_item_subtype("Weapon", "Sword", 1)
generator.set_item_names("Weapon", "Sword", ["Longsword", "Shortsword"])

# Define attributes
generator.set_attribute("Weapon", "", "Damage", 10.0, 5.0, 20.0, true)

# Generate loot
var options = {
"number_of_items": 5,
"base_level": 15.0,
"level_variance": 5.0,
"affix_chance": 0.75,
"linear": true,
"scaling_factor": 1.0
}

var items = generator.generate_loot(options, {}, "Loot")

for item in items:
print("%s: %s" % [item.quality, item.name])
```

## Building

Expand Down
Loading