2 个版本
0.0.2 | 2024 年 6 月 2 日 |
---|---|
0.0.1 | 2024 年 5 月 30 日 |
#741 在 开发工具 中
13KB
162 行
Sol
用于自定义内容的编程语言。
[!警告]
Sol 处于早期开发阶段,目前不应用于实际项目。不过,欢迎加入讨论,并帮助我确定其未来 :-)
Sol 将现代编程语言设计应用于重新发明创建和维护游戏资产的方式。它的语法既 优美 又 高效,并且类型安全。它从 LUA、Rust 和 GDScript 中汲取灵感,在美学和组织上创造出卓越的开发体验。
Sol 也是免费、开源、与引擎无关的,并且不由公司拥有。在你创作了一个资产后,你真正 拥有 它,并且可以轻松将其移植到其他引擎。
每个 .sol
文件都是一个 "资产",例如,一个物品...
-- weapons/iron_sword.sol
using game.models.*
using game.sprites.icons
impl ItemKind
label = "Iron Sword"
durability = 4
icon = icons.iron_sword
action on_use(target: Character)
target.try_equip_weapon(weapon: self)
end
end
...或者一个场景...
using game.chars.Jude
--todo Add portraits to those dialogues;
def "Main Scene"
[Echo]
- Jude, could you please move a little?
[Jude]
- nah
[Echo]
- I'll hit you in the head with a pan.
[Jude]
- *moves*
move(who: Jude, by: vec2(1, 0))
end
...甚至是一个关卡。
...impl Room
def player_spawn : Marker
position = vec2(-10, -3)
facing = DOWN
end
def chest1 : Chest
position = vec2(0, 0)
end
任何属于你游戏 "内容" 而不是你必须针对引擎编码的核心机制,都可以放入 .sol 文件中 :-)
Sol 的脚本功能看起来简单(得益于类似 LUA 的语法),但实际上远非最小化。Sol 确实 是一种编程语言,并且由于它的虚拟机是用 Rust 编写的,因此运行速度快。
特性
- 纯文本:可以轻松地纳入版本控制;
- 与引擎无关:你的资产将不是 'Godot' 资产或 'Unity' 资产,而是 你的 资产,无论你将它们带到哪里;
- 极快的迭代周期;
- 简单但强大的对话框,语法简单,你可能甚至会用它来绘制草图;
[Jude smiling]
- Hello, there!
- I found one item here and I want to give it to you, {player.name}!
- 彻底的类型安全,遵循 "让无效状态不可表示" 的口号,以消除在游戏开发中常见的整个类别的错误;
model Item
field name : text
field unbreakable : truth
field icon : Image
if not unbreakable then
field durability : nat
end
end
- 使用
sol add <dependency_uri>
进行依赖管理,以快速将资产包或框架安装到你的项目中; - 通过使用
extensions
与外部资源(.png、.gltf、.aseprite)进行互操作; - 与引擎集成的可能性;
- 重构工具,如 LSP 和
sol migrate
。
安装
您可以从源码编译作为Rust项目,或者通过crates.io使用cargo进行安装。
cargo install sol-lang
将来,我想为几个引擎提供集成插件。在这些情况下,插件将负责构建 sol
。
Sol LSP正在开发中,以及Zed扩展。
贡献
暂未提供。
[1] - "使无效状态无法表示."
依赖关系
~10–23MB
~296K SLoC