summaryrefslogtreecommitdiff
path: root/dnglib/defaults.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dnglib/defaults.lua')
-rw-r--r--dnglib/defaults.lua178
1 files changed, 178 insertions, 0 deletions
diff --git a/dnglib/defaults.lua b/dnglib/defaults.lua
new file mode 100644
index 0000000..77f688c
--- /dev/null
+++ b/dnglib/defaults.lua
@@ -0,0 +1,178 @@
+-- -----------------------------------------------------------------------
+-- dng
+-- ------------------------------------------------------------------------
+-- Copyright (c) 2022 Steph Enders <steph@senders.io>
+--
+-- This software is provided 'as-is', without any express or implied
+-- warranty. In no event will the authors be held liable for any damages
+-- arising from the use of this software.
+--
+-- Permission is granted to anyone to use this software for any purpose,
+-- including commercial applications, and to alter it and redistribute it
+-- freely, subject to the following restrictions:
+--
+-- 1. The origin of this software must not be misrepresented; you must not
+-- claim that you wrote the original software. If you use this software
+-- in a product, an acknowledgment in the product documentation would
+-- be appreciated but is not required.
+--
+-- 2. Altered source versions must be plainly marked as such, and must not
+-- be misrepresented as being the original software.
+--
+-- 3. This notice may not be removed or altered from any source
+-- distribution.
+--
+-- -----------------------------------------------------------------------
+
+--[[
+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)
+
+--]]
+package.path = "./?.lua;" .. package.path
+require "dnglib.constants";
+local algs = require "dnglib.algs";
+local hasLost = false;
+local hasWon = false;
+local hasIntro = false;
+
+keys = {
+ up = KEY_UP,
+ down = KEY_DOWN,
+ left = KEY_LEFT,
+ right = KEY_RIGHT,
+ quit = KEY_ESCAPE,
+ start = KEY_SPACE,
+ restart = KEY_SPACE,
+}
+
+--- 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 == keys.start then
+ c_trigger_level_start();
+ end
+ elseif scene == SCENE_LEVEL then
+ dx = 0
+ dy = 0
+ if pressedKey == keys.up then
+ dy = -1
+ elseif pressedKey == keys.left then
+ dx = -1
+ elseif pressedKey == keys.down then
+ dy = 1
+ elseif pressedKey == keys.right then
+ dx = 1
+ end
+
+ c_move_player(dx, dy)
+ elseif scene == SCENE_WIN or scene == SCENE_LOSS then
+ if pressedKey == keys.restart then
+ c_trigger_restart()
+ end
+ end
+end
+
+local diff_time = 0
+---@param dt number
+function onUpdate(dt)
+ diff_time = diff_time + dt
+ 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;
+ if diff_time >= MOV_TIME then
+ next = algs.pathfind(v, player, map)
+ else
+ next = { dx = 0, dy = 0 }
+ end
+ 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
+ if diff_time > MOV_TIME then
+ diff_time = 0
+ 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 -- space..
+.. 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,
+ keys = keys,
+}