Reintroduce apps/arcade and the ten game crates that were ripped out of
the fork (assets, audio, blocks, coedit, gen, net, pkg, render, script,
session), from makepad-internal/dev. Reconcile against the fork's layout:
- makepad-game-sim/math come from the fork's existing libs/sim + sim/math;
the copied internal libs/game/{sim,math} are dropped and the kept game
crates plus arcade point at ../../sim and ../../sim/math.
- arcade AI is rewritten off the removed makepad-ai agent API onto the
makepad-ai-hub headless ChatProvider worker (example/cad pattern):
AiWorker{send,cancel,poll}, ai_worker_loop driving
ClaudeApiChatProvider(ClaudeCli), AiWorkerEvent availability/delta/
done/error mapped into the chat feed and authoring land_edit, with
main.rs send_message/cancel_request/event-drain rebuilt around it.
- the game-script sandbox is adapted to the fork's jailed splash storage:
every isolate gets mod.fs = splash_storage jail; splaes splash_storage
set_root_for_heap is now public so the ScriptHost (or Splash) can grant
a per-game jail root. ENT font: build.rs/dispatch.rs entities fill new
fork sim Entity/Part fields via ..Default::default(); world_raycast now
borrows mutably and returns the material id.
cargo check -p makepad-arcade and the game + arcade test suites pass.
28 lines
1.2 KiB
Rust
28 lines
1.2 KiB
Rust
//! What rigged characters the library holds, and what the AI is told about them.
|
|
fn main() {
|
|
use makepad_game_assets::agent;
|
|
let idx = makepad_game_assets::AssetIndex::build(std::path::Path::new(
|
|
"apps/arcade/resources",
|
|
));
|
|
for c in idx.casts() {
|
|
println!(
|
|
"rig {:>2} joints — {} members, up to {} clips",
|
|
c.joints, c.members.len(), c.max_clips
|
|
);
|
|
println!(" states: {}", c.shared_states.join(", "));
|
|
println!(" members: {}", c.members.join(", "));
|
|
if c.richest.len() < c.members.len() {
|
|
println!(" richest ({} clips): {}", c.max_clips, c.richest.join(", "));
|
|
}
|
|
println!();
|
|
}
|
|
let json = agent::casts_to_json(&agent::execute_cast(&idx, None), 6);
|
|
println!("find_cast JSON ({} bytes):\n{}", json.len(), json);
|
|
println!();
|
|
for q in ["a character that can attack", "a skeleton enemy", "someone who can run and jump"] {
|
|
let hits = idx.find(q);
|
|
let top: Vec<&str> = hits.iter().filter(|h| h.entry.rigged).take(3)
|
|
.map(|h| h.entry.id.as_str()).collect();
|
|
println!("{q:<34} -> {}", top.join(", "));
|
|
}
|
|
}
|