--[[ These are the default implementations of the override actions. If you want to add custom logic into your game you can define a "proc.lua" in your map dir. The following functions are also available via our C library: void c_update_player_pos (dx, dy) boolean c_player_can_move (dx, dy) boolean c_enemy_can_move (id, dx, dy) c_spawn_enemy (x, y) c_destroy_enemy (id) c_trigger_win() c_trigger_loss(msg) c_fatal(msg) --]] require "include.constants"; local algs = require "include.algs"; local hasLost = false; local hasWon = false; local hasIntro = false; --- setup random --math.randomseed(os.time()) ---@param pressedKey number function onKeyPress(pressedKey) scene = c_get_scene() assert(type(scene) == "number", "scene is not a number") if scene == SCENE_INTRO then if pressedKey == KEY_S then print("Lua start"); c_trigger_level_start(); end elseif scene == SCENE_LEVEL then dx = 0 dy = 0 if (pressedKey == KEY_W) then dy = -1 elseif pressedKey == KEY_A then dx = -1 elseif pressedKey == KEY_S then dy = 1 elseif pressedKey == KEY_D then dx = 1 end c_move_player(dx, dy) end end function onUpdate() enemies = c_get_enemies() assert(type(enemies) == "table", "Enemies not a table") player = c_get_player_position() assert(type(player) == "table", "Player is not a table") map = c_get_map(); assert(type(map) == "table", "map is not a table") for _, v in ipairs(enemies) do local next = algs.pathfind(v, player, map) new_pos = c_move_enemy(v.id, next.dx, next.dy) assert(type(new_pos) == "table", "new_pos is not a table") if new_pos.x == player.x and new_pos.y == player.y then c_trigger_loss() end end treasures = c_get_treasures() assert(type(treasures) == "table", "treasures is not a table") for _, t in ipairs(treasures) do if t.x == player.x and t.y == player.y then c_score_treasure(t.id) if #treasures == 1 then c_trigger_win() end end end end function onWin() if hasWon == false then hasWon = true print("You WIN!!!!!!!!!") end end function onLoss() if hasLost == false then hasLost = true print("Oh no! You lost!") end end function onIntro() if hasIntro == false then hasIntro = true print([[ ................... .. dng .. ................... .. controls .. ................... .. start -- s .. .. move -- wasd .. .. quit -- q .. ................... .. goal .. ................... .. Find treasure .. .. Avoid enemies .. ................... ]]) end end --- allow for requiring in other files for usage return { onKeyPress = onKeyPress, onUpdate = onUpdate, onWin = onWin, onLoss = onLoss, onIntro = onIntro, }