ikea/mods/son_of_a_goap/init.lua

91 lines
2.4 KiB
Lua

local MODPATH = minetest.get_modpath(minetest.get_current_modname()) .. "/"
soag = {}
function soag.meets_requirements(a, b)
for k, v in pairs(a) do
if b[k] ~= v then
return false
end
end
return true
end
soag.Planner = dofile(MODPATH .. "planner.lua")
soag.MemoryManager = dofile(MODPATH .. "memorymanager.lua")
-- [[ Tests ]] --
do
local none = function() return true end
local Planner = soag.Planner:new()
Planner:addAction("look", {
cost = 1,
requires = {},
provides = {sees_enemy = true},
prerequisites = none, func = none
})
Planner:addAction("approach", {
cost = 1,
requires = {sees_enemy = true},
provides = {near_enemy = true},
prerequisites = none, func = none
})
Planner:addAction("leap", {
cost = 5,
requires = {sees_enemy = true},
provides = {near_enemy = true, on_top_of_enemy = true},
prerequisites = none, func = none
})
Planner:addAction("chase", {
cost = 10,
requires = {sees_enemy = true, enemy_moving = true},
provides = {near_enemy = true},
prerequisites = none, func = none
})
Planner:addAction("grapple", {
cost = 1,
requires = {sees_enemy = true, near_enemy = true},
provides = {enemy_moving = false},
prerequisites = none, func = none
})
Planner:addAction("punch", {
cost = 1,
requires = {sees_enemy = true, near_enemy = true, on_top_of_enemy = false},
provides = {enemy_dead = true},
prerequisites = none, func = none
})
Planner:addAction("pound", {
cost = 1,
requires = {sees_enemy = true, near_enemy = true, on_top_of_enemy = true},
provides = {enemy_dead = true},
prerequisites = none, func = none
})
Planner:addAction("headbutt", {
cost = 5,
requires = {enemy_moving = false, near_enemy = true, near_enemy = true},
provides = {enemy_dead = true},
prerequisites = none, func = none
})
Planner:addAction("explode", {
cost = 10,
requires = {near_enemy = true},
provides = {enemy_dead = true, self_dead = true},
prerequisites = none, func = none
})
do
local plan = Planner:getPlan({self_dead = false, enemy_dead = false, on_top_of_enemy = false}, {enemy_dead = true, self_dead = false, on_top_of_enemy = false})
assert(plan, "Getting Plan Failed! " .. dump(plan))
local test_string = ""
while #plan ~= 0 do
test_string = test_string .. " " .. table.remove(plan, 1)
end
assert(test_string == " look approach punch", "Plan Is Wrong\n" .. test_string)
end
end