better scripting api
This commit is contained in:
@@ -119,11 +119,11 @@ fn start_map_greeter_runs_init() {
|
||||
|
||||
#[test]
|
||||
fn set_tag_adds_and_removes_via_my_id() {
|
||||
// A script calls set_tag(MY_ID, "active", true) in init; the tag must be
|
||||
// A script calls set_tag(Me.id, "active", true) in init; the tag must be
|
||||
// present on the object afterward.
|
||||
let board = board_with_object(
|
||||
Some("t"),
|
||||
&[("t", r#"fn init() { set_tag(MY_ID, "active", true); }"#)],
|
||||
&[("t", r#"fn init() { set_tag(Me.id, "active", true); }"#)],
|
||||
);
|
||||
let mut game = GameState::new(board);
|
||||
game.run_init();
|
||||
@@ -132,7 +132,7 @@ fn set_tag_adds_and_removes_via_my_id() {
|
||||
// A script removes a pre-existing tag.
|
||||
let board2 = board_with_object(
|
||||
Some("t2"),
|
||||
&[("t2", r#"fn init() { set_tag(MY_ID, "active", false); }"#)],
|
||||
&[("t2", r#"fn init() { set_tag(Me.id, "active", false); }"#)],
|
||||
);
|
||||
// Seed the tag before construction.
|
||||
let mut game2 = GameState::new({
|
||||
@@ -152,8 +152,8 @@ fn has_tag_reads_own_tags() {
|
||||
Some("t"),
|
||||
&[(
|
||||
"t",
|
||||
r#"fn init() { set_tag(MY_ID, "active", true); }
|
||||
fn tick(dt) { log(has_tag("active").to_string()); }"#,
|
||||
r#"fn init() { set_tag(Me.id, "active", true); }
|
||||
fn tick(dt) { log(Me.has_tag("active").to_string()); }"#,
|
||||
)],
|
||||
);
|
||||
let mut game = GameState::new(board);
|
||||
@@ -177,9 +177,9 @@ fn objects_with_tag_returns_matching_ids() {
|
||||
vec![obj1, obj2],
|
||||
&[
|
||||
("q", r#"fn init() {
|
||||
let ids = objects_with_tag("enemy");
|
||||
log(ids.len().to_string());
|
||||
log(ids[0].to_string());
|
||||
let infos = Board.tagged("enemy");
|
||||
log(infos.len().to_string());
|
||||
log(infos[0].id.to_string());
|
||||
}"#),
|
||||
("none", ""),
|
||||
],
|
||||
@@ -196,7 +196,7 @@ fn my_name_returns_name_or_empty_string() {
|
||||
// An object with a name set on its ObjectDef should see it via my_name().
|
||||
let mut board = board_with_object(
|
||||
Some("n"),
|
||||
&[("n", r#"fn init() { log(my_name()); }"#)],
|
||||
&[("n", r#"fn init() { log(Me.name); }"#)],
|
||||
);
|
||||
board.objects.get_mut(&1).unwrap().name = Some("beacon".to_string());
|
||||
let mut game = GameState::new(board);
|
||||
@@ -206,7 +206,7 @@ fn my_name_returns_name_or_empty_string() {
|
||||
// An unnamed object should get an empty string.
|
||||
let board2 = board_with_object(
|
||||
Some("n"),
|
||||
&[("n", r#"fn init() { log(my_name()); }"#)],
|
||||
&[("n", r#"fn init() { log(Me.name); }"#)],
|
||||
);
|
||||
let mut game2 = GameState::new(board2);
|
||||
game2.run_init();
|
||||
@@ -227,8 +227,9 @@ fn object_id_for_name_finds_by_name() {
|
||||
vec![obj1, obj2],
|
||||
&[
|
||||
("q", r#"fn init() {
|
||||
log(object_id_for_name("target").to_string());
|
||||
log(object_id_for_name("missing").to_string());
|
||||
log(Board.named("target").id.to_string());
|
||||
let miss = Board.named("missing");
|
||||
log(if miss == () { "not_found" } else { miss.id.to_string() });
|
||||
}"#),
|
||||
("none", ""),
|
||||
],
|
||||
@@ -236,8 +237,8 @@ fn object_id_for_name_finds_by_name() {
|
||||
let mut game = GameState::new(board);
|
||||
game.run_init();
|
||||
let texts = log_texts(&game);
|
||||
assert_eq!(texts[0], "2"); // obj2 is id 2
|
||||
assert_eq!(texts[1], "0"); // 0 = not found
|
||||
assert_eq!(texts[0], "2"); // obj2 is id 2
|
||||
assert_eq!(texts[1], "not_found"); // Board.named returns () when no match
|
||||
}
|
||||
|
||||
// Ensure try_move from the player side also triggers scripted bump
|
||||
|
||||
Reference in New Issue
Block a user