91 lines
2.4 KiB
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
|