Skip to content
Snippets Groups Projects
Commit 76b1ac29 authored by dg's avatar dg
Browse files

player sliding!

git-svn-id: http://svn.net-core.org/repos/t-engine4@418 51575b47-30f0-44d4-a5cc-537603b46e54
parent 414b94f0
No related branches found
No related tags found
No related merge requests found
require "engine.class"
--- Makes the player "slide" along walls when possible
-- Simply call x, y = self:tryPlayerSlide(x, y, force) in your player's move() method
module(..., package.seeall, class.make)
function _M:tryPlayerSlide(x, y, force)
-- Try to slide along walls if possible
if game.level.map:checkAllEntities(x, y, "block_move", self, false) and not force then
local dir = util.getDir(x, y, self.x, self.y)
local ldir, rdir = dir_sides[dir].left, dir_sides[dir].right
local lx, ly = util.coordAddDir(self.x, self.y, ldir)
local rx, ry = util.coordAddDir(self.x, self.y, rdir)
-- Slide left
if not game.level.map:checkAllEntities(lx, ly, "block_move", self, false) and game.level.map:checkAllEntities(rx, ry, "block_move", self, false) then
x, y = lx, ly
-- Slide right
elseif game.level.map:checkAllEntities(lx, ly, "block_move", self, false) and not game.level.map:checkAllEntities(rx, ry, "block_move", self, false) then
x, y = rx, ry
end
end
return x, y
end
......@@ -3,6 +3,7 @@ require "mod.class.Actor"
require "engine.interface.PlayerRest"
require "engine.interface.PlayerRun"
require "engine.interface.PlayerHotkeys"
require "engine.interface.PlayerSlide"
local Map = require "engine.Map"
local Dialog = require "engine.Dialog"
local ActorTalents = require "engine.interface.ActorTalents"
......@@ -17,7 +18,8 @@ module(..., package.seeall, class.inherit(
mod.class.Actor,
engine.interface.PlayerRest,
engine.interface.PlayerRun,
engine.interface.PlayerHotkeys
engine.interface.PlayerHotkeys,
engine.interface.PlayerSlide
))
function _M:init(t, no_default)
......@@ -62,6 +64,8 @@ function _M:init(t, no_default)
end
function _M:move(x, y, force)
x, y = self:tryPlayerSlide(x, y, force)
local moved = mod.class.Actor.move(self, x, y, force)
if moved then
game.level.map:moveViewSurround(self.x, self.y, 8, 8)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment