gmoves = {
let create_move_set = (base_name, axis, pred) => {
let move1 = create_gmove(base_name, axis, 90, pred)
let move2 = create_gmove(base_name + "2", axis, 180, pred)
let move3 = create_gmove(base_name + "'", axis, 270, pred)
return [move1, move2, move3]
}
let U = create_move_set("U", new Vec(0, 1, 0), (pos) => pos.y > 0)
let u = create_move_set("u", new Vec(0, 1, 0), (pos) => pos.y >= 0)
let D = create_move_set("D", new Vec(0, -1, 0), (pos) => pos.y < 0)
let d = create_move_set("d", new Vec(0, -1, 0), (pos) => pos.y <= 0)
let E = create_move_set("E", new Vec(0, 1, 0), (pos) => pos.y === 0)
let y = create_move_set("y", new Vec(0, 1, 0), () => true)
let L = create_move_set("L", new Vec(-1, 0, 0), (pos) => pos.x < 0)
let R = create_move_set("R", new Vec(1, 0, 0), (pos) => pos.x > 0)
let l = create_move_set("l", new Vec(-1, 0, 0), (pos) => pos.x <= 0)
let r = create_move_set("r", new Vec(1, 0, 0), (pos) => pos.x >= 0)
let M = create_move_set("M", new Vec(-1,0, 0), (pos) => pos.x === 0)
let x = create_move_set("x", new Vec(1, 0, 0), () => true)
let F = create_move_set("F", new Vec(0, 0, 1), (pos) => pos.z > 0)
let B = create_move_set("B", new Vec(0, 0, -1), (pos) => pos.z < 0)
let S = create_move_set("S", new Vec(0, 0, 1), (pos) => pos.z === 0)
let z = create_move_set("z", new Vec(0, 0, 1), () => true)
let gmoves = {};
[U, D, u, d, E, y, L, R, l, r, M, x, F, B, S, z].flat().map(move => gmoves[move.name] = move)
return gmoves
}