summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/simulation/actions.js4
-rw-r--r--src/simulation/actions.test.js12
-rw-r--r--src/simulation/senses.js5
-rw-r--r--src/simulation/senses.test.js52
4 files changed, 71 insertions, 2 deletions
diff --git a/src/simulation/actions.js b/src/simulation/actions.js
index 78345ce..4ee17d8 100644
--- a/src/simulation/actions.js
+++ b/src/simulation/actions.js
@@ -6,6 +6,7 @@ const threshold = 0.5;
const move_forward = {
size: 1,
propose: (world, agent, head) => {
+ if (agent.flags.frozen === true) { return []; }
if (head[0] > threshold) {
const dx = { n: 0, e: 1, s: 0, w: -1 }[agent.flags.orientation];
const dy = { n: -1, e: 0, s: 1, w: 0 }[agent.flags.orientation];
@@ -26,6 +27,7 @@ const move_forward = {
const move_backward = {
size: 1,
propose: (world, agent, head) => {
+ if (agent.flags.frozen === true) { return []; }
if (head[0] > threshold) {
const dx = { n: 0, e: 1, s: 0, w: -1 }[agent.flags.orientation];
const dy = { n: -1, e: 0, s: 1, w: 0 }[agent.flags.orientation];
@@ -46,6 +48,7 @@ const move_backward = {
const turn_left = {
size: 1,
propose: (world, agent, head) => {
+ if (agent.flags.frozen === true) { return []; }
if (head[0] > threshold) {
const orientation = { n: 'w', e: 'n', s: 'e', w: 's' }[agent.flags.orientation];
return [{
@@ -64,6 +67,7 @@ const turn_left = {
const turn_right = {
size: 1,
propose: (world, agent, head) => {
+ if (agent.flags.frozen === true) { return []; }
if (head[0] > threshold) {
const orientation = { n: 'e', e: 's', s: 'w', w: 'n' }[agent.flags.orientation];
return [{
diff --git a/src/simulation/actions.test.js b/src/simulation/actions.test.js
index e0b29dc..e8406bc 100644
--- a/src/simulation/actions.test.js
+++ b/src/simulation/actions.test.js
@@ -280,3 +280,15 @@ test("take flag", () => {
expect(take_flag.propose(world, agent, [0])).toEqual([]);
});
+
+
+test("frozen agents cannot move", () => {
+ const agent = { id: 0, x: 0, y: 0, flags: { orientation: 'n', frozen: true } };
+
+ const world = { agents: [agent] };
+
+ expect(move_forward.propose(world, agent, [1])).toEqual([]);
+ expect(move_backward.propose(world, agent, [1])).toEqual([]);
+ expect(turn_left.propose(world, agent, [1])).toEqual([]);
+ expect(turn_right.propose(world, agent, [1])).toEqual([]);
+});
diff --git a/src/simulation/senses.js b/src/simulation/senses.js
index d3e7c1e..9cc6c41 100644
--- a/src/simulation/senses.js
+++ b/src/simulation/senses.js
@@ -99,8 +99,9 @@ function vision_idx_to_world_pos(world, agent, idx) {
function see_cell(world, x, y) {
const team = 0;
const orientation = 0;
- if (!world.lattice[y][x]) {
- throw new Error(`${x}, ${y}`);
+ if (!world.lattice[y] || !world.lattice[y][x]) {
+ // beyond the map edge
+ return [ 0, 0, 0 ];
}
const type = {
active: -0.8,
diff --git a/src/simulation/senses.test.js b/src/simulation/senses.test.js
index 502646e..68b1b30 100644
--- a/src/simulation/senses.test.js
+++ b/src/simulation/senses.test.js
@@ -393,3 +393,55 @@ test("see agents", () => {
ew, _, _, _, _, _, _, _, _, _, _, _, _, _, _, dn, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
]);
});
+
+
+test("seeing 'nothing' looks like teamless empty squares", () => {
+ const lattice = [[]];
+ const agent = { id: 0, x: 0, y: 0, flags: { team: 0, orientation: 'n' } };
+ const world = {
+ lattice, agents: [agent],
+ };
+
+ const _ = [
+ 0.0, 0.0, 0.0,
+ ];
+ const an = [
+ -0.8 + 0.0625*(-10/11), // team + identity
+ -0.8 + 0.0625*(-36/37), // orientation + identity
+ 0.0 + 0.0625*(-498/499), // class + identity
+ ];
+
+ expect(see.read(world, agent)).toEqual([
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, an, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
+ ]);
+});